gpt4 book ai didi

Jquery - 在视口(viewport)中选择具有类名的图像

转载 作者:行者123 更新时间:2023-11-27 23:57:58 24 4
gpt4 key购买 nike

我有一个带有图片的网页。当我滚动到图像时,我希望它们具有动画效果。我正在这样做。

$.fn.is_on_screen = 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));
};


$(window).scroll(function(){

if( $('.effect').is_on_screen()){
$('.effect').addClass('animated bounceIn');
}
});

但是,具有“.effect”类(不在视口(viewport)中)的其他图像也是动画的。是否有任何想法可以将 addClass 仅添加到视口(viewport)中具有名为“.effect”的类的当前图像?

我已经试过了,但没有用:

$(window).scroll(function(){

if( $('.effect').is_on_screen()){
$('.effect', this).addClass('animated bounceIn');
}
});

最佳答案

您可以尝试以下方法。首先,将所选元素添加到列表中并保持其当前可见性。

var settings = {
throttle: 300
};
var elements = [];

$.fn.viewport = function (options) {
$.extend(settings, options);

elements = this;

return elements.each(function () {
$(this).data('visible', $(this).visible());
});
};

要检查元素在视口(viewport)中是否可见,您可以使用 getBoundingClientRect 方法,该方法返回元素相对于视口(viewport)的坐标。

$.fn.visible = function () {
var rect = this[0].getBoundingClientRect();
var $window = $(window);

return (
rect.top <= $window.height()
&& rect.right >= 0
&& rect.bottom >= 0
&& rect.left <= $window.width()
);
};

现在您需要根据滚动位置自动跟踪元素可见性。但是,scroll 等高频事件每秒可以触发数十次。使用 setTimeout 限制实际页面更新的次数可以提高性能。

var timer;

$(window).on('scroll', function (event) {
if (!timer) {
timer = setTimeout(function () {
$.each(elements, function () {
var visible = $(this).visible();

if (visible) {
if (!$(this).data('visible')) {
$(this).data('visible', visible);
$(this).trigger('enter', event);
}
} else if ($(this).data('visible')) {
$(this).data('visible', visible);
$(this).trigger('leave', event);
}
});

timer = null;
}, settings.throttle);
}
});

使用示例:

$('div').viewport().on({
enter: function () {
$(this).addClass('visible');
},
leave: function () {
$(this).removeClass('visible');
}
});

在此处查看实例:http://jsfiddle.net/cdog/KYJ4h/ .

关于Jquery - 在视口(viewport)中选择具有类名的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22878342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com