我目前有一个非常不错的香草JS脚本,可以在用户用鼠标滚轮滚动时平滑页面滚动。 (原始脚本是从这里https://stackoverflow.com/a/47206289/9817996抓取的)
使用滚动到顶部链接后
<a href="#">Scroll to top</a>
为简单起见,我遇到了一个问题:单击此链接时,页面滚动到顶部,然后又跳回到原来的位置。
以下是Codepen展示的问题:https://codepen.io/kiaramelissa/pen/zYrYbbj
我也尝试过使用Javascript创建一个滚动到顶部的按钮,但是它做的完全一样。我想知道是否有人可以协助找出造成这种情况的原因?
我想理想地希望使滚动条保持原样,而不使用任何笨重的插件。预先感谢您的任何想法!
答案 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滚动代码对按钮滚动行为一无所知。