Browse code

Refactor and rewrite as contao bundle

Benjamin Roth authored on04/11/2022 22:32:32
Showing1 changed files
1 1
deleted file mode 100644
... ...
@@ -1,459 +0,0 @@
1
-import { getWindow, getDocument } from 'ssr-window';
2
-import $ from '../../utils/dom';
3
-import { now, nextTick, bindModuleMethods } from '../../utils/utils';
4
-
5
-function isEventSupported() {
6
-  var document = getDocument();
7
-  var eventName = 'onwheel';
8
-  var isSupported = (eventName in document);
9
-
10
-  if (!isSupported) {
11
-    var element = document.createElement('div');
12
-    element.setAttribute(eventName, 'return;');
13
-    isSupported = typeof element[eventName] === 'function';
14
-  }
15
-
16
-  if (!isSupported && document.implementation && document.implementation.hasFeature && // always returns true in newer browsers as per the standard.
17
-  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
18
-  document.implementation.hasFeature('', '') !== true) {
19
-    // This is the only way to test support for the `wheel` event in IE9+.
20
-    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
21
-  }
22
-
23
-  return isSupported;
24
-}
25
-
26
-var Mousewheel = {
27
-  lastScrollTime: now(),
28
-  lastEventBeforeSnap: undefined,
29
-  recentWheelEvents: [],
30
-  event: function event() {
31
-    var window = getWindow();
32
-    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
33
-    return isEventSupported() ? 'wheel' : 'mousewheel';
34
-  },
35
-  normalize: function normalize(e) {
36
-    // Reasonable defaults
37
-    var PIXEL_STEP = 10;
38
-    var LINE_HEIGHT = 40;
39
-    var PAGE_HEIGHT = 800;
40
-    var sX = 0;
41
-    var sY = 0; // spinX, spinY
42
-
43
-    var pX = 0;
44
-    var pY = 0; // pixelX, pixelY
45
-    // Legacy
46
-
47
-    if ('detail' in e) {
48
-      sY = e.detail;
49
-    }
50
-
51
-    if ('wheelDelta' in e) {
52
-      sY = -e.wheelDelta / 120;
53
-    }
54
-
55
-    if ('wheelDeltaY' in e) {
56
-      sY = -e.wheelDeltaY / 120;
57
-    }
58
-
59
-    if ('wheelDeltaX' in e) {
60
-      sX = -e.wheelDeltaX / 120;
61
-    } // side scrolling on FF with DOMMouseScroll
62
-
63
-
64
-    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
65
-      sX = sY;
66
-      sY = 0;
67
-    }
68
-
69
-    pX = sX * PIXEL_STEP;
70
-    pY = sY * PIXEL_STEP;
71
-
72
-    if ('deltaY' in e) {
73
-      pY = e.deltaY;
74
-    }
75
-
76
-    if ('deltaX' in e) {
77
-      pX = e.deltaX;
78
-    }
79
-
80
-    if (e.shiftKey && !pX) {
81
-      // if user scrolls with shift he wants horizontal scroll
82
-      pX = pY;
83
-      pY = 0;
84
-    }
85
-
86
-    if ((pX || pY) && e.deltaMode) {
87
-      if (e.deltaMode === 1) {
88
-        // delta in LINE units
89
-        pX *= LINE_HEIGHT;
90
-        pY *= LINE_HEIGHT;
91
-      } else {
92
-        // delta in PAGE units
93
-        pX *= PAGE_HEIGHT;
94
-        pY *= PAGE_HEIGHT;
95
-      }
96
-    } // Fall-back if spin cannot be determined
97
-
98
-
99
-    if (pX && !sX) {
100
-      sX = pX < 1 ? -1 : 1;
101
-    }
102
-
103
-    if (pY && !sY) {
104
-      sY = pY < 1 ? -1 : 1;
105
-    }
106
-
107
-    return {
108
-      spinX: sX,
109
-      spinY: sY,
110
-      pixelX: pX,
111
-      pixelY: pY
112
-    };
113
-  },
114
-  handleMouseEnter: function handleMouseEnter() {
115
-    var swiper = this;
116
-    swiper.mouseEntered = true;
117
-  },
118
-  handleMouseLeave: function handleMouseLeave() {
119
-    var swiper = this;
120
-    swiper.mouseEntered = false;
121
-  },
122
-  handle: function handle(event) {
123
-    var e = event;
124
-    var swiper = this;
125
-    var params = swiper.params.mousewheel;
126
-
127
-    if (swiper.params.cssMode) {
128
-      e.preventDefault();
129
-    }
130
-
131
-    var target = swiper.$el;
132
-
133
-    if (swiper.params.mousewheel.eventsTarget !== 'container') {
134
-      target = $(swiper.params.mousewheel.eventsTarget);
135
-    }
136
-
137
-    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;
138
-    if (e.originalEvent) e = e.originalEvent; // jquery fix
139
-
140
-    var delta = 0;
141
-    var rtlFactor = swiper.rtlTranslate ? -1 : 1;
142
-    var data = Mousewheel.normalize(e);
143
-
144
-    if (params.forceToAxis) {
145
-      if (swiper.isHorizontal()) {
146
-        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;
147
-      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;
148
-    } else {
149
-      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
150
-    }
151
-
152
-    if (delta === 0) return true;
153
-    if (params.invert) delta = -delta;
154
-
155
-    if (!swiper.params.freeMode) {
156
-      // Register the new event in a variable which stores the relevant data
157
-      var newEvent = {
158
-        time: now(),
159
-        delta: Math.abs(delta),
160
-        direction: Math.sign(delta),
161
-        raw: event
162
-      }; // Keep the most recent events
163
-
164
-      var recentWheelEvents = swiper.mousewheel.recentWheelEvents;
165
-
166
-      if (recentWheelEvents.length >= 2) {
167
-        recentWheelEvents.shift(); // only store the last N events
168
-      }
169
-
170
-      var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
171
-      recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:
172
-      //   If direction has changed or
173
-      //   if the scroll is quicker than the previous one:
174
-      //     Animate the slider.
175
-      // Else (this is the first time the wheel is moved):
176
-      //     Animate the slider.
177
-
178
-      if (prevEvent) {
179
-        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
180
-          swiper.mousewheel.animateSlider(newEvent);
181
-        }
182
-      } else {
183
-        swiper.mousewheel.animateSlider(newEvent);
184
-      } // If it's time to release the scroll:
185
-      //   Return now so you don't hit the preventDefault.
186
-
187
-
188
-      if (swiper.mousewheel.releaseScroll(newEvent)) {
189
-        return true;
190
-      }
191
-    } else {
192
-      // Freemode or scrollContainer:
193
-      // If we recently snapped after a momentum scroll, then ignore wheel events
194
-      // to give time for the deceleration to finish. Stop ignoring after 500 msecs
195
-      // or if it's a new scroll (larger delta or inverse sign as last event before
196
-      // an end-of-momentum snap).
197
-      var _newEvent = {
198
-        time: now(),
199
-        delta: Math.abs(delta),
200
-        direction: Math.sign(delta)
201
-      };
202
-      var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap;
203
-      var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction;
204
-
205
-      if (!ignoreWheelEvents) {
206
-        swiper.mousewheel.lastEventBeforeSnap = undefined;
207
-
208
-        if (swiper.params.loop) {
209
-          swiper.loopFix();
210
-        }
211
-
212
-        var position = swiper.getTranslate() + delta * params.sensitivity;
213
-        var wasBeginning = swiper.isBeginning;
214
-        var wasEnd = swiper.isEnd;
215
-        if (position >= swiper.minTranslate()) position = swiper.minTranslate();
216
-        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
217
-        swiper.setTransition(0);
218
-        swiper.setTranslate(position);
219
-        swiper.updateProgress();
220
-        swiper.updateActiveIndex();
221
-        swiper.updateSlidesClasses();
222
-
223
-        if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {
224
-          swiper.updateSlidesClasses();
225
-        }
226
-
227
-        if (swiper.params.freeModeSticky) {
228
-          // When wheel scrolling starts with sticky (aka snap) enabled, then detect
229
-          // the end of a momentum scroll by storing recent (N=15?) wheel events.
230
-          // 1. do all N events have decreasing or same (absolute value) delta?
231
-          // 2. did all N events arrive in the last M (M=500?) msecs?
232
-          // 3. does the earliest event have an (absolute value) delta that's
233
-          //    at least P (P=1?) larger than the most recent event's delta?
234
-          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
235
-          // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration.
236
-          // Snap immediately and ignore remaining wheel events in this scroll.
237
-          // See comment above for "remaining wheel events in this scroll" determination.
238
-          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
239
-          clearTimeout(swiper.mousewheel.timeout);
240
-          swiper.mousewheel.timeout = undefined;
241
-          var _recentWheelEvents = swiper.mousewheel.recentWheelEvents;
242
-
243
-          if (_recentWheelEvents.length >= 15) {
244
-            _recentWheelEvents.shift(); // only store the last N events
245
-
246
-          }
247
-
248
-          var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined;
249
-
250
-          var firstEvent = _recentWheelEvents[0];
251
-
252
-          _recentWheelEvents.push(_newEvent);
253
-
254
-          if (_prevEvent && (_newEvent.delta > _prevEvent.delta || _newEvent.direction !== _prevEvent.direction)) {
255
-            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
256
-            _recentWheelEvents.splice(0);
257
-          } else if (_recentWheelEvents.length >= 15 && _newEvent.time - firstEvent.time < 500 && firstEvent.delta - _newEvent.delta >= 1 && _newEvent.delta <= 6) {
258
-            // We're at the end of the deceleration of a momentum scroll, so there's no need
259
-            // to wait for more events. Snap ASAP on the next tick.
260
-            // Also, because there's some remaining momentum we'll bias the snap in the
261
-            // direction of the ongoing scroll because it's better UX for the scroll to snap
262
-            // in the same direction as the scroll instead of reversing to snap.  Therefore,
263
-            // if it's already scrolled more than 20% in the current direction, keep going.
264
-            var snapToThreshold = delta > 0 ? 0.8 : 0.2;
265
-            swiper.mousewheel.lastEventBeforeSnap = _newEvent;
266
-
267
-            _recentWheelEvents.splice(0);
268
-
269
-            swiper.mousewheel.timeout = nextTick(function () {
270
-              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
271
-            }, 0); // no delay; move on next tick
272
-          }
273
-
274
-          if (!swiper.mousewheel.timeout) {
275
-            // if we get here, then we haven't detected the end of a momentum scroll, so
276
-            // we'll consider a scroll "complete" when there haven't been any wheel events
277
-            // for 500ms.
278
-            swiper.mousewheel.timeout = nextTick(function () {
279
-              var snapToThreshold = 0.5;
280
-              swiper.mousewheel.lastEventBeforeSnap = _newEvent;
281
-
282
-              _recentWheelEvents.splice(0);
283
-
284
-              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
285
-            }, 500);
286
-          }
287
-        } // Emit event
288
-
289
-
290
-        if (!ignoreWheelEvents) swiper.emit('scroll', e); // Stop autoplay
291
-
292
-        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions
293
-
294
-        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
295
-      }
296
-    }
297
-
298
-    if (e.preventDefault) e.preventDefault();else e.returnValue = false;
299
-    return false;
300
-  },
301
-  animateSlider: function animateSlider(newEvent) {
302
-    var swiper = this;
303
-    var window = getWindow();
304
-
305
-    if (this.params.mousewheel.thresholdDelta && newEvent.delta < this.params.mousewheel.thresholdDelta) {
306
-      // Prevent if delta of wheel scroll delta is below configured threshold
307
-      return false;
308
-    }
309
-
310
-    if (this.params.mousewheel.thresholdTime && now() - swiper.mousewheel.lastScrollTime < this.params.mousewheel.thresholdTime) {
311
-      // Prevent if time between scrolls is below configured threshold
312
-      return false;
313
-    } // If the movement is NOT big enough and
314
-    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
315
-    //   Don't go any further (avoid insignificant scroll movement).
316
-
317
-
318
-    if (newEvent.delta >= 6 && now() - swiper.mousewheel.lastScrollTime < 60) {
319
-      // Return false as a default
320
-      return true;
321
-    } // If user is scrolling towards the end:
322
-    //   If the slider hasn't hit the latest slide or
323
-    //   if the slider is a loop and
324
-    //   if the slider isn't moving right now:
325
-    //     Go to next slide and
326
-    //     emit a scroll event.
327
-    // Else (the user is scrolling towards the beginning) and
328
-    // if the slider hasn't hit the first slide or
329
-    // if the slider is a loop and
330
-    // if the slider isn't moving right now:
331
-    //   Go to prev slide and
332
-    //   emit a scroll event.
333
-
334
-
335
-    if (newEvent.direction < 0) {
336
-      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
337
-        swiper.slideNext();
338
-        swiper.emit('scroll', newEvent.raw);
339
-      }
340
-    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
341
-      swiper.slidePrev();
342
-      swiper.emit('scroll', newEvent.raw);
343
-    } // If you got here is because an animation has been triggered so store the current time
344
-
345
-
346
-    swiper.mousewheel.lastScrollTime = new window.Date().getTime(); // Return false as a default
347
-
348
-    return false;
349
-  },
350
-  releaseScroll: function releaseScroll(newEvent) {
351
-    var swiper = this;
352
-    var params = swiper.params.mousewheel;
353
-
354
-    if (newEvent.direction < 0) {
355
-      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
356
-        // Return true to animate scroll on edges
357
-        return true;
358
-      }
359
-    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
360
-      // Return true to animate scroll on edges
361
-      return true;
362
-    }
363
-
364
-    return false;
365
-  },
366
-  enable: function enable() {
367
-    var swiper = this;
368
-    var event = Mousewheel.event();
369
-
370
-    if (swiper.params.cssMode) {
371
-      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
372
-      return true;
373
-    }
374
-
375
-    if (!event) return false;
376
-    if (swiper.mousewheel.enabled) return false;
377
-    var target = swiper.$el;
378
-
379
-    if (swiper.params.mousewheel.eventsTarget !== 'container') {
380
-      target = $(swiper.params.mousewheel.eventsTarget);
381
-    }
382
-
383
-    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
384
-    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
385
-    target.on(event, swiper.mousewheel.handle);
386
-    swiper.mousewheel.enabled = true;
387
-    return true;
388
-  },
389
-  disable: function disable() {
390
-    var swiper = this;
391
-    var event = Mousewheel.event();
392
-
393
-    if (swiper.params.cssMode) {
394
-      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
395
-      return true;
396
-    }
397
-
398
-    if (!event) return false;
399
-    if (!swiper.mousewheel.enabled) return false;
400
-    var target = swiper.$el;
401
-
402
-    if (swiper.params.mousewheel.eventsTarget !== 'container') {
403
-      target = $(swiper.params.mousewheel.eventsTarget);
404
-    }
405
-
406
-    target.off(event, swiper.mousewheel.handle);
407
-    swiper.mousewheel.enabled = false;
408
-    return true;
409
-  }
410
-};
411
-export default {
412
-  name: 'mousewheel',
413
-  params: {
414
-    mousewheel: {
415
-      enabled: false,
416
-      releaseOnEdges: false,
417
-      invert: false,
418
-      forceToAxis: false,
419
-      sensitivity: 1,
420
-      eventsTarget: 'container',
421
-      thresholdDelta: null,
422
-      thresholdTime: null
423
-    }
424
-  },
425
-  create: function create() {
426
-    var swiper = this;
427
-    bindModuleMethods(swiper, {
428
-      mousewheel: {
429
-        enabled: false,
430
-        lastScrollTime: now(),
431
-        lastEventBeforeSnap: undefined,
432
-        recentWheelEvents: [],
433
-        enable: Mousewheel.enable,
434
-        disable: Mousewheel.disable,
435
-        handle: Mousewheel.handle,
436
-        handleMouseEnter: Mousewheel.handleMouseEnter,
437
-        handleMouseLeave: Mousewheel.handleMouseLeave,
438
-        animateSlider: Mousewheel.animateSlider,
439
-        releaseScroll: Mousewheel.releaseScroll
440
-      }
441
-    });
442
-  },
443
-  on: {
444
-    init: function init(swiper) {
445
-      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
446
-        swiper.mousewheel.disable();
447
-      }
448
-
449
-      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
450
-    },
451
-    destroy: function destroy(swiper) {
452
-      if (swiper.params.cssMode) {
453
-        swiper.mousewheel.enable();
454
-      }
455
-
456
-      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
457
-    }
458
-  }
459
-};
460 0
\ No newline at end of file
Browse code

