Jquery inview元素应该在加载和滚动时工作

Jquery inview element should work on load and on scroll

本文关键字:滚动 工作 加载 inview 元素 Jquery      更新时间:2023-09-26

我试图通过向元素添加类并在不inview时删除它来使此inview函数工作。不知道我错过了什么……请帮忙好吗?

http://jsfiddle.net/zefjh/

$.fn.isOnScreen = function () {
    var win = $(window);
    var viewport = {
        top: win.scrollTop(),
        left: win.scrollLeft()
    };
    viewport.right = viewport.left + win.width();
    viewport.bottom = viewport.top + win.height();
    var bounds = this.offset();
    bounds.right = bounds.left + this.outerWidth();
    bounds.bottom = bounds.top + this.outerHeight();
    return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom));
};
$('.box').click(function () {
    alert($('.box').isOnScreen());
});
if ($('.box').isOnScreen() == true) {
    $('.box').addClass('inview');
}
$(window).scroll(function () {
    if ($('.box').isOnScreen() == true) {
        $('.box').addClass('inview');
    } else {
        $('.box').removeClass('inview');
    }
});

您可以使用$.each来检查每个.box,无论它是否在屏幕上,在滚动

$.each($(".box"), function(){ if ($(this).isOnScreen()) { $(this).addClass('inview'); }
else{ $(this).removeClass('inview'); } });

还有:你的点击功能应该检查点击的元素是否在屏幕上使用this

$('.box').click(function(){ alert($(this).isOnScreen()); });

最后:您可以将== true部分留在if语句中。

完整示例:http://jsfiddle.net/zefjh/2/

我修改了你的函数,请检查一下

fiddle http://jsfiddle.net/kka284556/zefjh/4/

设置为滚动