javascript - .addClass 在最初加载的元素上

标签 javascript jquery scroll viewport

情况: 我编写了一个函数来检测是否 <section>已通过滚动进入视口(viewport),如果是的话 .addClass('fadeInUp')否则.removeClass('fadeInUp')导致.animation-element在视口(viewport)中淡入。

问题:因为条件绑定(bind)到滚动函数,所以第一个 <section>最初加载的不是 .addClass('fadeInUp')直到用户滚动过去然后滚动回 <section> View JS Fiddle for example

问题:我如何检测最初加载的 <section>在视口(viewport)中,则 .addClass('fadeInUp')等等...

当前 JS 函数:

function isScrolledIntoView(elem) {
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();

    var elemTop = $(elem).offset().top;
    var elemBottom = elemTop + $(elem).height();

    return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}

$(window).scroll(function() {
    $('.animation-element').each(function() {
        if (isScrolledIntoView(this) === true) {
            $(this).addClass('fadeInUp')
        } else {
            $(this).removeClass('fadeInUp')
        }
    });
});

这是 JS Fiddle原型(prototype)。

最佳答案

只需在页面加载时在事件处理程序外部调用您在事件处理程序内部调用的相同代码即可。

$(function () {

    function isScrolledIntoView(elem) {
        var docViewTop = $(window).scrollTop();
        var docViewBottom = docViewTop + $(window).height();

        var elemTop = $(elem).offset().top;
        var elemBottom = elemTop + $(elem).height();

        return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
    }

    function checkElements(selector) {
        $(selector).each(function() {
            if (isScrolledIntoView(this) === true) {
                $(this).addClass('fadeInUp')
            } else {
                $(this).removeClass('fadeInUp')
            }
        });
    }

    $(window).scroll(function() {
        checkElements('.animation-element'); // <-- check on scroll
    });

    checkElements('.animation-element'); // <-- check on page load
}

关于javascript - .addClass 在最初加载的元素上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478964/

相关文章:

html - 隐藏表格滚动条

vue.js - VuetifyJS - 滚动 v-navigation-drawer

javascript - 类型 'innerText' 上不存在属性 'Element'

javascript - 为什么 typescript 会针对两个对象类型数组抛出错误,但不会针对两者的形状抛出错误?

jQuery UI - 使用 Sortable 拖放行时,行之间的空间会增加

jquery - 如何使用 JQuery 将名称绑定(bind)到下拉列表

javascript - 以相同的顺序将数组元素 append 到另一个数组

html - -transform translate 和 scroll 之间是否存在性能差异

javascript - 将 JSON 列表从 Javascript 发送到 Django 后端并正确解析它

javascript - cakephp 2.x 在 javascript 中执行 Controller