Javascript 当用户手动滚动时,是否停止滚动?

Javascript 当用户手动滚动时,是否停止滚动?,javascript,jquery,css,Javascript,Jquery,Css,我已经设置了一个片段,它在点击时将页面部分滚动到视图中,问题是如果用户想在动画中间滚动,滚动有点口吃。 $( "section" ).click(function(e) { $('html,body').animate({ scrollTop: $(this).position().top }, 'slow'); return false; }); 如果用户手动滚动,如何停止jquery动画 $("your selector").scroll(

我已经设置了一个片段,它在点击时将页面部分滚动到视图中,问题是如果用户想在动画中间滚动,滚动有点口吃。

    $( "section" ).click(function(e) {
        $('html,body').animate({ scrollTop: $(this).position().top }, 'slow');
        return false; 
    });
如果用户手动滚动,如何停止jquery动画

$("your selector").scroll(function(){
 $('html,body').stop();
});

参考将您的功能更改为:

var page = $("html, body");

$( "section" ).click(function(e) {

   page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove", function(){
       page.stop();
   });

   page.animate({ scrollTop: $(this).position().top }, 'slow', function(){
       page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove");
   });

   return false; 
});
这将:

  • 如果用户手动滚动,则停止动画(仅在动画期间)
  • 不会妨碍正常的jQuery动画,其他一些答案可能会

一些额外信息:

你为什么要参加所有这些活动?“滚动鼠标滚轮等…”

有许多不同类型的滚动事件。您可以使用鼠标、键盘、触摸屏等向下滚动。这样我们可以确保捕获所有这些内容

var page=$(“html,body”)的用途是什么?我不能到处使用
$(“html,body”)

如果您多次使用同一选择器,最好将它们缓存在一个数据库中。与每次让程序重新计算选择器相比,它更易于编写/使用,并且具有更好的性能

在哪里可以找到有关
.animate()
.stop()
的更多信息

您可以阅读和的jQuery文档。我还建议您阅读一下,因为
.stop()
就是根据这个原理工作的。

试试这个

$('html,body').scroll(function() {
    $(this).stop(true, false);
});

它还将从元素的队列中删除所有其他动画,但不会“跳转”到当前滚动动画的结尾。

我会通过检测用户事件来完成

$('body,html').bind('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function (e) {
  if (e.which > 0 || e.type == "mousedown" || e.type == "mousewheel" || e.type == "touchmove") {
    $("html,body").stop();
  }
});

这是。

我相信这会妨碍他的原创卷轴动画。谢谢,它工作得很好。只是一个问题,我想忽略对元素的点击,这样就不会影响超链接,我在选择器中尝试了“section:not(a)”,但不起作用。您可以编辑选择器,使其忽略链接吗?这应该会有所帮助:我发现我必须从绑定的内容中删除“滚动”和“键控”,因为最初单击
.stop()
时触发了
$('section')
(使用此示例)您还可以将
on
切换为
one
,并在
on/one
off
中使用命名函数,以确保只删除特定的处理程序。page.stop()适用于桌面,但在智能手机上打开页面时,动画会将页面固定在原来的位置