javascript封装自定义滚动条方法,可自定义四个边框滚动条

还是根据我的个人习惯封装了一个方法 setScroll({ box :父盒子DOM对象, content : 内容盒子DOM对象, scrollall : 滚动条大盒子DOM对象, scroll : 滚动条DOM对象, direction: 垂直滚动条还是水平滚动条 }) 该方法传入一个object,前四个属性必选,最后一个可选,‘vertical’ || ‘’level" ,默认vertical. html结构 最大盒子>(内容盒子+(滚动条盒子>滚动条)) 样式自己编写即可。 下来是js源码

0var setScroll = function(obj){
1
2//初始化参数
3var box = obj.box,
4content = obj.content,
5scrollall = obj.scrollall,
6scroll = obj.scroll;
7direction = obj.direction || 'vertical';
8
9//全局变量记录
10var startPosition,
11scrTop = 0,
12currentTop = 0;
13
14//初始化配置参数
15var getwh,wh,dier,tl,page;
16
17if(direction == 'vertical'){
18getwh = 'offsetHeight';
19wh = 'height';
20dier = 'top';
21tl = 'offsetTop';
22page = 'pageY';
23}else{
24getwh = 'offsetWidth';
25wh = 'width';
26dier = 'left';
27tl = 'offsetLeft';
28page = 'pageX';
29}
30
31var boxHeight = box[getwh],
32contentHeight = content[getwh];
33
34
35
36//初始化样式
37
38scroll.style[wh] = (boxHeight / contentHeight * boxHeight) + 'px';
39
40
41var mousein = function (event){
42
43event = event || window.event;
44
45var scrTop = event[page] - box[tl] - startPosition;
46
47window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
48
49scrTop = scrTop < 0 ? 0 : scrTop;
50scrTop = scrTop > boxHeight - scroll[getwh] ? boxHeight - scroll[getwh] : scrTop;
51
52currentTop = -scrTop / boxHeight * contentHeight;
53
54scroll.style[dier] = scrTop + 'px';
55
56content.style[dier] = currentTop + 'px';
57
58}
59
60
61//鼠标按下,开始拖动
62scroll.addEventListener('mousedown',function(event){
63
64event = event || window.event;
65
66//记录当前鼠标点击位置距离父盒子顶部的距离
67startPosition = event.offsetY;
68
69document.addEventListener('mousemove',mousein);
70
71})
72
73
74document.addEventListener('mouseup',function(){
75
76document.removeEventListener('mousemove',mousein,false);
77
78})
79
80box.addEventListener('mousewheel',boxscroll);
81
82box.addEventListener('DOMMouseScroll',boxscroll,false);
83
84function boxscroll(event){
85
86event = event || window.event;
87
88if(event.wheelDelta){
89
90if(-event.wheelDelta / 120 > 0){
91
92scrTop = scroll[tl] + -event.wheelDelta / 120 + 4;
93
94}else{
95
96scrTop = scroll[tl] + -event.wheelDelta / 120 - 4;
97
98}
99
100}else{
101
102if(event.detail / 3 > 0){
103
104scrTop = scroll[tl] + event.detail / 3 + 4;
105
106}else{
107
108scrTop = scroll[tl] + event.detail / 3 - 4;
109
110}
111
112}
113
114currentTop = -scrTop / boxHeight * contentHeight;
115
116scrTop = scrTop < 0 ? 0 : scrTop;
117scrTop = scrTop > boxHeight - scroll[getwh] ? boxHeight - scroll[getwh] : scrTop;
118
119currentTop = currentTop > 0 ? 0 : currentTop;
120currentTop = currentTop < -(contentHeight - boxHeight) ? -(contentHeight - boxHeight) : currentTop;
121
122
123scroll.style[dier] = scrTop + 'px';
124
125content.style[dier] = currentTop + 'px';
126event.preventDefault();
127}};

在线运行地址可以查看源码分析 scrollJS下载地址

查看原文-摘自大公爵ddamy.com