Skip to content

Commit 093a523

Browse files
committed
added css animations
1 parent 7a7f999 commit 093a523

File tree

2 files changed

+62
-24
lines changed

2 files changed

+62
-24
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gremlin-slider",
3-
"version": "0.2.1",
3+
"version": "0.3.0",
44
"description": "a slider component for gremlin.js",
55
"main": "scripts/index.js",
66
"scripts": {

scripts/gremlinSlider/GremlinSlider.js

Lines changed: 61 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,45 @@ import Clock from './Clock';
1212
import State from './State';
1313
import Events from '../Events';
1414

15-
const START_INDEX = 0;
16-
const DEFAULT_INTERVAL = 5000;
15+
const START_INDEX = 0;
16+
const DEFAULT_INTERVAL = 5000;
1717
const 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

2555
const 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

Comments
 (0)