使用 jQuery 在向上滚动和向下滚动时添加不同的 CSS 动画

Posted

技术标签:

【中文标题】使用 jQuery 在向上滚动和向下滚动时添加不同的 CSS 动画【英文标题】:Adding different CSS animations on scroll up and scroll down with jQuery 【发布时间】:2013-04-21 20:11:12 【问题描述】:

我试图在用户上下滚动时添加类以显示 2 个 css 动画。

如果我只使用向下滚动动画效果很好,但是当我同时使用向上滚动和向下滚动动画时它会不一致。

我在让动画连续多次触发时遇到问题。如同向下滚动暂停、向下滚动暂停、向上滚动暂停、向上滚动暂停。

Here's a jsFiddle to better demonstrate the problem.

和代码-

(function () 
    var previousScroll = 0;

    $(window).scroll(function () 
        var currentScroll = $(this).scrollTop();
        if (currentScroll > previousScroll) 
            //down scroll code
            $("#repel").removeClass("climb");
            $("#repel").addClass("repel").delay(1150).queue(function (next) 
                $(this).removeClass("repel");
                next();
            );
         else 
            // upscroll code
            $("#repel").removeClass("repel");
            $("#repel").addClass("climb").delay(1000).queue(function (next) 
                $(this).removeClass("climb");
                next();
            );
        
        previousScroll = currentScroll;
    );
());

【问题讨论】:

我查看了 jsFiddle,但无法弄清楚您对 getting animations to fire multiple times 的意思。我真的没有在 jsFiddle 中看到任何动画? @Jean-Paul 抱歉,我没有添加浏览器前缀,动画在 FF 中可见,我会尽快添加 -webkit- 好的,那我打开我的FF。今晚晚些时候我会调查你的问题。 【参考方案1】:

我想通了……

我只需要更改删除动画的方式。我没有使用延迟和队列,而是检测到 animation end 并以这种方式将其删除。

Working Example

(function () 
    var previousScroll = 0;

    $(window).scroll(function () 
        var currentScroll = $(this).scrollTop();
        if (currentScroll > previousScroll) 
            //down scroll code
            $("#repel").addClass("repel");
            $("#repel").on('animationend webkitAnimationEnd oanimationend MSAnimationEnd', function () 
                $('#repel').removeClass('repel');
            );

         else 
            // upscroll code
            $("#repel").addClass("climb");
            $("#repel").on('animationend webkitAnimationEnd oanimationend MSAnimationEnd', function () 
                $('#repel').removeClass('climb');
            );
        
        previousScroll = currentScroll;
    );
());

【讨论】:

以上是关于使用 jQuery 在向上滚动和向下滚动时添加不同的 CSS 动画的主要内容,如果未能解决你的问题,请参考以下文章

向下滚动时隐藏导航栏并在用户使用 jquery 向上滚动页面时显示它,不能正常工作

使用jQuery确认和scrollTop导致页面向上滚动然后向下滚动

滚动按钮 jQuery 用于向上滚动和向下滚动

jquery $(window).resize 事件在移动向上或向下滚动时触发

您如何使用 jQuery 测量用户向下滚动的距离?

javascript 检测向下滚动和向上事件jQuery