Javascript jQuery hashchange事件立即执行动画,没有速度

Javascript jQuery hashchange事件立即执行动画,没有速度,javascript,jquery,jquery-animate,hashchange,Javascript,Jquery,Jquery Animate,Hashchange,我在jQuery和将动画包装到hashchange事件中时遇到问题。当事件被触发时,动画立即发生。我需要它平滑 jQuery( document ).ready(function() { jQuery(window).on('hashchange', function() { jQuery('body').animate({ scrollTop: jQuery(window.location.hash).offset().top}, 'sl

我在jQuery和将动画包装到hashchange事件中时遇到问题。当事件被触发时,动画立即发生。我需要它平滑

    jQuery( document ).ready(function() {
        jQuery(window).on('hashchange', function() {
                jQuery('body').animate({ scrollTop: jQuery(window.location.hash).offset().top}, 'slow');
        });
    });

如果我不将动画包装到hashchange事件中,一切都很好…

如果将哈希更改为存在的锚点,它将自动跳转到该锚点,而无需等待动画。您可以通过删除动画看到这种情况,因为它仍然在跳跃。这可以通过在URL中使用实际上没有具有相应id的元素的哈希来解决,并更改选择器is
scrollTop
,以适应此情况


例如,您可以将“about”部分的id更改为
about section
,并继续使用
#about
作为散列。然后使用
scrollTop:jQuery(window.location.hash).offset().top
,而不是
scrollTop:jQuery(window.location.hash+“-section”).offset().top
,以避免自动跳转到元素。

我没有使用散列锚,我在divs上使用id。这并不是问题所在,如果我调用animate on document ready,它将平滑地滚动到所需的div,而不会出现任何问题。但是当我把它包装在haschange事件函数中时,动画速度会中断。这就是Div上的id所做的,它们会添加锚。假设您的URL是
example.com/#about
。如果您有一个id为about的元素,它将自动跳转到那里。假设您从
example.com
开始,将URL更改为
example.com/#about
。它将自动跳转到id为about的任何元素(如果存在),并触发
hashchange
事件。然而,因为它已经在那里了,动画没有任何动画。它正在工作,真不敢相信我怎么没有想到它。。。非常感谢。