问题 如何在动画完成之前禁用滚动?


我使用此代码滚动到我的页面上的某个元素:

$("html, body").animate({scrollTop: $(".myDiv").offset().top}, 300);

它有效,但有一个问题:当用户向下滚动时脚本向上滚动,有一些抖动,因为有两个滚动命令同时在不同的方向 - 听起来合乎逻辑。

我检查了一些具有这种滚动功能的其他网站,没有任何好斗。那么防止这种情况的诀窍是什么?


11995
2017-07-25 12:14


起源

你在哪个事件上使用它:$(“html,body”)。animate({scrollTop:$(“。myDiv”)。offset()。top},300);你能解释一下吗? - Barlas Apaydin
你是使用悬停或点击或somethingelse吗? - Barlas Apaydin
我在点击时使用它,就像 $("somehting").click(function() { ... }); - Sven
来吧 chat.stackoverflow.com/rooms/14079/fast-solution - Barlas Apaydin


答案:


当你使用滚动,良好的检测动画时,这是一个jQuery错误。

我做了一个研究如何将其关闭滚动并找到这个问题: 如何暂时禁用滚动?

这是jsFiddle。点击后你会看到;用户无法滚动直到动画完成。

$('.myDiv').click(function(){

    disable_scroll();

    $('html, body').stop().animate({ scrollTop: 0 }, 700,function() {
        enable_scroll();
    });
});

编辑:感谢galambalazs btw。


13
2017-07-25 12:27



非常感谢你做的这些! - Sven
谢谢你指点我对galambalazs的回答。如果有人在这里结束,我已经将他的解决方案重构为一个很好的自包含对象: stackoverflow.com/a/21533631/940252 - Josh Harrison


一个想法 - 尝试挂钩滚动事件并使用 http://api.jquery.com/stop/ 停止你的动画 .. 馊主意..

解决方案同样的问题 - 让用户滚动停止jtopery scrolltop的动画?


0
2017-07-25 12:18