滚动到顶部按钮可使香草JS平滑页面滚动跳转/弹回

时间:2020-06-03 23:40:56

标签: javascript html smooth-scrolling

我目前有一个非常不错的香草JS脚本,可以在用户用鼠标滚轮滚动时平滑页面滚动。 (原始脚本是从这里https://stackoverflow.com/a/47206289/9817996抓取的)

使用滚动到顶部链接后 <a href="#">Scroll to top</a>为简单起见,我遇到了一个问题:单击此链接时,页面滚动到顶部,然后又跳回到原来的位置。

以下是Codepen展示的问题:https://codepen.io/kiaramelissa/pen/zYrYbbj

我也尝试过使用Javascript创建一个滚动到顶部的按钮,但是它做的完全一样。我想知道是否有人可以协助找出造成这种情况的原因?

我想理想地希望使滚动条保持原样,而不使用任何笨重的插件。预先感谢您的任何想法!

1 个答案:

答案 0 :(得分:2)

此代码仅在使用鼠标滚轮滚动时有效。但是有一个问题。

向下滚动时,会不断调用

update()函数(向上工作正常)。这是因为moving始终为true(增量始终> 0.5)。

if (Math.abs(delta) > 0.5)

如果将console.log放在此处,您将自己看到它。

我实际上无法理解为什么选择0.5作为值,但是如果您将其设为1,则既可以向上滚动又可以向下滚动。

要进一步了解我的观点,如果保持原样(0.5),并在完全向下滚动后尝试稍微向上滚动,您会发现该按钮可以正常工作而不会向后弹跳。< / p>

设置为1后,平滑滚动将继续在两个方向上起作用,并且当按下按钮时,它将保持向上。

但是滚动到顶部(带有按钮)不流畅!这是可以预期的,因为您的js代码仅适用于mousewheel事件,不适用于您使用的#。

让我说,如果您的意图是在按下按钮时进行平滑滚动,而不必关心鼠标滚轮,那么使用以下方法会更好: css scroll-behavior或类似的javascript scroll anchor,而无需您现有的代码。

如果要在使用鼠标滚轮时保持平滑滚动,则应使用上述链接中的javascript方法以及现有代码。

还有一件事:如果按下按钮,则在滚动完成之前(缓和时)它将跳到顶部,然后弹回原处。这是意料之中的,因为js滚动代码对按钮滚动行为一无所知。