swiper.js version 6.3.3

Benjamin Roth authored on13/10/2020 19:31:56
Showing1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,459 @@
1
+import { getWindow, getDocument } from 'ssr-window';
2
+import $ from '../../utils/dom';
3
+import { now, nextTick, bindModuleMethods } from '../../utils/utils';
4
+
5
+function isEventSupported() {
6
+  var document = getDocument();
7
+  var eventName = 'onwheel';
8
+  var isSupported = (eventName in document);
9
+
10
+  if (!isSupported) {
11
+    var element = document.createElement('div');
12
+    element.setAttribute(eventName, 'return;');
13
+    isSupported = typeof element[eventName] === 'function';
14
+  }
15
+
16
+  if (!isSupported && document.implementation && document.implementation.hasFeature && // always returns true in newer browsers as per the standard.
17
+  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
18
+  document.implementation.hasFeature('', '') !== true) {
19
+    // This is the only way to test support for the `wheel` event in IE9+.
20
+    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
21
+  }
22
+
23
+  return isSupported;
24
+}
25
+
26
+var Mousewheel = {
27
+  lastScrollTime: now(),
28
+  lastEventBeforeSnap: undefined,
29
+  recentWheelEvents: [],
30
+  event: function event() {
31
+    var window = getWindow();
32
+    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
33
+    return isEventSupported() ? 'wheel' : 'mousewheel';
34
+  },
35
+  normalize: function normalize(e) {
36
+    // Reasonable defaults
37
+    var PIXEL_STEP = 10;
38
+    var LINE_HEIGHT = 40;
39
+    var PAGE_HEIGHT = 800;
40
+    var sX = 0;
41
+    var sY = 0; // spinX, spinY
42
+
43
+    var pX = 0;
44
+    var pY = 0; // pixelX, pixelY
45
+    // Legacy
46
+
47
+    if ('detail' in e) {
48
+      sY = e.detail;
49
+    }
50
+
51
+    if ('wheelDelta' in e) {
52
+      sY = -e.wheelDelta / 120;
53
+    }
54
+
55
+    if ('wheelDeltaY' in e) {
56
+      sY = -e.wheelDeltaY / 120;
57
+    }
58
+
59
+    if ('wheelDeltaX' in e) {
60
+      sX = -e.wheelDeltaX / 120;
61
+    } // side scrolling on FF with DOMMouseScroll
62
+
63
+
64
+    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
65
+      sX = sY;
66
+      sY = 0;
67
+    }
68
+
69
+    pX = sX * PIXEL_STEP;
70
+    pY = sY * PIXEL_STEP;
71
+
72
+    if ('deltaY' in e) {
73
+      pY = e.deltaY;
74
+    }
75
+
76
+    if ('deltaX' in e) {
77
+      pX = e.deltaX;
78
+    }
79
+
80
+    if (e.shiftKey && !pX) {
81
+      // if user scrolls with shift he wants horizontal scroll
82
+      pX = pY;
83
+      pY = 0;
84
+    }
85
+
86
+    if ((pX || pY) && e.deltaMode) {
87
+      if (e.deltaMode === 1) {
88
+        // delta in LINE units
89
+        pX *= LINE_HEIGHT;
90
+        pY *= LINE_HEIGHT;
91
+      } else {
92
+        // delta in PAGE units
93
+        pX *= PAGE_HEIGHT;
94
+        pY *= PAGE_HEIGHT;
95
+      }
96
+    } // Fall-back if spin cannot be determined
97
+
98
+
99
+    if (pX && !sX) {
100
+      sX = pX < 1 ? -1 : 1;
101
+    }
102
+
103
+    if (pY && !sY) {
104
+      sY = pY < 1 ? -1 : 1;
105
+    }
106
+
107
+    return {
108
+      spinX: sX,
109
+      spinY: sY,
110
+      pixelX: pX,
111
+      pixelY: pY
112
+    };
113
+  },
114
+  handleMouseEnter: function handleMouseEnter() {
115
+    var swiper = this;
116
+    swiper.mouseEntered = true;
117
+  },
118
+  handleMouseLeave: function handleMouseLeave() {
119
+    var swiper = this;
120
+    swiper.mouseEntered = false;
121
+  },
122
+  handle: function handle(event) {
123
+    var e = event;
124
+    var swiper = this;
125
+    var params = swiper.params.mousewheel;
126
+
127
+    if (swiper.params.cssMode) {
128
+      e.preventDefault();
129
+    }
130
+
131
+    var target = swiper.$el;
132
+
133
+    if (swiper.params.mousewheel.eventsTarget !== 'container') {
134
+      target = $(swiper.params.mousewheel.eventsTarget);
135
+    }
136
+
137
+    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;
138
+    if (e.originalEvent) e = e.originalEvent; // jquery fix
139
+
140
+    var delta = 0;
141
+    var rtlFactor = swiper.rtlTranslate ? -1 : 1;
142
+    var data = Mousewheel.normalize(e);
143
+
144
+    if (params.forceToAxis) {
145
+      if (swiper.isHorizontal()) {
146
+        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;
147
+      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;
148
+    } else {
149
+      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
150
+    }
151
+
152
+    if (delta === 0) return true;
153
+    if (params.invert) delta = -delta;
154
+
155
+    if (!swiper.params.freeMode) {
156
+      // Register the new event in a variable which stores the relevant data
157
+      var newEvent = {
158
+        time: now(),
159
+        delta: Math.abs(delta),
160
+        direction: Math.sign(delta),
161
+        raw: event
162
+      }; // Keep the most recent events
163
+
164
+      var recentWheelEvents = swiper.mousewheel.recentWheelEvents;
165
+
166
+      if (recentWheelEvents.length >= 2) {
167
+        recentWheelEvents.shift(); // only store the last N events
168
+      }
169
+
170
+      var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
171
+      recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:
172
+      //   If direction has changed or
173
+      //   if the scroll is quicker than the previous one:
174
+      //     Animate the slider.
175
+      // Else (this is the first time the wheel is moved):
176
+      //     Animate the slider.
177
+
178
+      if (prevEvent) {
179
+        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
180
+          swiper.mousewheel.animateSlider(newEvent);
181
+        }
182
+      } else {
183
+        swiper.mousewheel.animateSlider(newEvent);
184
+      } // If it's time to release the scroll:
185
+      //   Return now so you don't hit the preventDefault.
186
+
187
+
188
+      if (swiper.mousewheel.releaseScroll(newEvent)) {
189
+        return true;
190
+      }
191
+    } else {
192
+      // Freemode or scrollContainer:
193
+      // If we recently snapped after a momentum scroll, then ignore wheel events
194
+      // to give time for the deceleration to finish. Stop ignoring after 500 msecs
195
+      // or if it's a new scroll (larger delta or inverse sign as last event before
196
+      // an end-of-momentum snap).
197
+      var _newEvent = {
198
+        time: now(),
199
+        delta: Math.abs(delta),
200
+        direction: Math.sign(delta)
201
+      };
202
+      var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap;
203
+      var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction;
204
+
205
+      if (!ignoreWheelEvents) {
206
+        swiper.mousewheel.lastEventBeforeSnap = undefined;
207
+
208
+        if (swiper.params.loop) {
209
+          swiper.loopFix();
210
+        }
211
+
212
+        var position = swiper.getTranslate() + delta * params.sensitivity;
213
+        var wasBeginning = swiper.isBeginning;
214
+        var wasEnd = swiper.isEnd;
215
+        if (position >= swiper.minTranslate()) position = swiper.minTranslate();
216
+        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
217
+        swiper.setTransition(0);
218
+        swiper.setTranslate(position);
219
+        swiper.updateProgress();
220
+        swiper.updateActiveIndex();
221
+        swiper.updateSlidesClasses();
222
+
223
+        if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {
224
+          swiper.updateSlidesClasses();
225
+        }
226
+
227
+        if (swiper.params.freeModeSticky) {
228
+          // When wheel scrolling starts with sticky (aka snap) enabled, then detect
229
+          // the end of a momentum scroll by storing recent (N=15?) wheel events.
230
+          // 1. do all N events have decreasing or same (absolute value) delta?
231
+          // 2. did all N events arrive in the last M (M=500?) msecs?
232
+          // 3. does the earliest event have an (absolute value) delta that's
233
+          //    at least P (P=1?) larger than the most recent event's delta?
234
+          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
235
+          // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration.
236
+          // Snap immediately and ignore remaining wheel events in this scroll.
237
+          // See comment above for "remaining wheel events in this scroll" determination.
238
+          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
239
+          clearTimeout(swiper.mousewheel.timeout);
240
+          swiper.mousewheel.timeout = undefined;
241
+          var _recentWheelEvents = swiper.mousewheel.recentWheelEvents;
242
+
243
+          if (_recentWheelEvents.length >= 15) {
244
+            _recentWheelEvents.shift(); // only store the last N events
245
+
246
+          }
247
+
248
+          var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined;
249
+
250
+          var firstEvent = _recentWheelEvents[0];
251
+
252
+          _recentWheelEvents.push(_newEvent);
253
+
254
+          if (_prevEvent && (_newEvent.delta > _prevEvent.delta || _newEvent.direction !== _prevEvent.direction)) {
255
+            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
256
+            _recentWheelEvents.splice(0);
257
+          } else if (_recentWheelEvents.length >= 15 && _newEvent.time - firstEvent.time < 500 && firstEvent.delta - _newEvent.delta >= 1 && _newEvent.delta <= 6) {
258
+            // We're at the end of the deceleration of a momentum scroll, so there's no need
259
+            // to wait for more events. Snap ASAP on the next tick.
260
+            // Also, because there's some remaining momentum we'll bias the snap in the
261
+            // direction of the ongoing scroll because it's better UX for the scroll to snap
262
+            // in the same direction as the scroll instead of reversing to snap.  Therefore,
263
+            // if it's already scrolled more than 20% in the current direction, keep going.
264
+            var snapToThreshold = delta > 0 ? 0.8 : 0.2;
265
+            swiper.mousewheel.lastEventBeforeSnap = _newEvent;
266
+
267
+            _recentWheelEvents.splice(0);
268
+
269
+            swiper.mousewheel.timeout = nextTick(function () {
270
+              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
271
+            }, 0); // no delay; move on next tick
272
+          }
273
+
274
+          if (!swiper.mousewheel.timeout) {
275
+            // if we get here, then we haven't detected the end of a momentum scroll, so
276
+            // we'll consider a scroll "complete" when there haven't been any wheel events
277
+            // for 500ms.
278
+            swiper.mousewheel.timeout = nextTick(function () {
279
+              var snapToThreshold = 0.5;
280
+              swiper.mousewheel.lastEventBeforeSnap = _newEvent;
281
+
282
+              _recentWheelEvents.splice(0);
283
+
284
+              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
285
+            }, 500);
286
+          }
287
+        } // Emit event
288
+
289
+
290
+        if (!ignoreWheelEvents) swiper.emit('scroll', e); // Stop autoplay
291
+
292
+        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions
293
+
294
+        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
295
+      }
296
+    }
297
+
298
+    if (e.preventDefault) e.preventDefault();else e.returnValue = false;
299
+    return false;
300
+  },
301
+  animateSlider: function animateSlider(newEvent) {
302
+    var swiper = this;
303
+    var window = getWindow();
304
+
305
+    if (this.params.mousewheel.thresholdDelta && newEvent.delta < this.params.mousewheel.thresholdDelta) {
306
+      // Prevent if delta of wheel scroll delta is below configured threshold
307
+      return false;
308
+    }
309
+
310
+    if (this.params.mousewheel.thresholdTime && now() - swiper.mousewheel.lastScrollTime < this.params.mousewheel.thresholdTime) {
311
+      // Prevent if time between scrolls is below configured threshold
312
+      return false;
313
+    } // If the movement is NOT big enough and
314
+    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
315
+    //   Don't go any further (avoid insignificant scroll movement).
316
+
317
+
318
+    if (newEvent.delta >= 6 && now() - swiper.mousewheel.lastScrollTime < 60) {
319
+      // Return false as a default
320
+      return true;
321
+    } // If user is scrolling towards the end:
322
+    //   If the slider hasn't hit the latest slide or
323
+    //   if the slider is a loop and
324
+    //   if the slider isn't moving right now:
325
+    //     Go to next slide and
326
+    //     emit a scroll event.
327
+    // Else (the user is scrolling towards the beginning) and
328
+    // if the slider hasn't hit the first slide or
329
+    // if the slider is a loop and
330
+    // if the slider isn't moving right now:
331
+    //   Go to prev slide and
332
+    //   emit a scroll event.
333
+
334
+
335
+    if (newEvent.direction < 0) {
336
+      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
337
+        swiper.slideNext();
338
+        swiper.emit('scroll', newEvent.raw);
339
+      }
340
+    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
341
+      swiper.slidePrev();
342
+      swiper.emit('scroll', newEvent.raw);
343
+    } // If you got here is because an animation has been triggered so store the current time
344
+
345
+
346
+    swiper.mousewheel.lastScrollTime = new window.Date().getTime(); // Return false as a default
347
+
348
+    return false;
349
+  },
350
+  releaseScroll: function releaseScroll(newEvent) {
351
+    var swiper = this;
352
+    var params = swiper.params.mousewheel;
353
+
354
+    if (newEvent.direction < 0) {
355
+      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
356
+        // Return true to animate scroll on edges
357
+        return true;
358
+      }
359
+    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
360
+      // Return true to animate scroll on edges
361
+      return true;
362
+    }
363
+
364
+    return false;
365
+  },
366
+  enable: function enable() {
367
+    var swiper = this;
368
+    var event = Mousewheel.event();
369
+
370
+    if (swiper.params.cssMode) {
371
+      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
372
+      return true;
373
+    }
374
+
375
+    if (!event) return false;
376
+    if (swiper.mousewheel.enabled) return false;
377
+    var target = swiper.$el;
378
+
379
+    if (swiper.params.mousewheel.eventsTarget !== 'container') {
380
+      target = $(swiper.params.mousewheel.eventsTarget);
381
+    }
382
+
383
+    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
384
+    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
385
+    target.on(event, swiper.mousewheel.handle);
386
+    swiper.mousewheel.enabled = true;
387
+    return true;
388
+  },
389
+  disable: function disable() {
390
+    var swiper = this;
391
+    var event = Mousewheel.event();
392
+
393
+    if (swiper.params.cssMode) {
394
+      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
395
+      return true;
396
+    }
397
+
398
+    if (!event) return false;
399
+    if (!swiper.mousewheel.enabled) return false;
400
+    var target = swiper.$el;
401
+
402
+    if (swiper.params.mousewheel.eventsTarget !== 'container') {
403
+      target = $(swiper.params.mousewheel.eventsTarget);
404
+    }
405
+
406
+    target.off(event, swiper.mousewheel.handle);
407
+    swiper.mousewheel.enabled = false;
408
+    return true;
409
+  }
410
+};
411
+export default {
412
+  name: 'mousewheel',
413
+  params: {
414
+    mousewheel: {
415
+      enabled: false,
416
+      releaseOnEdges: false,
417
+      invert: false,
418
+      forceToAxis: false,
419
+      sensitivity: 1,
420
+      eventsTarget: 'container',
421
+      thresholdDelta: null,
422
+      thresholdTime: null
423
+    }
424
+  },
425
+  create: function create() {
426
+    var swiper = this;
427
+    bindModuleMethods(swiper, {
428
+      mousewheel: {
429
+        enabled: false,
430
+        lastScrollTime: now(),
431
+        lastEventBeforeSnap: undefined,
432
+        recentWheelEvents: [],
433
+        enable: Mousewheel.enable,
434
+        disable: Mousewheel.disable,
435
+        handle: Mousewheel.handle,
436
+        handleMouseEnter: Mousewheel.handleMouseEnter,
437
+        handleMouseLeave: Mousewheel.handleMouseLeave,
438
+        animateSlider: Mousewheel.animateSlider,
439
+        releaseScroll: Mousewheel.releaseScroll
440
+      }
441
+    });
442
+  },
443
+  on: {
444
+    init: function init(swiper) {
445
+      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
446
+        swiper.mousewheel.disable();
447
+      }
448
+
449
+      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
450
+    },
451
+    destroy: function destroy(swiper) {
452
+      if (swiper.params.cssMode) {
453
+        swiper.mousewheel.enable();
454
+      }
455
+
456
+      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
457
+    }
458
+  }
459
+};
0 460
\ No newline at end of file