【问题标题】:jQuery smooth scroll jumps in the endjQuery平滑滚动到底跳转
【发布时间】:2019-09-19 02:40:40
【问题描述】:

我在单页纸上创建了流畅的滚动导航。这似乎有效,但是在滚动结束时,我的页面奇怪地“跳跃”了。

http://ontop.houston-1.hybridmedia.be/

我的 jQuery 代码非常简单明了:

jQuery(function(){
    $('a[href*="#"]').on('click', function (el) {
        el.preventDefault();

        $('html, body').animate({
        scrollTop: $($(this).attr('href')).offset().top
        }, 500, 'linear');
    });
});

在 HTML 中:

<a href="#story">story</a>

<section id="story">
</section>

这里发生了什么?我已经尝试过其他一些脚本,但也遇到了同样的问题。

【问题讨论】:

  • 它似乎与hashchange 事件有关,例如如果你点击Contact,等待URL变为#contact,滚动一点然后点击Contact再次,它不会跳转。我的猜测是您有一个与滚动冲突的 hashchange 事件
  • 活动代码看起来像this。回调导致跳转,问题中的脚本应该可以正常工作。

标签: jquery css scroll


【解决方案1】:

在没有标签的情况下修复它,并通过向链接元素添加数据属性

<a data-tag="story" class="primary-nav__list__item__link scroll">story</a>

<section id="story"></section>

我的 jQuery 代码:

jQuery(function(){
    $('a.scroll').on('click', function (el) {
        el.preventDefault();

        href = $(this).data('tag');

        $('html, body').animate({
            scrollTop: $('#'+ href).offset().top - 150
        }, 500);
    });
});

【讨论】:

  • 现在您的 HTML 代码无效。 a-tag 需要一个 href 属性。
  • 仅供参考,您并没有真正解决问题,您现在只是绕过它。没有href="#",哈希不会更新,因此hashchange 事件不会被触发,这就是它现在起作用的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 2012-05-20
  • 1970-01-01
相关资源
最近更新 更多