2014-10-27 108 views
-2

有没有办法通过使用jQuery来确定某个元素当前是否在用户的屏幕/视口上可见? (不使用其他外部库)确定元素是否在屏幕上

+2

这已经回答了很多很多次之前。你问它,然后在一分钟内回答。为什么? – 2014-10-27 15:36:59

+0

@DeeMac我正在寻找这样的问题,并没有找到解决方案。我已经发布了这个问题马上回答。 (回答你自己的问题功能) – Dropout 2014-10-27 15:38:13

+0

可能重复[检查元素是否可见后滚动](http://stackoverflow.com/questions/487073/check-if-element-is-visible-after-scrolling) – MaxiWheat 2014-10-27 16:01:23

回答

0

不能直接使用默认jQuery的,但你可以实现自己的功能,你可以用它之后一个jQuery的元素:

(function ($) { 
    $.fn.isOnScreen = function() { 
     var topView = $(window).scrollTop(); 
     var botView = topView + $(window).height(); 
     var topElement = this.offset().top; 
     var botElement = topElement + this.height(); 
     return ((botElement <= botView) && (topElement >= topView)); 
    } 
})(jQuery); 

添加此代码后,你可以调用$('#yourElementId').isOnScreen()如果整个元素在屏幕上将返回true,如果不是,则返回false

您也可以玩弄它一下,所以它会返回true如果至少元件的四分之一是在屏幕上可见,例如像这样:

(function ($) { 
    $.fn.isOnScreen = function() { 
     var topView = $(window).scrollTop(); 
     var botView = topView + $(window).height(); 
     var topElement = this.offset().top; 
     var botElement = topElement + (this.height()/4); //<--- 
     return ((botElement <= botView) && (topElement >= topView)); 
    } 
})(jQuery); 
+0

不错一个......但是如果元素本身在屏幕上,但是在具有溢出的周围div容器之外,你会怎么做:hidden? – errand 2014-10-27 15:34:41

+0

你的意思是如果父母被隐藏? @errand – Dropout 2014-10-27 15:36:12

+0

不,父母是可见的。像这样:父div是100x100px,溢出隐藏,它包含5个大小相同的图像 - 只有第一个可见,你必须滚动才能看到另一个。但你的视口是2000x1000px - 所以在技术上它是在屏幕上 - 但它是由于溢出隐形... – errand 2014-10-27 15:38:51