执行 animate/scrollTop 后浏览器滚动中断

Posted

技术标签:

【中文标题】执行 animate/scrollTop 后浏览器滚动中断【英文标题】:Browser scrolling breaks after animate/scrollTop is executed 【发布时间】:2021-04-26 08:33:44 【问题描述】:

在调用 animate 后,我遇到了浏览器/鼠标滚轮中断的奇怪问题。 “重置”它的唯一方法是刷新浏览器,并避免悬停调用。基本上,当我将鼠标悬停在元素上时,会有一个滚动动作。它可以工作,但在那之后,我的滚轮没有响应。

这是我的代码 sn-p:

<script>
    $(function() 
        $('#product-home').hover(function()
            $('html, body').animate(
                scrollTop: $("#navigation").offset().top - 250
            , 2000);
            return true;
        );

    );
</script>

似乎在 Firefox 中恢复,但 Chrome 需要一个新鲜的。我想知道是否需要重置滚动或其他什么?

【问题讨论】:

【参考方案1】:

请记住,只有一个参数的.hover() 表示.hover(handlerInOut),即。 e.您的处理函数将在 mouseentermouseleave 事件上调用。尝试改用.mouseenter()

在 Chrome 中,这给了我更好的结果 - 动画后滚动仍然冻结,但时间很短。 (用一个非常简单的网页测试)。

$(function() 
    $('#product-home').mouseenter(function()
        $('html, body').animate(
            scrollTop: $("#navigation").offset().top - 250
        , 2000);
    return true;
);

【讨论】:

是的,这样好多了。谢谢!

以上是关于执行 animate/scrollTop 后浏览器滚动中断的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Mobile:.animate(scrollTop) 在修复页面转换后不起作用

如何使用 jquery animate 滚动到元素跨浏览器

难搞的滚动事件(滚动默认,scrollTop)

scrollTop 执行时闪烁?

jQuery中animate()方法以及$('body').animate({"scrollTop":top})不被Firefox支持问题的解决

jQuery中animate()的方法以及$("body").animate({"scrollTop":top})不被Firefox支持问题的解决