当前位置: 首页 > 面试题库 >

当用户手动滚动时,jQuery .animate()停止滚动吗?

蔚承天
2023-03-14
问题内容

我已经设置了一个片段,当单击该片段时会将页面部分滚动到视图中,问题是,如果用户想在动画中间滚动,则滚动会有点断断续续。

    $( "section" ).click(function(e) {
        $('html,body').animate({ scrollTop: $(this).position().top }, 'slow');
        return false; 
    });

如果用户手动滚动,如何停止jquery动画?


问题答案:

功能更改为此:

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()

您可以阅读.animate()和.stop()的jQuery文档。我还建议您阅读有关动画队列的内容,因为.stop()该原则适用于此。



 类似资料:
  • 问题内容: 当用户滚动页面时,我想做一些有趣的jQuery东西。但是我不知道如何解决这个问题,因为只有方法。 有任何想法吗? 问题答案: 您可以使每次用户滚动时都有一个超时被覆盖。这样,当他在一定毫秒后停止运行时,您的脚本将运行,但是如果他在此期间滚动,则计数器将重新开始,并且脚本将等待直到完成滚动为止。 更新: 因为这个问题又采取了一些行动,所以我认为我不妨使用添加事件的jQuery扩展对其进行

  • 问题内容: 好的。 我可以从我的理解中得知某人正在滚动。因此,我试图找出有人停下来时该如何捕捉。从上面的示例中,您可以看到发生滚动时,我正在从一组元素中删除一个类。但是,我想在用户停止滚动时重新打开该类。 这样做的原因是,我打算在页面滚动时进行中转节目,以使页面具有我正在尝试的特殊效果。但是我尝试在滚动时删除的一个类与该效果冲突,因为它对某种性质是透明的。 问题答案: 更新资料 我写了一个扩展来增

  • 有没有一种方法可以隐藏滚动条,但仍然保留向上/向下滚动的选项?我尝试溢出:隐藏;它删除滚动条,但我不能滚动。

  • 当用户点击tabbar按钮时,我需要将我的tableview滚动到顶部,然后像这样设置。 问题是滚动停止了一半,它没有滚动到顶部。我需要点击像2-3次滚动到顶部。有什么我需要检查的吗?在我的其他项目中,这是可以的。对于这个,我使用自调整大小的单元格。

  • 我使用recyclerview来显示项目,项目大小可以是0 - 500。 但它的滚动性能非常慢,有时它会滞后/停止视图1~2秒。我想在回收器视图中获得流畅的滚动体验。 即使我从我用Glide加载的cardview布局中删除了图像,对性能没有影响。 fragment_home.xml 我的卡片视图布局文件 onBindViewHolder 方法从我的适配器 calss

  • 当RecycerView有足够的内容可以滚动时,页面看起来很好。但是,当RecycerView为空或没有足够的内容可滚动时,行为是的AppBarLayout子级将继续滚动-这看起来很奇怪。 当NestedScrollView为空时,有没有办法停止AppBarLayout子滚动?