滚动条自定义

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5 <title>无标题文档</title>
  6 <style>
  7 body,ul,dl,dd{ margin:0; padding:0; font-size:12px; font-family:'微软雅黑';}
  8 .clear{ zoom:1}
  9 .clear:after{ display:block; content:""; clear:both}
 10 
 11 .box{margin:28px auto; width:350px; height:440px; background:#000; padding:8px;}
 12 #wrap{ width:324px; height:386px; background:#1c1c1d; overflow:hidden; position:relative; }
 13 #listbox{ float:left; width:309px; position:absolute; left:0; top:0; }
 14 #scrollbox{ float:right; width:3px; height:386px; background: #333; position:relative;}
 15 #scrollbar{ width:3px; height:30px; background:#cc3f2e; position:absolute; left:0; top:0;}
 16 
 17 li{ height:80px; margin-bottom:8px; list-style:none;}
 18 .picbox,.div{ float:left;}
 19 .picbox{ width:150px; position:relative; }
 20 .picbox span{ position:absolute; left:0px; bottom:0px; width:90px; height:22px;}
 21 .picbox span.a1{ background:url(img/b.jpg)}
 22 .picbox span.a2{ background:url(img/a.jpg)}
 23 dl{ width:139px; height:76px; color:#fff; padding:4px 0 0 10px;line-height:18px; position:absolute;left:0; top:0; opacity:0.2; filter:alpha(opacity=20); }
 24 .div{width:149px; height:80px; position:relative; }
 25 .mark{width:149px; height:80px; position:absolute; top:0; left:0; background:#fff; opacity:0.1; filter:alpha(opacity=10);}
 26 
 27 .nav{ width:324px; height:35px; font-family:'微软雅黑';background:#1c1c1d; padding-top:5px;}
 28 .a,.b{ width:152px; height:24px; line-height:24px; background:#666; text-align:center; float:left; color:#fff; cursor:pointer}
 29 .a{margin-right:5px; display:inline; background:#333; color:#666; }
 30 
 31 li.active .mark{opacity:0.2; filter:alpha(opacity=20);}
 32 li.active dl{ opacity:0.7; filter:alpha(opacity=70);}
 33 </style>
 34 </head>
 35 
 36 <body>
 37   <div class="box">
 38     <div class="nav">
 39       <div class="a">猜你喜欢</div>
 40       <div class="b">独家热播</div>
 41     </div>
 42     <div id="wrap">
 43       <ul id="listbox">
 44         <li class="active">
 45           <div class="picbox">
 46             <img src="img/1.jpg">
 47             <span class="a1"></span>
 48           </div>
 49           <div class="div">
 50             <div class="mark"></div>
 51             <dl class="textbox">
 52               <dt>飞狐外传</dt>
 53               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
 54               <dd>史上身材最棒狐仙</dd>
 55             </dl>
 56           </div>
 57         </li>
 58         <li>
 59           <div class="picbox">
 60             <img src="img/2.jpg">
 61             <span class="a2"></span>
 62           </div>
 63           <div class="div">
 64             <div class="mark"></div>
 65             <dl class="textbox">
 66               <dt>飞狐外传</dt>
 67               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
 68               <dd>史上身材最棒狐仙</dd>
 69             </dl>
 70           </div>
 71         </li>
 72         <li>
 73           <div class="picbox">
 74             <img src="img/3.jpg">
 75             <span class="a2"></span>
 76           </div>
 77           <div class="div">
 78             <div class="mark"></div>
 79             <dl class="textbox">
 80               <dt>飞狐外传</dt>
 81               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
 82               <dd>史上身材最棒狐仙</dd>
 83             </dl>
 84           </div>
 85         </li>
 86         <li>
 87           <div class="picbox">
 88             <img src="img/4.jpg">
 89             <span></span>
 90           </div>
 91           <div class="div">
 92             <div class="mark"></div>
 93             <dl class="textbox">
 94               <dt>飞狐外传</dt>
 95               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
 96               <dd>史上身材最棒狐仙</dd>
 97             </dl>
 98           </div>
 99         </li>
100         <li>
101           <div class="picbox">
102             <img src="img/5.jpg">
103           </div>
104           <div class="div">
105             <div class="mark"></div>
106             <dl class="textbox">
107               <dt>飞狐外传</dt>
108               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
109               <dd>史上身材最棒狐仙</dd>
110             </dl>
111           </div>
112         </li>
113         <li>
114           <div class="picbox">
115             <img src="img/6.jpg">
116           </div>
117           <div class="div">
118             <div class="mark"></div>
119             <dl class="textbox">
120               <dt>飞狐外传</dt>
121               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
122               <dd>史上身材最棒狐仙</dd>
123             </dl>
124           </div>
125         </li>
126         <li>
127           <div class="picbox">
128             <img src="img/7.jpg">
129           </div>
130           <div class="div">
131             <div class="mark"></div>
132             <dl class="textbox">
133               <dt>飞狐外传</dt>
134               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
135               <dd>史上身材最棒狐仙</dd>
136             </dl>
137           </div>
138         </li>
139         <li>
140           <div class="picbox">
141             <img src="img/4.jpg">
142           </div>
143           <div class="div">
144             <div class="mark"></div>
145             <dl class="textbox">
146               <dt>飞狐外传</dt>
147               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
148               <dd>史上身材最棒狐仙</dd>
149             </dl>
150           </div>
151         </li>
152         <li>
153           <div class="picbox">
154             <img src="img/5.jpg">
155           </div>
156           <div class="div">
157             <div class="mark"></div>
158             <dl class="textbox">
159               <dt>飞狐外传</dt>
160               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
161               <dd>史上身材最棒狐仙</dd>
162             </dl>
163           </div>
164         </li>
165         <li>
166           <div class="picbox">
167             <img src="img/6.jpg">
168           </div>
169           <div class="div">
170             <div class="mark"></div>
171             <dl class="textbox">
172               <dt>飞狐外传</dt>
173               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
174               <dd>史上身材最棒狐仙</dd>
175             </dl>
176           </div>
177         </li>
178         <li>
179           <div class="picbox">
180             <img src="img/7.jpg">
181           </div>
182           <div class="div">
183             <div class="mark"></div>
184             <dl class="textbox">
185               <dt>飞狐外传</dt>
186               <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
187               <dd>史上身材最棒狐仙</dd>
188             </dl>
189           </div>
190         </li>
191       </ul>
192       <div id="scrollbox">
193         <div id="scrollbar"></div>
194       </div>
195     </div>
196   </div>
197 </body>
198 <script>
199 
200 var listWrap = document.getElementById('wrap');
201 var listBox = document.getElementById('listbox');
202 var scrollBox = document.getElementById('scrollbox');
203 var scrollBar = document.getElementById('scrollbar');
204 
205 var scale = 0, height = 0, maxTop = 0, listMaxTop = 0, t = 0;
206 
207 scale = listWrap.clientHeight / listBox.scrollHeight;//滚动条可以滚动的比例
208 
209 if(scale>1){scale = 1;}
210 
211 height =  scale * scrollBox.scrollHeight;//滚动条的高度
212 
213 maxTop = scrollBox.scrollHeight - height;//最大可以滚动的大小
214 
215 listMaxTop = listWrap.clientHeight - listBox.scrollHeight;//内容可以滚动的最大高度
216 
217 if( scale == 1 ){scrollBox.style.display = 'none';}//内容不足,滚动条隐藏
218 
219 scrollBar.style.height = height + 'px';
220 
221 scrollBar.onmousedown = function(ev){
222     
223     var ev = ev || event;
224     
225     var disY = ev.clientY - this.offsetTop;//获取滚动条距离浏览器的竖直距离
226     
227     document.onmousemove = function(ev){
228         
229         var ev = ev || event;
230         
231         t = ev.clientY - disY;//滚动条距离scrollBox顶部距离
232 
233         fnScroll();    
234         
235     };
236     
237     document.onmouseup = function(){
238         document.onmouseup = document.onmousemove = null;
239     };
240     
241     return false;
242     
243 };
244 
245 listWrap.onmousewheel = mouseScroll;
246 
247 if(listWrap.addEventListener){
248     listWrap.addEventListener('DOMMouseScroll',mouseScroll,false);
249 }
250 
251 function mouseScroll(ev){
252     
253     var ev = ev || event;
254     var fx = ev.wheelDelta || ev.detail;
255   //当用户通过鼠标滚轮与页面交互、在垂直方向上滚动页面时(无论向下还是向上),就会触发mousewheel事件。这个事件可以在任何元素上面触发,最终会冒泡到document(IE)或window(Opera、Chrome、及Safari)对象。与mousewheel事件对应的event对象包含鼠标事件的所有标准信息之外,还包含一个特殊的wheelDelta属性。当用于向前滚动鼠标滚轮是,wheelDelta是120的倍数;当用户向后滚动鼠标滚轮是,wheelDelta是-120的倍数,datial适用于火狐浏览器且向下滚动是整数,想上滚动是负数,与谷歌浏览器的显示方式是相反的
256 
257     var bDown = true;
258         
259     if( ev.detail ){
260         bDown = fx > 0 ? true : false;
261     }else{
262         bDown = fx > 0 ? false : true;
263     }
264     
265     if( bDown ){
266         t += 10;
267     }else{
268         t -= 10;
269     }
270     
271     fnScroll();
272     
273 if( ev.preventDefault ){
274     ev.preventDefault();
275 }
276 
277 return false;
278 }
279 
280 function fnScroll(){
281 
282     if(t < 0 ){t = 0;}
283     if(t > maxTop){t = maxTop;}
284 
285     var scale = t / maxTop;//滚动条滚动的比例
286     var listTop = scale * listMaxTop;//内容应移动的距离
287     
288     scrollBar.style.top = t + 'px';
289     listBox.style.top = listTop + 'px';
290         
291 }
292 
293 
294 </script>
295 </html>
 1 <script src="jquery-3.0.0.js"></script>
 2 <script>
 3     var listWrap = $('#wrap');
 4     var listBox = $('#listbox');
 5     var scrollBox = $('#scrollbox');
 6     var scrollBar = $('#scrollbar');
 7     var scale = 0, height = 0, maxTop = 0, listMaxTop = 0, t = 0;
 8     scale = listWrap.height() / listBox.height();//滚动条可以滚动的比例
 9     if(scale>1){scale = 1;}
10     height =  scale * scrollBox.height();//滚动条的高度
11     maxTop = scrollBox.height() - height;//最大可以滚动的大小
12     listMaxTop = listWrap.height() - listBox.height();//内容可以滚动的最大高度
13     if( scale == 1 ){scrollBox.css('display','none')}//内容不足,滚动条隐藏
14     scrollBar.css('height',height+'px');
15     $('#scrollbar').on('mousedown',function(ev) {
16         var ev = ev || event;   
17         var disY = ev.clientY - this.offsetTop;//获取滚动条距离浏览器的竖直距离 
18         document.onmousemove = function(ev){
19             var ev = ev || event;    
20             t = ev.clientY - disY;//滚动条距离scrollBox顶部距离
21             fnScroll();    
22         };
23         document.onmouseup = function(){
24             document.onmouseup = document.onmousemove = null;
25         };
26         return false;
27     });
28     $('#wrap').on('mousewheel',function(){
29         mouseScroll();
30     });
31     function mouseScroll(ev){
32         var ev = ev || event;
33         var fx = ev.wheelDelta || ev.detail;
34         //当用户通过鼠标滚轮与页面交互、在垂直方向上滚动页面时(无论向下还是向上),就会触发mousewheel事件。这个事件可以在任何元素上面触发,最终会冒泡到document(IE)或window(Opera、Chrome、及Safari)对象。与mousewheel事件对应的event对象包含鼠标事件的所有标准信息之外,还包含一个特殊的wheelDelta属性。当用于向前滚动鼠标滚轮是,wheelDelta是120的倍数;当用户向后滚动鼠标滚轮是,wheelDelta是-120的倍数,datial适用于火狐浏览器且向下滚动是整数,想上滚动是负数,与谷歌浏览器的显示方式是相反的
35         var bDown = true;    
36         if( ev.detail ){
37             bDown = fx > 0 ? true : false;
38         }else{
39             bDown = fx > 0 ? false : true;
40         }
41         if( bDown ){
42             t += 10;
43         }else{
44             t -= 10;
45         }
46         fnScroll();
47         if( ev.preventDefault ){
48             ev.preventDefault();
49         }
50         return false;
51     }
52     function fnScroll(){
53         if(t < 0 ){t = 0;}
54         if(t > maxTop){t = maxTop;}
55         var scale = t / maxTop;//滚动条滚动的比例
56         var listTop = scale * listMaxTop;//内容应移动的距离
57         scrollBar.css('top',t + 'px');
58         listBox.css('top',listTop + 'px');
59     }
60 </script>

 

ps:摘自妙味论坛

posted @ 2016-10-13 11:19  蛋Mrs炒饭  阅读(152)  评论(0编辑  收藏  举报