ScrollBar.js是一个仅仅120行的滚动条JS插件,使用非常方便 详情阅读:https://git.oschina.net/wuquanyao/scrollbar.js/*=================================  * ScrollBar.js beta  * Author:wuquanyao  * Email:
ScrollBar.js是一个仅仅120行的滚动条JS插件,使用非常方便
详情阅读:https://git.oschina.net/wuquanyao/scrollbar.js
- /*=================================
- * ScrollBar.js beta
- * Author:wuquanyao
- * Email:wqynqa@163.com
- *=================================*/
- var ScrollBar = {};
- (function(ScrollBar){
- var parent,root,track,bar,tx,ch,h,sh,rate;
- ScrollBar.adapter = function(config)
- {
- init(config);
- }
- function init(config)
- {
- parent = document.querySelector(config['selector']);
- root = parent.parentNode;
- createBar();
- mouseaction();
- }
- function createBar()
- {
- track = document.createElement('div');
- track.setAttribute('class','scroll-track');
- bar = document.createElement('div');
- bar.setAttribute('class','scroll-bar');
- track.appendChild(bar);
- root.appendChild(track);
- sh = root.scrollHeight;
- ch = root.offsetHeight;
- tx = root.offsetTop;
- h = ch/sh*ch;
- if(h<30){
- bar.style.height = '30px';
- h = 30;
- }else{
- bar.style.height = h+'px';
- }
- rate = (sh-ch)/(ch-h);
- }
- function mouseaction()
- {
- function eventparse(obj,type,func){
- if(document.attachEvent){
- var events = {
- click:'onclick',
- mouseover:'onmouseover',
- mousemove:'onmousemove',
- mouseout:'onmouseout',
- mousedown:'onmousedown',
- mouseup:'onmouseup',
- wheel:'DOMMouseScroll'
- };
- obj.attachEvent(events[type],func);
- }else{
- var events = {
- click:'click',
- mouseover:'mouseover',
- mousemove:'mousemove',
- mouseout:'mouseout',
- mousedown:'mousedown',
- mouseup:'mouseup',
- wheel:'DOMMouseScroll'
- };
- obj.addEventListener(events[type],func,false);
- }
- }
- function init(){
- var bool = false,v;
- eventparse(bar,'mousedown',function(event){
- bool = true;
- });
- eventparse(document,'mousemove',function(event){
- if(bool){
- if(event.clientY<=(tx+10)){
- v = 0;
- }else if(event.clientY>=(tx+ch-h)){
- v = tx+ch-h;
- }else{
- v = event.clientY;
- }
- parent.style.transform = 'translate(0px,'+(-v*rate)+'px)';
- bar.style.transform = 'translateY('+v+'px)';
- }
- });
- eventparse(document,'mouseup',function(event){
- bool = false;
- });
- // eventparse(track,'click',function(event){
- // event.stopPropagation();
- // bar.style.transition = 'all 0ms ease 0ms';
- // if(event.clientY<(tx+h)){
- // bar.style.transform = 'translate(0px,0px)';
- // }else if(event.clientY>=(tx+ch-h)){
- // bar.style.transform = 'translate(0px,'+(tx+ch-h)+'px)';
- // }else{
- // bar.style.transform = 'translate(0px,'+(event.clientY-h/2)+'px)';
- // }
- // parent.style.transform = 'translate(0px,'+((-event.clientY+tx)*rate)+'px)';
- // });
- var offset=0;
- if (window.navigator.userAgent.indexOf("Firefox") >= 0) {
- eventparse(parent,'wheel',wheelEvent);
- }else{
- parent.onmousewheel=parent.onmousewheel=wheelEvent;
- }
- function wheelEvent(e){
- var transform,bO,wv = (e.detail/3*20) || (-(e.wheelDelta/120*20));
- if((offset<(sh-ch) &&(offset>=0))){
- transform = 'translate(0px,'+(-offset)+'px)';
- bO = 'translateY('+(offset/rate)+'px)';
- offset = ((offset+wv)>(sh-ch))?offset:( ((offset+wv)<=0)?0:(offset+wv) );
- }
- bar.style.transform = bO;
- parent.style.transform = transform;
- }
- }
- init();
- }
- })(ScrollBar);
 
                     
                    
                 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号