11var scroll = ( function ( ) {
22 var v = [ ] ,
3- reposition = false ,
4- previousTop = false ,
53 w = "wrapper" , c = "content" , s = "scrollBar" ,
64 S = "scrollBarContainer" , u = " unselectable" ,
75 // mac animation classes. pass empty string to make the scroll work normally.
86 a = " animate" ,
97 m = " mac" ,
108 // properties
119 cN = "className" , oT = "offsetTop" , pE = "parentElement" , pN = "parentNode" ,
12- pS = "previousSibling" , sE = "srcElement" ,
10+ pS = "previousSibling" , sE = "srcElement" , iH = "innerHTML" ,
1311 cT = "currentTarget" , sK = "scroll-k" , U = "%" , d = "." ,
1412
1513 useSlimScroll = function ( C ) {
1614 if ( C . offsetHeight < C . scrollHeight ) {
17- var h = C . innerHTML , k = v . length ;
18- C . innerHTML = "" ;
15+ var h = C [ iH ] , k = v . length ;
16+ C [ iH ] = "" ;
1917 v [ k ] = { } ;
20- v [ k ] [ w ] = cE ( w + u + m , h , C ) ; //cE(w + u + m, "", C);
18+ v [ k ] [ w ] = cE ( w + u + m , h , C ) ;
2119 v [ k ] [ S ] = cE ( S + a , "" , C ) ;
2220 v [ k ] [ s ] = cE ( s , "" , v [ k ] [ S ] ) ;
2321
@@ -34,7 +32,7 @@ var scroll = (function(){
3432 v [ k ] [ s ] . style . height = v [ k ] . sP1 + U ;
3533
3634 //store the key 'k' in the container
37- setAttr ( sK , k ) ;
35+ v [ k ] [ w ] . setAttribute ( sK , k ) ;
3836
3937 // Attaching mouse events
4038 addEvent ( 'mousedown' , v [ k ] [ s ] , beginScroll ) ;
@@ -44,28 +42,23 @@ var scroll = (function(){
4442 addEvent ( 'scroll' , v [ k ] [ w ] , doScroll ) ;
4543 }
4644 } ,
47- setAttr = function ( p , k ) {
48- v [ k ] [ w ] . setAttribute ( p , k ) ;
49- } ,
5045 getAttr = function ( e , p ) {
51- if ( ! e ) { return false ; }
46+ if ( ! e ) { return ; }
5247 return e . getAttribute ( p ) ;
5348 } ,
5449 cE = function ( c , h , p ) {
55- var div = document . createElement ( 'div' ) ;
56- div [ cN ] = c ;
57- div . innerHTML = h ;
58- p . appendChild ( div ) ;
59- return div ;
50+ var d = document . createElement ( 'div' ) ;
51+ d [ cN ] = c ;
52+ d [ iH ] = h ;
53+ p . appendChild ( d ) ;
54+ return d ;
6055 } ,
6156 setScroll = function ( e ) {
6257 var e = e || event , el = e . target || event [ sE ] ,
63- parentElement = el [ pE ] || el [ pN ] ,
58+ p = el [ pE ] || el [ pN ] ,
6459 k = getAttr ( el [ pS ] , sK ) , i = v [ k ] ;
6560
66- if ( ! i || parentElement === i [ S ] ) {
67- return false ;
68- }
61+ if ( ! i || p === i [ S ] ) { return ; }
6962 i [ s ] [ cN ] = s ;
7063 var ePageY = e . pageY || event . clientY ,
7164 top = ( ( ePageY - ( i [ w ] [ pE ] || i [ w ] [ pN ] ) [ oT ] ) / i . wH * 100 ) - i . sP1 / 2 ;
@@ -81,8 +74,14 @@ var scroll = (function(){
8174 } ,
8275 beginScroll = function ( e ) {
8376 // removing selected text
84- if ( window . getSelection ) {
85- window . getSelection ( ) . removeAllRanges ( ) ;
77+ // Link: http://stackoverflow.com/a/3171348
78+ var sel = window . getSelection ? window . getSelection ( ) : document . selection ;
79+ if ( sel ) {
80+ if ( sel . removeAllRanges ) {
81+ sel . removeAllRanges ( ) ;
82+ } else if ( sel . empty ) {
83+ sel . empty ( ) ;
84+ }
8685 }
8786 var e = e || event ,
8887 el = e [ cT ] || e [ sE ] ,
@@ -91,9 +90,6 @@ var scroll = (function(){
9190 addEvent ( 'mousemove' , document , moveScroll ) ;
9291 addEvent ( 'mouseup' , document , endScroll ) ;
9392
94- // disable scroll event
95- removeEvent ( 'scroll' , i [ w ] ) ;
96-
9793 i [ oT ] = i [ w ] [ oT ] ;
9894 i . firstY = e . pageY || event . clientY ;
9995
@@ -106,26 +102,23 @@ var scroll = (function(){
106102 moveScroll = function ( e ) {
107103 var e = e || event ,
108104 k = currentkey , i = v [ k ] ,
109- wrapperScrollTop = i [ w ] . scrollTop ,
110105 ePageY = e . pageY || event . clientY ,
111- top = i . reposition + ePageY - i . firstY ;
106+ top = ( i . reposition + ePageY - i . firstY ) / i . wH * 100 ;
112107
113- top = ( top / i . wH * 100 ) ;
114108 if ( i . rP1 < top ) {
115109 top = i . rP1 ;
116110 }
117111 if ( ! i . previousTop ) {
118112 i . previousTop = top + 1 ;
119113 }
120114 var blnThreshold = top >= 0 && i . firstY > i . offsetTop ;
121- if ( ( i . previousTop > top && blnThreshold ) || ( blnThreshold && ( wrapperScrollTop + i . wH !== i . sH ) ) ) {
115+ if ( ( i . previousTop > top && blnThreshold ) || ( blnThreshold && ( i [ w ] . scrollTop + i . wH !== i . sH ) ) ) {
122116 i [ s ] . style . top = top + U ;
123- i . previousTop = top ;
124- var scrollTop = top * i . sH1 ;
125- i [ w ] . scrollTop = scrollTop ;
117+ i . previousTop = top ;
118+ i [ w ] . scrollTop = top * i . sH1 ;
126119 }
127120
128- v [ k ] [ S ] [ cN ] = S ;
121+ i [ S ] [ cN ] = S ;
129122 } ,
130123 endScroll = function ( e ) {
131124 var e = e || event , k = currentkey , i = v [ k ] ;
@@ -134,13 +127,11 @@ var scroll = (function(){
134127 removeEvent ( 'mouseup' , document ) ;
135128
136129 i . reposition = 0 ;
137- // Enable scroll event
138- addEvent ( 'scroll' , i [ w ] , doScroll ) ;
139130 i [ S ] [ cN ] = S + a ;
140131 } ,
141132 doScroll = function ( e ) {
142- var e = e || event , wrapper = e [ cT ] || e [ sE ] ,
143- k = getAttr ( wrapper , sK ) , i = v [ k ] ;
133+ var e = e || event ,
134+ k = getAttr ( ( e [ cT ] || e [ sE ] ) , sK ) , i = v [ k ] ;
144135 if ( ! i ) { return ; }
145136 i [ S ] [ cN ] = S ;
146137 var scrollTop = i [ w ] . scrollTop ;
0 commit comments