1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | import { isMobile } from 'is-mobile';
|
10 | import * as MouseWheel from '@livelybone/mouse-wheel';
|
11 |
|
12 | function _defineProperty(obj, key, value) {
|
13 | if (key in obj) {
|
14 | Object.defineProperty(obj, key, {
|
15 | value: value,
|
16 | enumerable: true,
|
17 | configurable: true,
|
18 | writable: true
|
19 | });
|
20 | } else {
|
21 | obj[key] = value;
|
22 | }
|
23 |
|
24 | return obj;
|
25 | }
|
26 |
|
27 | function ownKeys(object, enumerableOnly) {
|
28 | var keys = Object.keys(object);
|
29 |
|
30 | if (Object.getOwnPropertySymbols) {
|
31 | var symbols = Object.getOwnPropertySymbols(object);
|
32 | if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
33 | return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
34 | });
|
35 | keys.push.apply(keys, symbols);
|
36 | }
|
37 |
|
38 | return keys;
|
39 | }
|
40 |
|
41 | function _objectSpread2(target) {
|
42 | for (var i = 1; i < arguments.length; i++) {
|
43 | var source = arguments[i] != null ? arguments[i] : {};
|
44 |
|
45 | if (i % 2) {
|
46 | ownKeys(Object(source), true).forEach(function (key) {
|
47 | _defineProperty(target, key, source[key]);
|
48 | });
|
49 | } else if (Object.getOwnPropertyDescriptors) {
|
50 | Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
51 | } else {
|
52 | ownKeys(Object(source)).forEach(function (key) {
|
53 | Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
54 | });
|
55 | }
|
56 | }
|
57 |
|
58 | return target;
|
59 | }
|
60 |
|
61 | function _slicedToArray(arr, i) {
|
62 | return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
63 | }
|
64 |
|
65 | function _arrayWithHoles(arr) {
|
66 | if (Array.isArray(arr)) return arr;
|
67 | }
|
68 |
|
69 | function _iterableToArrayLimit(arr, i) {
|
70 | if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
|
71 | var _arr = [];
|
72 | var _n = true;
|
73 | var _d = false;
|
74 | var _e = undefined;
|
75 |
|
76 | try {
|
77 | for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
|
78 | _arr.push(_s.value);
|
79 |
|
80 | if (i && _arr.length === i) break;
|
81 | }
|
82 | } catch (err) {
|
83 | _d = true;
|
84 | _e = err;
|
85 | } finally {
|
86 | try {
|
87 | if (!_n && _i["return"] != null) _i["return"]();
|
88 | } finally {
|
89 | if (_d) throw _e;
|
90 | }
|
91 | }
|
92 |
|
93 | return _arr;
|
94 | }
|
95 |
|
96 | function _unsupportedIterableToArray(o, minLen) {
|
97 | if (!o) return;
|
98 | if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
99 | var n = Object.prototype.toString.call(o).slice(8, -1);
|
100 | if (n === "Object" && o.constructor) n = o.constructor.name;
|
101 | if (n === "Map" || n === "Set") return Array.from(o);
|
102 | if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
103 | }
|
104 |
|
105 | function _arrayLikeToArray(arr, len) {
|
106 | if (len == null || len > arr.length) len = arr.length;
|
107 |
|
108 | for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
109 |
|
110 | return arr2;
|
111 | }
|
112 |
|
113 | function _nonIterableRest() {
|
114 | throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
115 | }
|
116 |
|
117 | var $isMobile = isMobile();
|
118 | var prefix = '';
|
119 | var $addEventListener = 'addEventListener';
|
120 | var $removeEventListener = 'removeEventListener';
|
121 |
|
122 | if (typeof window !== 'undefined' && typeof document !== 'undefined') {
|
123 |
|
124 | if ('addEventListener' in window) {
|
125 | $addEventListener = 'addEventListener';
|
126 | $removeEventListener = 'removeEventListener';
|
127 | } else {
|
128 | $addEventListener = 'attachEvent';
|
129 | $removeEventListener = 'detachEvent';
|
130 | prefix = 'on';
|
131 | }
|
132 | }
|
133 |
|
134 | function $addListener(element, eventName, listener, useCapture) {
|
135 | var eName = prefix + eventName;
|
136 | var addListener = element[$addEventListener].bind(element);
|
137 | addListener(eName, listener, useCapture);
|
138 | return function () {
|
139 | var removeListener = element[$removeEventListener].bind(element);
|
140 | removeListener(eName, listener, useCapture);
|
141 | };
|
142 | }
|
143 |
|
144 | var Utils = Object.freeze({
|
145 | $isMobile: $isMobile,
|
146 | $addListener: $addListener
|
147 | });
|
148 |
|
149 | var client = $isMobile ? 'mobile' : 'pc';
|
150 | var EventType = {
|
151 | start: {
|
152 | pc: 'mousedown',
|
153 | mobile: 'touchstart'
|
154 | }[client],
|
155 | move: {
|
156 | pc: 'mousemove',
|
157 | mobile: 'touchmove'
|
158 | }[client],
|
159 | end: {
|
160 | pc: 'mouseup',
|
161 | mobile: 'touchend'
|
162 | }[client]
|
163 | };
|
164 |
|
165 | function getClientPos(ev) {
|
166 | var touch = null;
|
167 |
|
168 | if ($isMobile) {
|
169 | if (ev.changedTouches.length > 0) {
|
170 |
|
171 | var _ev$changedTouches = _slicedToArray(ev.changedTouches, 1);
|
172 |
|
173 | touch = _ev$changedTouches[0];
|
174 | } else if (ev.targetTouched.length > 0) {
|
175 |
|
176 | var _ev$changedTouches2 = _slicedToArray(ev.changedTouches, 1);
|
177 |
|
178 | touch = _ev$changedTouches2[0];
|
179 | } else {
|
180 |
|
181 | var _ev$touches = _slicedToArray(ev.touches, 1);
|
182 |
|
183 | touch = _ev$touches[0];
|
184 | }
|
185 | }
|
186 |
|
187 | return touch || ev;
|
188 | }
|
189 |
|
190 | function getEvent(ev, startEvent) {
|
191 | return {
|
192 | deltaX: getClientPos(ev).clientX - getClientPos(startEvent).clientX,
|
193 | deltaY: getClientPos(ev).clientY - getClientPos(startEvent).clientY,
|
194 | originalEvent: ev
|
195 | };
|
196 | }
|
197 |
|
198 | function bind(element, listener, useCapture) {
|
199 | if (typeof element === 'function') {
|
200 |
|
201 | useCapture = listener;
|
202 | listener = element;
|
203 | element = window;
|
204 | }
|
205 |
|
206 | var startEvent;
|
207 | var unbindFn;
|
208 |
|
209 | function $listener(ev) {
|
210 | var event = {
|
211 | deltaX: 0,
|
212 | deltaY: 0,
|
213 | originalEvent: ev,
|
214 | type: 'dragMoveStart'
|
215 | };
|
216 |
|
217 | if (ev.type === EventType.start) {
|
218 | startEvent = ev;
|
219 | var unbindMove = $addListener(window, EventType.move, $listener, useCapture);
|
220 | var unbindEnd = $addListener(window, EventType.end, $listener, useCapture);
|
221 |
|
222 | unbindFn = function unbindFn() {
|
223 | unbindMove();
|
224 | unbindEnd();
|
225 | };
|
226 | } else if (ev.type === EventType.move) {
|
227 | event = _objectSpread2(_objectSpread2({}, getEvent(ev, startEvent)), {}, {
|
228 | type: 'dragMove'
|
229 | });
|
230 | } else if (ev.type === EventType.end) {
|
231 | event = _objectSpread2(_objectSpread2({}, getEvent(ev, startEvent)), {}, {
|
232 | type: 'dragMoveEnd'
|
233 | });
|
234 | if (unbindFn) unbindFn();
|
235 | }
|
236 |
|
237 | listener(event);
|
238 | }
|
239 |
|
240 | return $addListener(element, EventType.start, $listener, useCapture);
|
241 | }
|
242 |
|
243 | var DragMove = Object.freeze({
|
244 | bind: bind
|
245 | });
|
246 |
|
247 | export { DragMove, MouseWheel, Utils };
|