为什么JQuery的动画功能跳转到我的锚链接?

问题描述 投票:0回答:1

我的问题如下:在我的网站上,我希望我的锚链接能够顺利滚动到它们链接到的ID。有很多线程可以解决这个问题,但我只能在jsfiddle示例项目中使用这些https://jsfiddle.net/7fcvkwf0/16/

$("a").each(function(index, element){
    $(this).click(function(e) {
        if (this.hash != "" && $(this).attr("href").charAt(0)=="#"){
            e.preventDefault();
            var id = $(this).attr("href");
            $('html, body').animate(
                {scrollTop: $(id).offset().top},
                1000,
                "swing",
                function(){
                console.log("done");
            });
            window.location.hash = id;
        }
    });
});

是我用来使动画流畅的功能。我不知道为什么,但我在我自己的主页上使用完全相同的代码,但它似乎不起作用,因为它立即跳转到锚链接。控制台日志在1000毫秒(1秒)后出现。不幸的是我不能告诉你这个问题因为我无法在jsfiddle中重现它(我不知道为什么)。

jquery html scroll jquery-animate smoothing
1个回答
0
投票

这可能有所帮助。我认为这与事件的结合有关。特别是对我来说,我有异步页面加载,基本上动态添加锚点,因此在添加到dom后,prevent不会绑定到动态加载的元素。

$(document).on('click', 'a', function(e) {
    if (this.hash !== "") {
      e.preventDefault();
      var hash = this.hash;
      $('html, body').animate({
        scrollTop: $(hash).offset().top-150
      }, 500);
    }

});

从另一个线程......

除非使用on()将事件委托给父元素或文档,否则事件不会与动态添加的元素绑定。您必须使用不同的on形式进行事件委派。

Original post这对我有用,虽然它因为我无法弄清楚的原因而杀死哈希。但滚动工作一致。

© www.soinside.com 2019 - 2024. All rights reserved.