项目地址:https://github.com/Neilai/widget/blob/master/code/scrollbar.js
核心思想
- 由于要通过鼠标控制滑动条移动的距离,所以我们必须要实时获取鼠标的位置。这涉及到了pagex,pagey,offsetparent属性
- 滑块移动的距离和内容区移动距离有一个转换比ratio,通过这个对两个距离互相转换
- 整个内容区包裹在一个box中,超出部分overhidden,需要通过改变top/left控制移动
具体实现
有几个变量必须非常明确含义 :
this._track_length
它指整个滑块可移动区域的大小加上滑块的大小
this._content_length
它指整个整个内容区的大小(包括box外面)
this._box_length
box容器的大小
this._thumb_length
滑块的大小
this._distance
可移动区域的大小
this._room
内容留在容器外的长度
它们的初始化代码为
|
|
注意滑块长度是动态设定的
接下来就是封装移动函数,移动的时候要注意的是滑块和内容都要动,转换根据ratio
|
|
接下来就是关键的滑动监听,由于滑块要跟着鼠标动,所以要实时获取移动值,鼠标位置的获取比较简单,但是滑块的相对位置获取需要offparent遍历:
|
|
接下来绑定按下事件,目的是设定初值:
|
|
绑定移动时间时要注意,需要document绑定,因为滑块比较小….
|
|
绑定滚动事件的时候要注意需要处理一下兼容性
|
|