swiper-mouseover 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/package.json +1 -1
- package/swiper-mouseover.css +1 -1
- package/swiper-mouseover.js +67 -37
- package/swiper-mouseover.min.css +1 -1
- package/swiper-mouseover.min.js +2 -2
package/README.md
CHANGED
package/package.json
CHANGED
package/swiper-mouseover.css
CHANGED
package/swiper-mouseover.js
CHANGED
|
@@ -1,63 +1,93 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Swiper-Mouseover v2.0
|
|
2
|
+
* Swiper-Mouseover v2.1.0 for Swiper (https://github.com/fibit/swiper-mouseover)
|
|
3
3
|
* Author Pavel Romanov
|
|
4
4
|
* Released under the MIT License
|
|
5
5
|
*/
|
|
6
6
|
function MouseoverPlugin({ swiper, extendParams, on }) {
|
|
7
|
+
const CLASS_LAYER = 'swiper-mouseover-layer';
|
|
8
|
+
|
|
7
9
|
extendParams({
|
|
8
10
|
mouseover: {
|
|
9
|
-
el: null
|
|
11
|
+
el: null,
|
|
12
|
+
reset: true
|
|
10
13
|
}
|
|
11
14
|
});
|
|
12
15
|
|
|
16
|
+
const resolveElement = (selector) => {
|
|
17
|
+
return typeof selector === 'string'
|
|
18
|
+
? document.querySelector(selector)
|
|
19
|
+
: selector;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const isTouchDevice = () => 'ontouchstart' in window;
|
|
23
|
+
|
|
24
|
+
const createMouseHandler = (slideToIndex) => function(slideIndex) {
|
|
25
|
+
return function() {
|
|
26
|
+
swiper.slideTo(slideToIndex ?? slideIndex, swiper.params.speed);
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const cleanupLayers = (container) => {
|
|
31
|
+
const layers = container.querySelectorAll(`.${CLASS_LAYER}`);
|
|
32
|
+
layers.forEach(layer => {
|
|
33
|
+
const mouseOverHandler = layer._mouseOverHandler;
|
|
34
|
+
const mouseOutHandler = layer._mouseOutHandler;
|
|
35
|
+
|
|
36
|
+
if (mouseOverHandler) {
|
|
37
|
+
layer.removeEventListener('mouseover', mouseOverHandler);
|
|
38
|
+
}
|
|
39
|
+
if (mouseOutHandler) {
|
|
40
|
+
layer.removeEventListener('mouseout', mouseOutHandler);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
delete layer._mouseOverHandler;
|
|
44
|
+
delete layer._mouseOutHandler;
|
|
45
|
+
});
|
|
46
|
+
container.innerHTML = '';
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const createLayers = (container) => {
|
|
50
|
+
swiper.snapGrid.forEach((_, index) => {
|
|
51
|
+
const layer = document.createElement('div');
|
|
52
|
+
layer.className = CLASS_LAYER;
|
|
53
|
+
container.appendChild(layer);
|
|
54
|
+
|
|
55
|
+
const mouseOverHandler = createMouseHandler()(index);
|
|
56
|
+
layer._mouseOverHandler = mouseOverHandler;
|
|
57
|
+
layer.addEventListener('mouseover', mouseOverHandler);
|
|
58
|
+
|
|
59
|
+
if (swiper.params.mouseover.reset) {
|
|
60
|
+
const mouseOutHandler = createMouseHandler(0)(index);
|
|
61
|
+
layer._mouseOutHandler = mouseOutHandler;
|
|
62
|
+
layer.addEventListener('mouseout', mouseOutHandler);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
|
|
13
67
|
const initMouseover = () => {
|
|
14
68
|
const { el } = swiper.params.mouseover;
|
|
15
|
-
|
|
16
69
|
if (!el) return;
|
|
17
70
|
|
|
18
|
-
const mouseoverEl =
|
|
19
|
-
? document.querySelector(el)
|
|
20
|
-
: el;
|
|
21
|
-
|
|
71
|
+
const mouseoverEl = resolveElement(el);
|
|
22
72
|
if (!mouseoverEl) return;
|
|
23
73
|
|
|
24
|
-
if (
|
|
74
|
+
if (isTouchDevice()) {
|
|
25
75
|
mouseoverEl.remove();
|
|
26
76
|
return;
|
|
27
77
|
}
|
|
28
78
|
|
|
29
|
-
mouseoverEl
|
|
30
|
-
|
|
31
|
-
mouseoverEl.querySelectorAll('.swiper-mouseover-layer').forEach(el => {
|
|
32
|
-
el.removeEventListener('mouseover', handleMouseOver);
|
|
33
|
-
el.removeEventListener('mouseout', handleMouseOut);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
for (let i = 0; i < swiper.snapGrid.length; i++) {
|
|
37
|
-
const layer = document.createElement('div');
|
|
38
|
-
layer.className = 'swiper-mouseover-layer';
|
|
39
|
-
layer.setAttribute('data-swiper-slide-index', i);
|
|
40
|
-
mouseoverEl.appendChild(layer);
|
|
41
|
-
layer.addEventListener('mouseover', handleMouseOver);
|
|
42
|
-
layer.addEventListener('mouseout', handleMouseOut);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function handleMouseOver() {
|
|
46
|
-
const slideIndex = parseInt(this.getAttribute('data-swiper-slide-index'));
|
|
47
|
-
swiper.slideTo(slideIndex, swiper.params.speed);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function handleMouseOut() {
|
|
51
|
-
swiper.slideTo(0, swiper.params.speed);
|
|
52
|
-
}
|
|
79
|
+
cleanupLayers(mouseoverEl);
|
|
80
|
+
createLayers(mouseoverEl);
|
|
53
81
|
};
|
|
54
82
|
|
|
55
|
-
|
|
56
|
-
on('destroy', () => {
|
|
83
|
+
const cleanup = () => {
|
|
57
84
|
const { el } = swiper.params.mouseover;
|
|
58
85
|
if (el) {
|
|
59
|
-
const mouseoverEl =
|
|
86
|
+
const mouseoverEl = resolveElement(el);
|
|
60
87
|
if (mouseoverEl) mouseoverEl.remove();
|
|
61
88
|
}
|
|
62
|
-
}
|
|
63
|
-
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
on('afterInit', initMouseover);
|
|
92
|
+
on('destroy', cleanup);
|
|
93
|
+
}
|
package/swiper-mouseover.min.css
CHANGED
package/swiper-mouseover.min.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Swiper-Mouseover v2.0
|
|
2
|
+
* Swiper-Mouseover v2.1.0 for Swiper (https://github.com/fibit/swiper-mouseover)
|
|
3
3
|
* Author Pavel Romanov
|
|
4
4
|
* Released under the MIT License
|
|
5
5
|
*/
|
|
6
|
-
function MouseoverPlugin({swiper:e,extendParams:
|
|
6
|
+
function MouseoverPlugin({swiper:e,extendParams:r,on:t}){let o="swiper-mouseover-layer";r({mouseover:{el:null,reset:!0}});let s=e=>"string"==typeof e?document.querySelector(e):e,n=()=>"ontouchstart"in window,l=r=>function(t){return function(){e.slideTo(r??t,e.params.speed)}},u=e=>{let r=e.querySelectorAll(`.${o}`);r.forEach(e=>{let r=e._mouseOverHandler,t=e._mouseOutHandler;r&&e.removeEventListener("mouseover",r),t&&e.removeEventListener("mouseout",t),delete e._mouseOverHandler,delete e._mouseOutHandler}),e.innerHTML=""},a=r=>{e.snapGrid.forEach((t,s)=>{let n=document.createElement("div");n.className=o,r.appendChild(n);let u=l()(s);if(n._mouseOverHandler=u,n.addEventListener("mouseover",u),e.params.mouseover.reset){let a=l(0)(s);n._mouseOutHandler=a,n.addEventListener("mouseout",a)}})},m=()=>{let{el:r}=e.params.mouseover;if(!r)return;let t=s(r);if(t){if(n()){t.remove();return}u(t),a(t)}},i=()=>{let{el:r}=e.params.mouseover;if(r){let t=s(r);t&&t.remove()}};t("afterInit",m),t("destroy",i)}
|