javascript - div 淡出内部 div 元素

标签 javascript jquery css fade

我遇到了以下 fiddle ,它让元素在到达顶部时一个一个地淡出文档。

通过执行javascript:

$(window).scroll(function () {
    $('[id^="box"]').each(function () {
        if (($(this).offset().top - $(window).scrollTop()) < 20) {
            $(this).stop().fadeTo(100, 0);
        } else {
            $(this).stop().fadeTo('fast', 1);
        }
    });
});

http://jsfiddle.net/JdbhV/6/

只有它适用于整个窗口,我希望它适用于 div 标签。所以我修改了 fiddle 以在其中添加 div 测试和所有其他 div,然后修改 javascript 以获取 div 而不是窗口:

$("#test").scroll(function () {
    $('[id^="box"]').each(function () {
        if (($(this).offset().top - $("#test").scrollTop()) < 20) {
            $(this).stop().fadeTo(100, 0);
        } else {
            $(this).stop().fadeTo('fast', 1);
        }
    });
});

http://jsfiddle.net/JdbhV/1692/

但现在它们消失得太快了,当它们到达 div 的顶部时就消失了。

有人指出这里出了什么问题吗?

最佳答案

The .offset() method allows us to retrieve the current position of an element relative to the document.

滚动窗口不会改变元素在文档中的位置,但是在另一个元素内滚动元素会。这会导致偏移位置发生变化,从而导致检查框是否位于 ScrollView 的顶部。

尝试使用 .position()获取相对于父级的位置的方法。

$("#test").scroll(function () {
    $('[id^="box"]').each(function () {
            //When the top of the square goes above the top of the scroll element, fade it out
        if ($(this).position().top < 0) {
            $(this).stop().fadeTo(100, 0);
        } else {
            $(this).stop().fadeTo('fast', 1);
        }
    });
});

http://jsfiddle.net/ys0m6axL/

关于javascript - div 淡出内部 div 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40756198/

相关文章:

JavaScript - 将一种方法应用于多个对象

javascript - 如何在不影响可见性的情况下为 Instagram Logo 添加颜色渐变?

javascript - 选择特定 radio 时更改 "p"和 "img"的内容

jquery - 有什么比发布 JSON 结果更好的选择?

css - Webkit 和子像素值,解决方法?

javascript - 隐藏单选按钮直到满足条件

javascript - innerHTML 不评估 javascript 吗?

javascript - 标题下方的子 div 内的平滑滚动元素

html - 悬停时链接不会改变颜色

html - owlcarousel 宽度有问题