UNPKG

7.54 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.fadeAnimationHandler = exports.slideStopSwipingHandler = exports.slideSwipeAnimationHandler = exports.slideAnimationHandler = void 0;
7
8var _react = require("react");
9
10var _CSSTranslate = _interopRequireDefault(require("../../CSSTranslate"));
11
12var _utils = require("./utils");
13
14function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
16function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
17
18function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
19
20function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
22/**
23 * Main animation handler for the default 'sliding' style animation
24 * @param props
25 * @param state
26 */
27var slideAnimationHandler = function slideAnimationHandler(props, state) {
28 var returnStyles = {};
29 var selectedItem = state.selectedItem;
30 var previousItem = selectedItem;
31 var lastPosition = _react.Children.count(props.children) - 1;
32 var needClonedSlide = props.infiniteLoop && (selectedItem < 0 || selectedItem > lastPosition); // Handle list position if it needs a clone
33
34 if (needClonedSlide) {
35 if (previousItem < 0) {
36 if (props.centerMode && props.centerSlidePercentage && props.axis === 'horizontal') {
37 returnStyles.itemListStyle = (0, _utils.setPosition)(-(lastPosition + 2) * props.centerSlidePercentage - (100 - props.centerSlidePercentage) / 2, props.axis);
38 } else {
39 returnStyles.itemListStyle = (0, _utils.setPosition)(-(lastPosition + 2) * 100, props.axis);
40 }
41 } else if (previousItem > lastPosition) {
42 returnStyles.itemListStyle = (0, _utils.setPosition)(0, props.axis);
43 }
44
45 return returnStyles;
46 }
47
48 var currentPosition = (0, _utils.getPosition)(selectedItem, props); // if 3d is available, let's take advantage of the performance of transform
49
50 var transformProp = (0, _CSSTranslate.default)(currentPosition, '%', props.axis);
51 var transitionTime = props.transitionTime + 'ms';
52 returnStyles.itemListStyle = {
53 WebkitTransform: transformProp,
54 msTransform: transformProp,
55 OTransform: transformProp,
56 transform: transformProp
57 };
58
59 if (!state.swiping) {
60 returnStyles.itemListStyle = _objectSpread(_objectSpread({}, returnStyles.itemListStyle), {}, {
61 WebkitTransitionDuration: transitionTime,
62 MozTransitionDuration: transitionTime,
63 OTransitionDuration: transitionTime,
64 transitionDuration: transitionTime,
65 msTransitionDuration: transitionTime
66 });
67 }
68
69 return returnStyles;
70};
71/**
72 * Swiping animation handler for the default 'sliding' style animation
73 * @param delta
74 * @param props
75 * @param state
76 * @param setState
77 */
78
79
80exports.slideAnimationHandler = slideAnimationHandler;
81
82var slideSwipeAnimationHandler = function slideSwipeAnimationHandler(delta, props, state, setState) {
83 var returnStyles = {};
84 var isHorizontal = props.axis === 'horizontal';
85
86 var childrenLength = _react.Children.count(props.children);
87
88 var initialBoundry = 0;
89 var currentPosition = (0, _utils.getPosition)(state.selectedItem, props);
90 var finalBoundry = props.infiniteLoop ? (0, _utils.getPosition)(childrenLength - 1, props) - 100 : (0, _utils.getPosition)(childrenLength - 1, props);
91 var axisDelta = isHorizontal ? delta.x : delta.y;
92 var handledDelta = axisDelta; // prevent user from swiping left out of boundaries
93
94 if (currentPosition === initialBoundry && axisDelta > 0) {
95 handledDelta = 0;
96 } // prevent user from swiping right out of boundaries
97
98
99 if (currentPosition === finalBoundry && axisDelta < 0) {
100 handledDelta = 0;
101 }
102
103 var position = currentPosition + 100 / (state.itemSize / handledDelta);
104 var hasMoved = Math.abs(axisDelta) > props.swipeScrollTolerance;
105
106 if (props.infiniteLoop && hasMoved) {
107 // When allowing infinite loop, if we slide left from position 0 we reveal the cloned last slide that appears before it
108 // if we slide even further we need to jump to other side so it can continue - and vice versa for the last slide
109 if (state.selectedItem === 0 && position > -100) {
110 position -= childrenLength * 100;
111 } else if (state.selectedItem === childrenLength - 1 && position < -childrenLength * 100) {
112 position += childrenLength * 100;
113 }
114 }
115
116 if (!props.preventMovementUntilSwipeScrollTolerance || hasMoved || state.swipeMovementStarted) {
117 if (!state.swipeMovementStarted) {
118 setState({
119 swipeMovementStarted: true
120 });
121 }
122
123 returnStyles.itemListStyle = (0, _utils.setPosition)(position, props.axis);
124 } //allows scroll if the swipe was within the tolerance
125
126
127 if (hasMoved && !state.cancelClick) {
128 setState({
129 cancelClick: true
130 });
131 }
132
133 return returnStyles;
134};
135/**
136 * Default 'sliding' style animination handler for when a swipe action stops.
137 * @param props
138 * @param state
139 */
140
141
142exports.slideSwipeAnimationHandler = slideSwipeAnimationHandler;
143
144var slideStopSwipingHandler = function slideStopSwipingHandler(props, state) {
145 var currentPosition = (0, _utils.getPosition)(state.selectedItem, props);
146 var itemListStyle = (0, _utils.setPosition)(currentPosition, props.axis);
147 return {
148 itemListStyle: itemListStyle
149 };
150};
151/**
152 * Main animation handler for the default 'fade' style animation
153 * @param props
154 * @param state
155 */
156
157
158exports.slideStopSwipingHandler = slideStopSwipingHandler;
159
160var fadeAnimationHandler = function fadeAnimationHandler(props, state) {
161 var transitionTime = props.transitionTime + 'ms';
162 var transitionTimingFunction = 'ease-in-out';
163 var slideStyle = {
164 position: 'absolute',
165 display: 'block',
166 zIndex: -2,
167 minHeight: '100%',
168 opacity: 0,
169 top: 0,
170 right: 0,
171 left: 0,
172 bottom: 0,
173 transitionTimingFunction: transitionTimingFunction,
174 msTransitionTimingFunction: transitionTimingFunction,
175 MozTransitionTimingFunction: transitionTimingFunction,
176 WebkitTransitionTimingFunction: transitionTimingFunction,
177 OTransitionTimingFunction: transitionTimingFunction
178 };
179
180 if (!state.swiping) {
181 slideStyle = _objectSpread(_objectSpread({}, slideStyle), {}, {
182 WebkitTransitionDuration: transitionTime,
183 MozTransitionDuration: transitionTime,
184 OTransitionDuration: transitionTime,
185 transitionDuration: transitionTime,
186 msTransitionDuration: transitionTime
187 });
188 }
189
190 return {
191 slideStyle: slideStyle,
192 selectedStyle: _objectSpread(_objectSpread({}, slideStyle), {}, {
193 opacity: 1,
194 position: 'relative'
195 }),
196 prevStyle: _objectSpread({}, slideStyle)
197 };
198};
199
200exports.fadeAnimationHandler = fadeAnimationHandler;
\No newline at end of file