jQuery div在scrollldown上滑入,在scrollup上滑出

时间:2015-05-16 21:37:03

标签: javascript jquery css scroll jquery-animate

这允许我滑动#contact div,但是当我向上滚动时它不会滑回。

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

1 个答案:

答案 0 :(得分:3)

滚动事件在用户滚动时会多次触发,并且使用您的代码,动画函数会快速连续多次调用,这似乎会导致问题。我建议添加一个标志来确定你是否已经调用了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显示当前是否正在使用动画(输入或输出)。我建议这样做,而不是尝试使用超时。