Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定元素是否在屏幕上_Javascript_Jquery_Viewport - Fatal编程技术网

Javascript 确定元素是否在屏幕上

Javascript 确定元素是否在屏幕上,javascript,jquery,viewport,Javascript,Jquery,Viewport,有没有办法通过使用jQuery确定某个元素当前是否在用户的屏幕/视口中可见?(不使用其他外部库)不直接使用默认jQuery,但您可以实现自己的功能,以后可以使用一个jQuery元素: (function ($) { $.fn.isOnScreen = function () { var topView = $(window).scrollTop(); var botView = topView + $(window).height(); v

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

不直接使用默认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);

很好的一个。。。但是,如果元素本身在屏幕上,但是在一个带有overflow:hidden的div容器之外,您会怎么做?您的意思是如果父元素是隐藏的@errandno,父级是可见的。类似于:父div是100x100px,溢出隐藏,它包含5个大小相同的图像-只有第一个图像可见,您必须滚动以使另一个可见。但是你的视口是20000x1000px,所以技术上它在屏幕上,但是由于溢出,它是不可见的…@差事啊,我现在明白了。。是的,我的答案只解决了DOM在屏幕上的观点,如果你能提供一个解决这个问题的解决方案,我将很高兴学习新的东西并接受你的答案;):)在这个问题上看不到简单的解决方案。我猜您必须扩展您的函数,以检查元素的父元素之一是否有溢出:隐藏,如果有,请查找此父元素的维度,并检查您的元素是否在这些维度内。。。别忘了也要考虑滚动条的位置。。。好吧,我看不到类似的用例;)这已经被回答了很多很多次了。你问了,然后在一分钟内回答了。为什么?@DeeMac我一直在寻找这样一个问题,但没有找到解决办法。我已经发布了这个问题并给出了答案。(回答您自己的问题功能)可能重复
(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);