@@ -12,15 +12,45 @@ import Clock from './Clock';
1212import State from './State' ;
1313import Events from '../Events' ;
1414
15- const START_INDEX = 0 ;
16- const DEFAULT_INTERVAL = 5000 ;
15+ const START_INDEX = 0 ;
16+ const DEFAULT_INTERVAL = 5000 ;
1717const WIDTH_WITH_MARGINS = true ;
18- const NO_DRAG = 0 ;
19- const NO_ID = null ;
20- const CSS_DRAGGING = 'slider_state-dragging' ;
21- const CSS_PREV_INACTIVE = 'slider__prev--state-inactive' ;
22- const CSS_NEXT_INACTIVE = 'slider__next--state-inactive' ;
23- const NO_NAV = null ;
18+ const NO_DRAG = 0 ;
19+ const NO_ID = null ;
20+ const CSS_DRAGGING = 'slider_state-dragging' ;
21+ const CSS_PREV_INACTIVE = 'slider__prev--state-inactive' ;
22+ const CSS_NEXT_INACTIVE = 'slider__next--state-inactive' ;
23+ const NO_NAV = null ;
24+
25+ const has3d = function ( ) {
26+ if ( ! window . getComputedStyle ) {
27+ return false ;
28+ }
29+
30+ var el = document . createElement ( 'p' ) ,
31+ has3d ,
32+ transforms = {
33+ 'webkitTransform' : '-webkit-transform' ,
34+ 'OTransform' : '-o-transform' ,
35+ 'msTransform' : '-ms-transform' ,
36+ 'MozTransform' : '-moz-transform' ,
37+ 'transform' : 'transform'
38+ } ;
39+
40+ // Add it to the body to get the computed style
41+ document . body . insertBefore ( el , null ) ;
42+
43+ for ( var t in transforms ) {
44+ if ( el . style [ t ] !== undefined ) {
45+ el . style [ t ] = 'translate3d(1px,1px,1px)' ;
46+ has3d = window . getComputedStyle ( el ) . getPropertyValue ( transforms [ t ] ) ;
47+ }
48+ }
49+
50+ document . body . removeChild ( el ) ;
51+
52+ return ( has3d !== undefined && has3d . length > 0 && has3d !== "none" ) ;
53+ }
2454
2555const GremlinSlider = gremlins . create ( 'gremlin-slider' , {
2656 mixins : [ gremlinsJquery , data , dispatcher ] ,
@@ -77,13 +107,13 @@ const GremlinSlider = gremlins.create('gremlin-slider', {
77107 } ,
78108
79109 _prepareList ( ) {
80- var listWidth = _ . sum ( this . $items . toArray ( ) . map ( item => $ ( item ) . outerWidth ( WIDTH_WITH_MARGINS ) ) ) ;
81- var containerWidth = this . $container . width ( ) ;
110+ var listWidth = _ . sum ( this . $items . toArray ( ) . map ( item => $ ( item ) . outerWidth ( WIDTH_WITH_MARGINS ) ) ) ;
111+ var containerWidth = this . $container . width ( ) ;
82112 var elementsPerPage = 0 ;
83113
84114 this . $items . each ( ( index , item ) => {
85- let width = item . offsetWidth ;
86- let left = item . offsetLeft ;
115+ let width = item . offsetWidth ;
116+ let left = item . offsetLeft ;
87117 let rightOffset = left + width ;
88118 //console.log('slider item found: ', width, left, rightOffset)
89119 if ( rightOffset <= containerWidth ) {
@@ -101,19 +131,19 @@ const GremlinSlider = gremlins.create('gremlin-slider', {
101131
102132 this . _pointer = new Pointer ( times , START_INDEX , this . props . infinite ) ;
103133
104- var distance = parseInt ( this . $items . eq ( 1 ) . css ( 'margin-left' ) , 10 ) ;
105- this . _itemDistance = isNaN ( distance ) ? 0 : distance ;
106- this . _moveOffset = containerWidth ;
134+ var distance = parseInt ( this . $items . eq ( 1 ) . css ( 'margin-left' ) , 10 ) ;
135+ this . _itemDistance = isNaN ( distance ) ? 0 : distance ;
136+ this . _moveOffset = containerWidth ;
107137 this . _currentOffset = 0
108- this . _itemsPerPage = elementsPerPage ;
138+ this . _itemsPerPage = elementsPerPage ;
109139 this . _refreshList ( )
110140 } ,
111141
112142 _refreshList ( ) {
113143 //console.log('refresh list')
114144 var currentPage = this . _pointer . position ;
115- var offset = currentPage === START_INDEX ? 0 : - ( ( this . _moveOffset * currentPage ) + ( this . _itemDistance * currentPage ) )
116- var state = this . _getState ( ) ;
145+ var offset = currentPage === START_INDEX ? 0 : - ( ( this . _moveOffset * currentPage ) + ( this . _itemDistance * currentPage ) )
146+ var state = this . _getState ( ) ;
117147
118148 this . _currentOffset = offset ;
119149
@@ -130,16 +160,24 @@ const GremlinSlider = gremlins.create('gremlin-slider', {
130160 } ,
131161
132162 _moveList ( deltaX ) {
133- var offset = this . _currentDelta - deltaX ;
163+ var offset = this . _currentDelta - deltaX ;
134164 var distance = Math . max ( offset , - offset ) ;
135165 var slidesEl = this . $slidesList [ 0 ] ;
136166 var duration = _ . isNumber ( this . props . duration ) ? this . props . duration : Math . max ( distance / 100 * 40 , 450 ) ;
137167 this . _currentDelta = deltaX ;
138168
139- velocity ( slidesEl , 'stop' , true ) ;
140- velocity ( slidesEl , {
141- translateX : deltaX
142- } , 'easeInSine' , duration ) ;
169+ if ( this . props . useCss ) {
170+ this . $slidesList . css ( {
171+ transform : has3d ( ) ? `translate3d(${ deltaX } px, 0, 0)` : `translateX(${ deltaX } px)`
172+ } ) ;
173+ } else {
174+ velocity ( slidesEl , 'stop' , true ) ;
175+ velocity ( slidesEl , {
176+ translateX : deltaX
177+ } , 'easeInSine' , duration ) ;
178+ }
179+
180+
143181 } ,
144182
145183
0 commit comments