我有一个 div,里面会有一些图像。当用户滚动到图像的顶部或底部边缘即将被父 div 隐藏的点时,我希望图像消失。结构是这样的:
<div class="parent">
<img/>
<img/>
</div>
我的目标是让图像在其顶部或底部边缘开始被父 div 隐藏时淡出,然后在其滚动到全视图时让它淡入。
我正在使用 jQuery 并监听div
滚动事件来检查img
offset().top
,一旦它达到不在视图中的最高值,我就会隐藏图像。
但这似乎占用了大量的 cpu 时间,因为我必须在每个滚动事件中遍历图像。最重要的是,即使我调用hide()
了img
,它也根本没有隐藏它(放置一个断点只是为了确保它被调用,并且确实如此)。有没有准确的方法来做到这一点?
编辑: 感谢 mcpDESIGNS,我需要使用position()
而不是offset()
. 此外,hide()
由于display
设置为none
. 所以我切换到visibility:hidden
它并按预期工作。
EDIT2: 就像一个注释,这是我正在使用的 js,几乎是 mcpDesigns 所建议的
老的
var display = $("div");
display.scroll(function () {
var avatars = $("div > img");
console.log("************************");
avatars.each(function (index) {
console.log($(this).offset().top);
if ($(this).offset().top < 40)
$(this).hide();
else {
$(this).show();
}
});
});
新的
var display = $("div");
display.scroll(function () {
var avatars = $("div > img");
console.log("************************");
avatars.each(function (index) {
console.log($(this).position().top);
if ($(this).position().top < 0)
$(this).css("visibility", "hidden")//.hide();
else {
$(this).css("visibility", "")//.show();
}
});
});