有一个 div 里面有一些文本( div 的大小不固定,文本的内容也不固定),如何实现文本的逐行滚动而不是逐像素滚动? 我让 AI 帮我写了一个 demo ,这个 demo 在用鼠标滚轮的时候可以逐行滚动,但是有个问题,在这个 div 里面点鼠标中键,再往下移动鼠标(在 Windows 下这个行为会自动向下滚动),这个时候 div 会卡住,过了一会,整个 div 里的内容会滚动很大距离,这种情况怎么实现逐行滚动?
下面是 demo 代码: https://codepen.io/Asn-La/pen/RNbvYjY
![]() |
1
geelaw 7 天前 via iPhone ![]() 应该检查用户滚动结束才强制对齐,检查 wheel 是不必要的。标准 Web 做法是监听 scrollend 事件并作出处理,但 Safari 没有实现,为此可以在 Safari 上改成监听 scroll 事件并防抖( debounce ),比如在发生 scroll 事件之后,第一次 100ms 内没有再发生 scroll 事件的时候执行代码( requestAnimationFrame 通常会让代码极快执行,不适合此场景)。但是 scroll + debounce 也有不小的缺陷,比如 iOS 用户用手指滚动的时候,滚动途中稍作停留就会触发代码(通常认为手指离开屏幕才是滚动结束)。
我的建议是重新审视需求:为什么非要按行滚动?不完美按行滚动 和 完美自由(不按行)滚动,哪个更好? |
2
rocmax 7 天前 via Android
|
![]() |
3
geelaw 7 天前 via iPhone
@rocmax #2 吸附的目标是元素的框,不是行。
当然,可以每个元素恰好容纳一行,但首先分割位置会受到字体的影响,其次将失去两端对齐的可能,并且还会导致障碍( reduce accessibility )。 |
![]() |
4
fgwmlhdkkkw 7 天前 via Android
|
![]() |
5
importmeta 7 天前
一点点启发,用纯 CSS 都能实现滚动 我之前见过, 可惜没收藏.
|
7
mumbler 7 天前
不用自己研究,直接用自然语言让 cursor 帮你实现就行了
|
8
realJamespond 7 天前
写个定时器对齐?
|
![]() |
9
Aolose 7 天前 ![]() |
![]() |
10
mostkia 6 天前 ![]() 看看效果,是不是你要的
https://jsfiddle.net/mvcwng2d/1/ |