|
发表于 2021-11-25 18:35:43
|
显示全部楼层
本帖最后由 S8F8ry 于 2021-11-25 18:37 编辑
这就要从鼠标滚轮的设计聊起了,一般的鼠标滚轮都是通过一个旋转式的机械编码器实现,通过滚动滚轮带动转盘,转盘上刻度与弹片摩擦产生一组脉冲信号传递给电脑,这就意味着鼠标滚轮的滚动其实是段落式的。
好,以上都是废话,不了解也无所谓。
一般情况下(没有在驱动中开启"平滑滚动"功能),鼠标滚轮每滚动一段,只发出一次滚动信号告诉电脑滚动 50 个像素值距离(假定),网页或其他控件向指定方向滚动 50 个像素值(当然这不是一定的,因为软件端是可以控制这个比例的,比如缩减成 5:4,那本次只滚动 40 个像素值)。但是有一点是确定的,就是这种情况下,鼠标滚轮每滚动一段只会触发一次滚动事件,浏览器"鼠标滚轮切换标签"功能也就被触发一次。
在驱动中开启"平滑滚动"后,情况就不一样了,平滑滚动是指减缓滚动开始时和结束阶段的段落感,让滚动启停显得不突兀(其实在开启"平滑滚动"后在网页上只滚动一格时就会发现,滚轮虽然停下来了,但是网页还会微微地动上一会儿)。这个时候鼠标滚轮每滚动一段,还是想向电脑传送一个滚动 50 个像素值距离,但是会细化成多个滚动信号,比如分成 4 部分:20, 15, 10, 5(在实际工作中会分更多段!),网页或其他控件还是向指定方向滚动 50 个像素值,但是过程却平缓许多。 问题就是这种情况下鼠标滚轮每滚动一段会触发多次滚动事件,所以浏览器"鼠标滚轮切换标签"功能也就被触发了多次。
大致上的原理就是这样,也许有的地方细节不对,但基本的原理是正确的。
|
|