停止传播不按预期工作。 jQuery的

时间:2013-12-30 13:40:29

标签: jquery stoppropagation

我有一些jquery代码,当滚动位置不等于0时隐藏div。这很好用但是每当我在页面顶部快速向上和向下滚动,或者使用go to top of page链接时,事件似乎冒出来,让div出现并重新出现几次......有没有办法让它显示或消失,永远不会按顺序堆叠事件?

我尝试了stoppropogation(),但这似乎不起作用。也许我错误地实现了它。

    $(window).scroll(
        {
            previousTop: 0
        }, 
        function () {
        var currentTop = $(window).scrollTop();
        if (currentTop == 0) {
            $("#binding-info").fadeIn('slow');
        } else {
            $("#binding-info").fadeOut('slow');
        }
        this.previousTop = currentTop;
    });

1 个答案:

答案 0 :(得分:1)

这是因为jQuery队列动画和fadeIn/fadeOut是动画。基本上,jQuery注册下一个动画,并在当前动画完成时执行。

要停止此操作,您可以在为对象设置动画之前使用.stop()

if (currentTop == 0) {
    $("#binding-info").stop().fadeIn('slow');
} else {
    $("#binding-info").stop().fadeOut('slow');
}

但是fadeIn存在问题。如果您在达到1个不透明度之前执行fadeOut,则会将其保留在数据中,并且不会再fadeIn为1。

热修复方法是使用fadeTo()

$("#binding-info").stop().fadeTo('slow', 1);