jQuery 平滑滚动片段以不同的速度工作

Posted

技术标签:

【中文标题】jQuery 平滑滚动片段以不同的速度工作【英文标题】:jQuery smooth scroll snippet works with different speed 【发布时间】:2014-01-21 05:12:02 【问题描述】:

我得到了这个相当流行的代码:

jQuery(document).ready(function($) 
    $(".scroll").click(function(event)     
        event.preventDefault();
        $('html,body').animate(scrollTop:$(this.hash).offset().top, 500);
    );
);

在 html 中:

<a href="#scrollThere">Click</a>

<div class="scroll" id="scrollThere"></div>

但是在一页网站上,当 div 处于不同的高度时,即滚动必须以不同的长度进行 - 滚动有时快得多,有时又很慢。什么样的代码可以让滚动始终时间 = 速度 * 距离,而不是 time = lentgh in ms,或者换句话说,我怎样才能始终保持相同的速度?

【问题讨论】:

我通常不会对这样的问题投赞成票,但我这样做是为了平衡被误导的投反对票。 【参考方案1】:

将您的持续时间与您必须移动的像素相关联。

您的代码中的持续时间锁定在500。如果我得到必须在任一方向移动的像素数量并将其乘以几毫秒,您就可以获得页面滚动的设定速度。

替换这个:

$('html,body').animate(scrollTop:$(this.hash).offset().top, 500);

有了这个:

$('html,body').animate(scrollTop:$(this.hash).offset().top, 
    Math.abs(window.scrollY - $(this.hash).offset().top) * 10);

编辑上面的10 以增加或减少持续时间。

【讨论】:

非常感谢!这个答案非常适合像我这样的菜鸟,而且效果很好。 太棒了。很高兴我能帮上忙。 Math.pow(Math.abs(window.scrollY - $(this.hash).offset().top),2/3)*5) 为您提供更好的大规模高度滚动,在我的情况下超过 60k 像素 ...

以上是关于jQuery 平滑滚动片段以不同的速度工作的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 平滑滚动 - 这可以简化吗?

jQuery平滑滚动以某种方式破坏引导导航栏

Firefox 4中的jQuery动画速度(平滑度)

jQuery平滑滚动

JQuery.animate() 在某些浏览器上以不同的速度移动 div

jquery垂直鼠标滚轮平滑滚动