【问题标题】:jQuery div Slide in on scrolldown, slide out on scrollupjQuery div 向下滚动时滑入,向上滚动时滑出
【发布时间】:2015-05-16 21:37:02
【问题描述】:

这让我可以将#contact div 滑入,但是当我向上滚动时它不会滑出。

$(window).scroll(function(){
    if ($(this).scrollTop() > 100) {
        $('#scrolltop').fadeIn();
        $('#contact').animate({
            right: "0px"
        }, 500 );
    } else {
        $('#scrolltop').fadeOut();
        $('#contact').animate({
           right: "-115px"
        }, 500 );
    }
});

【问题讨论】:

    标签: javascript jquery css scroll jquery-animate


    【解决方案1】:

    当用户滚动时会触发多次滚动事件,并且使用您的代码,动画函数会快速连续多次调用,这似乎会导致问题。我建议添加一个标志来确定您是否已经调用了 animate。这段代码对我有用:

    var animated = false;
    $(window).scroll(function(){
    if ($(this).scrollTop() > 100) {
        if(!animated){
            $('#scrolltop').fadeIn();
            $('#contact').animate({
                left: 0
            }, 500 );
            animated = true;
        }
    } else if(animated){
        $('#scrolltop').fadeOut();
        $('#contact').animate({
           left: -115
        }, 500 );
        animated = false;
    }
    

    编辑:

    为了解决用户快速上下滚动时重复多次调用动画的问题,我会另外跟踪元素当前是否正在动画,如下所示:

        var animated = false;
        var animating = false;
        $(window).scroll(scroll);
    
        function scroll(){
            if(!animating) {
                if ($(document).scrollTop() > 100) {
                        if(!animated){
                        animating = true;
                            $('#scrolltop').fadeIn();
                            $('#contact').animate({
                                    left: 0
                            }, {"duration":500,"complete":complete});
                            animated = true;
                        }
                } else if(animated){
                    animating = true;
                        $('#scrolltop').fadeOut();
                        $('#contact').animate({
                            left: -115
                        }, {"duration":500,"complete":complete} );
                        animated = false;
                }
            }
        }
    
        function complete(){
            animating = false;
            scroll();
        }
    

    在这段代码中,animated 显示元素是否滑入或滑出屏幕,而animating 显示当前是否正在使用动画(进入或滑出)。我建议这样做而不是尝试使用超时。

    【讨论】:

    • 谢谢,我还意识到我需要一个超时功能来阻止它变得烦人和来回滑动。我真的无法绕开它。你知道我怎么添加它吗?
    • “来回滑动”是什么意思? #contact 元素设置为在某个点滑入,并在您向上滚动时滑出。这不是你想要发生的事情吗?
    • 是的,我需要它滑入和滑出,但如果有人快速上下滚动几次,“#contact”也会左右滑动多次,所以它一直在滑动即使在有人停止滚动后进出。我需要限制它在一定时间内滑入和滑出的次数。例如每 2 秒滑入一次。
    • 感谢您的努力,但它仍然有问题...如果我快速向下和向上滚动,它不会滑回。然后它开始向后播放动画。我不确定您使用的是什么方法,但据我所知,这是通过 bind 和 setTimeout 完成的。我只是不知道如何把它们放在一起。
    • 对不起,我的代码中有一个错误,但现在应该修复它。如果这仍然不起作用,我可以尝试使用 setTimeout 进行尝试,但这确实没有必要
    猜你喜欢
    • 2018-05-06
    • 2013-02-08
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多