情况是这样的:您的网站提供了一个“滚动回顶部”按钮,并且您已经实现了平滑滚动。当页面滚动回顶部时,用户会看到一些吸引他们眼球的东西,他们想停止滚动,因此他们会使用鼠标滚轮、触控板或其他任何东西进行一点滚动。这就是我所说的“可取消的”。在没有进一步操作的情况下,滚动事件会到达目标位置。可取消意味着您可以通过后续滚动来停止它。我发现可取消的行为是更好的 UX,尽管我没有数据来支持这一点。
我发现浏览器之间存在一些差异,以及 CSS 和 JavaScript 在这方面的工作方式也存在差异。
在这个演示中向下滚动,试一试
这是我在可以轻松访问的浏览器上遇到的情况
CSS 平滑滚动 | JavaScript 平滑滚动 | |
---|---|---|
Chrome | 可取消的(速度:有点慢) | 不可取消的 |
Firefox | 可取消的(速度:非常快!) | 可取消的(速度:快!) |
Safari | 没有平滑滚动 | 没有平滑滚动 |
Edge | 可取消的(速度:快) | 不可取消的 |
iOS | 没有平滑滚动 | 没有平滑滚动 |
如果由我决定,我会
- 使通过 CSS 或 JavaScript 触发的平滑滚动操作可取消。
- 定义“可取消的”,因为它不是一个恰当的词。也许是“中断的”?或者“可控的”?欢迎提出想法!
- 使速度可控,或者如果没有,尝试让浏览器就中等速度达成一致(无论滚动距离如何,该速度始终保持一致)。
- 让 Safari 支持它。平滑滚动使像 没有 JavaScript 的轮播 这样的功能非常实用,这一点很棒,尤其是在移动设备上,因为 iOS Safari 是 Apple 设备上的强制性浏览器。
“可取消的”对我来说非常有道理,我完全同意您的建议。
我建议 JS 平滑滚动应该返回一个承诺,该承诺在完成后解析,并在取消时拒绝。
缓慢的滚动总是很糟糕,浏览器默认启用了它,除了惹恼用户之外没有其他原因,但您可以禁用它,没有必要通过样式或脚本来强制它,最佳实践是根本不要这样做。
感觉很教条。
我不明白你说平滑滚动有什么不好?它似乎很有用,可以理解页面正在滚动,否则我需要手动滚动一点才能检查我是否仍在同一页面。我很惊讶像 Apple 这样的注重用户体验的公司没有实现它……
就像所有阻塞动画一样,它只会减慢用户速度,曾经感到您的旗舰手机很迟钝吗?想知道为什么?UI 过渡通常需要 10 帧或更多帧,而操作本身只需要不到一帧的处理时间,禁用动画后,5 年前的中低端机型的运行速度比最新的旗舰机型更快,因为您不必等待动画结束。
用户如何知道页面正在滚动?你知道的,也许是因为他们触发了它?当您滚动滚轮时,您不希望看到 30 帧的动画,您希望页面立即移动,当您从右到左翻页时,您不想观看 15 秒的动画,您希望页面立即跳到顶部,就这么简单。
阻塞动画必须在用户重新获得控制权之前显示所有计划的帧,这是邪恶的,即使使滚动动画可取消,以便您可以反转滚动方向也无济于事,因为您仍然必须坐下来等待它滚动到目标位置。
我们不需要缓慢的 UI。
要考虑的一件事是 Gsap scrollto 插件 - 它为可取消的滚动提供了“自动取消”功能 https://greensock.com/docs/v3/Plugins/ScrollToPlugin
如果您使用 js 库来实现平滑滚动动画,则可以以编程方式取消它。您可以监听“wheel”和“touchmove”事件作为用户滚动干预的指示器。
demmmo! demmmo!
我刚在一个使用 Fullpage.js 的项目上工作,最令人沮丧的事情之一是,如果您启用了 smoothscroll,如果您的滚动速度不够慢,它会直接跳过网站的部分内容。经过几个小时的折腾,我完全同意需要取消事件。