wonder-image 1.2.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/DOCS.md +12 -0
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/babel.config.json +3 -0
- package/demo/backend/body-end.php +10 -0
- package/demo/backend/head.php +93 -0
- package/demo/frontend/body-end.php +19 -0
- package/demo/frontend/head.php +244 -0
- package/demo/wonder-image.php +41 -0
- package/dist/0d01fa889dc2b0202b98.png +0 -0
- package/dist/203d1199e7aef04c0a34.gif +0 -0
- package/dist/26d6ed3fa1c815e4c78f.png +0 -0
- package/dist/39795c0b4513de014cf8.woff +0 -0
- package/dist/40b30ca122107c2852be.png +0 -0
- package/dist/4a7b4107b62ef059ba65.png +0 -0
- package/dist/4dce7f71b08755f19759.png +0 -0
- package/dist/60af14fddca897f348bb.png +0 -0
- package/dist/67172a36bcdeaca8592a.png +0 -0
- package/dist/a85c6dc53638f894de38.png +0 -0
- package/dist/b7bcc075b395c14ce8c2.woff2 +0 -0
- package/dist/backend/body-end.js +3 -0
- package/dist/backend/body-end.js.LICENSE.txt +44 -0
- package/dist/backend/body-end.js.map +1 -0
- package/dist/backend/head.css +2 -0
- package/dist/backend/head.css.map +1 -0
- package/dist/backend/head.js +3 -0
- package/dist/backend/head.js.LICENSE.txt +46 -0
- package/dist/backend/head.js.map +1 -0
- package/dist/backend/lib.js +2 -0
- package/dist/backend/lib.js.LICENSE.txt +1 -0
- package/dist/frontend/body-end.js +3 -0
- package/dist/frontend/body-end.js.LICENSE.txt +46 -0
- package/dist/frontend/body-end.js.map +1 -0
- package/dist/frontend/head.css +2 -0
- package/dist/frontend/head.css.map +1 -0
- package/dist/frontend/head.js +3 -0
- package/dist/frontend/head.js.LICENSE.txt +46 -0
- package/dist/frontend/head.js.map +1 -0
- package/dist/frontend/lib.css +2 -0
- package/dist/frontend/lib.css.map +1 -0
- package/dist/frontend/lib.js +3 -0
- package/dist/frontend/lib.js.LICENSE.txt +151 -0
- package/dist/frontend/lib.js.map +1 -0
- package/dist/lib/autonumeric/autonumeric.js +3 -0
- package/dist/lib/autonumeric/autonumeric.js.LICENSE.txt +47 -0
- package/dist/lib/autonumeric/autonumeric.js.map +1 -0
- package/dist/lib/bootstrap/bootstrap-datepicker.css +2 -0
- package/dist/lib/bootstrap/bootstrap-datepicker.css.map +1 -0
- package/dist/lib/bootstrap/bootstrap-datepicker.js +3 -0
- package/dist/lib/bootstrap/bootstrap-datepicker.js.LICENSE.txt +42 -0
- package/dist/lib/bootstrap/bootstrap-datepicker.js.map +1 -0
- package/dist/lib/bootstrap/bootstrap-icons.css +2 -0
- package/dist/lib/bootstrap/bootstrap-icons.css.map +1 -0
- package/dist/lib/bootstrap/bootstrap-icons.js +3 -0
- package/dist/lib/bootstrap/bootstrap-icons.js.LICENSE.txt +13 -0
- package/dist/lib/bootstrap/bootstrap-icons.js.map +1 -0
- package/dist/lib/bootstrap/bootstrap.css +2 -0
- package/dist/lib/bootstrap/bootstrap.css.map +1 -0
- package/dist/lib/bootstrap/bootstrap.js +3 -0
- package/dist/lib/bootstrap/bootstrap.js.LICENSE.txt +44 -0
- package/dist/lib/bootstrap/bootstrap.js.map +1 -0
- package/dist/lib/chartjs/chart.js +3 -0
- package/dist/lib/chartjs/chart.js.LICENSE.txt +1467 -0
- package/dist/lib/chartjs/chart.js.map +1 -0
- package/dist/lib/datatables/datatables.css +2 -0
- package/dist/lib/datatables/datatables.css.map +1 -0
- package/dist/lib/datatables/datatables.js +3 -0
- package/dist/lib/datatables/datatables.js.LICENSE.txt +8988 -0
- package/dist/lib/datatables/datatables.js.map +1 -0
- package/dist/lib/editorjs/editor.js +3 -0
- package/dist/lib/editorjs/editor.js.LICENSE.txt +5812 -0
- package/dist/lib/editorjs/editor.js.map +1 -0
- package/dist/lib/fancyapps/fancyapps.css +2 -0
- package/dist/lib/fancyapps/fancyapps.css.map +1 -0
- package/dist/lib/fancyapps/fancyapps.js +3 -0
- package/dist/lib/fancyapps/fancyapps.js.LICENSE.txt +19 -0
- package/dist/lib/fancyapps/fancyapps.js.map +1 -0
- package/dist/lib/filepond/filepond.css +2 -0
- package/dist/lib/filepond/filepond.css.map +1 -0
- package/dist/lib/filepond/filepond.js +3 -0
- package/dist/lib/filepond/filepond.js.LICENSE.txt +2797 -0
- package/dist/lib/filepond/filepond.js.map +1 -0
- package/dist/lib/fullcalendar/fullcalendar.js +3 -0
- package/dist/lib/fullcalendar/fullcalendar.js.LICENSE.txt +3787 -0
- package/dist/lib/fullcalendar/fullcalendar.js.map +1 -0
- package/dist/lib/jquery/jquery-plugin.css +2 -0
- package/dist/lib/jquery/jquery-plugin.css.map +1 -0
- package/dist/lib/jquery/jquery-plugin.js +3 -0
- package/dist/lib/jquery/jquery-plugin.js.LICENSE.txt +60 -0
- package/dist/lib/jquery/jquery-plugin.js.map +1 -0
- package/dist/lib/jquery/jquery.js +3 -0
- package/dist/lib/jquery/jquery.js.LICENSE.txt +3240 -0
- package/dist/lib/jquery/jquery.js.map +1 -0
- package/dist/lib/jstree/jstree.css +2 -0
- package/dist/lib/jstree/jstree.css.map +1 -0
- package/dist/lib/jstree/jstree.js +3 -0
- package/dist/lib/jstree/jstree.js.LICENSE.txt +42 -0
- package/dist/lib/jstree/jstree.js.map +1 -0
- package/dist/lib/moment/moment.js +3 -0
- package/dist/lib/moment/moment.js.LICENSE.txt +772 -0
- package/dist/lib/moment/moment.js.map +1 -0
- package/dist/lib/quilljs/quill.css +2 -0
- package/dist/lib/quilljs/quill.css.map +1 -0
- package/dist/lib/quilljs/quill.js +3 -0
- package/dist/lib/quilljs/quill.js.LICENSE.txt +3038 -0
- package/dist/lib/quilljs/quill.js.map +1 -0
- package/dist/lib/swiperjs/swiper-plugin.css +2 -0
- package/dist/lib/swiperjs/swiper-plugin.css.map +1 -0
- package/dist/lib/swiperjs/swiper-plugin.js +3 -0
- package/dist/lib/swiperjs/swiper-plugin.js.LICENSE.txt +1113 -0
- package/dist/lib/swiperjs/swiper-plugin.js.map +1 -0
- package/dist/lib/swiperjs/swiper.css +2 -0
- package/dist/lib/swiperjs/swiper.css.map +1 -0
- package/dist/lib/swiperjs/swiper.js +3 -0
- package/dist/lib/swiperjs/swiper.js.LICENSE.txt +651 -0
- package/dist/lib/swiperjs/swiper.js.map +1 -0
- package/dist/lib/videojs/video.css +2 -0
- package/dist/lib/videojs/video.css.map +1 -0
- package/dist/lib/videojs/video.js +3 -0
- package/dist/lib/videojs/video.js.LICENSE.txt +23391 -0
- package/dist/lib/videojs/video.js.map +1 -0
- package/package.json +95 -0
- package/src/build/backend/css/header.css +252 -0
- package/src/build/backend/css/input.css +295 -0
- package/src/build/backend/css/list.css +57 -0
- package/src/build/backend/css/order.css +99 -0
- package/src/build/backend/js/ajax.js +96 -0
- package/src/build/backend/js/alert.js +78 -0
- package/src/build/backend/js/bootstrap.js +52 -0
- package/src/build/backend/js/form/editor.js +293 -0
- package/src/build/backend/js/form/file.js +142 -0
- package/src/build/backend/js/form/filepond.js +11 -0
- package/src/build/backend/js/form/input.js +313 -0
- package/src/build/backend/js/form/inputRow.js +164 -0
- package/src/build/backend/js/form/send.js +14 -0
- package/src/build/backend/js/form/set.js +314 -0
- package/src/build/backend/js/jquery.js +15 -0
- package/src/build/backend/js/list.js +19 -0
- package/src/build/backend/js/modal.js +31 -0
- package/src/build/backend/js/pageSetUp.js +125 -0
- package/src/build/backend/js/utility.js +38 -0
- package/src/build/frontend/css/class/dimension.css +3376 -0
- package/src/build/frontend/css/class/function.css +316 -0
- package/src/build/frontend/css/class/grid.css +240 -0
- package/src/build/frontend/css/class/margin.css +823 -0
- package/src/build/frontend/css/class/padding.css +760 -0
- package/src/build/frontend/css/class/position.css +351 -0
- package/src/build/frontend/css/class/resize.css +24 -0
- package/src/build/frontend/css/class/section.css +41 -0
- package/src/build/frontend/css/class/text.css +244 -0
- package/src/build/frontend/css/components/alert.css +42 -0
- package/src/build/frontend/css/components/button.css +107 -0
- package/src/build/frontend/css/components/dropdown.css +118 -0
- package/src/build/frontend/css/components/form/address.css +26 -0
- package/src/build/frontend/css/components/form/checkbox.css +65 -0
- package/src/build/frontend/css/components/form/date.css +133 -0
- package/src/build/frontend/css/components/form/input.css +176 -0
- package/src/build/frontend/css/components/form/select.css +69 -0
- package/src/build/frontend/css/components/header/hamburger/hamburger-1.css +56 -0
- package/src/build/frontend/css/components/header/hamburger/hamburger.css +58 -0
- package/src/build/frontend/css/components/header/header.css +57 -0
- package/src/build/frontend/css/components/header/mobile-nav.css +79 -0
- package/src/build/frontend/css/components/modal.css +76 -0
- package/src/build/frontend/css/components/spinner.css +37 -0
- package/src/build/frontend/css/generator/dimension.php +93 -0
- package/src/build/frontend/css/generator/margin.php +48 -0
- package/src/build/frontend/css/generator/padding.php +48 -0
- package/src/build/frontend/css/lib.css +3 -0
- package/src/build/frontend/css/main.css +37 -0
- package/src/build/frontend/js/alert.js +64 -0
- package/src/build/frontend/js/aos.js +9 -0
- package/src/build/frontend/js/dropdown.js +73 -0
- package/src/build/frontend/js/form/input.js +211 -0
- package/src/build/frontend/js/form/list.js +155 -0
- package/src/build/frontend/js/form/select.js +108 -0
- package/src/build/frontend/js/form/send.js +137 -0
- package/src/build/frontend/js/header.js +12 -0
- package/src/build/frontend/js/modal.js +26 -0
- package/src/build/frontend/js/pageSetUp.js +35 -0
- package/src/build/frontend/js/scroll.js +70 -0
- package/src/build/frontend/js/utility.js +21 -0
- package/src/build/global/js/canvas.js +82 -0
- package/src/build/global/js/fetch.js +47 -0
- package/src/build/global/js/form/autonumeric.js +136 -0
- package/src/build/global/js/form/phone.js +19 -0
- package/src/build/global/js/utility.js +88 -0
- package/src/build/global/js/video.js +7 -0
- package/src/build/lib/editorjs/gallery.js +39 -0
- package/src/build/lib/editorjs/hyperlink.js +170 -0
- package/src/build/lib/editorjs/video.js +61 -0
- package/src/build/lib/swiperjs/effect-carousel.css +24 -0
- package/src/build/lib/swiperjs/effect-carousel.esm.js +102 -0
- package/src/build/lib/swiperjs/effect-shutters.css +33 -0
- package/src/build/lib/swiperjs/effect-shutters.esm.js +114 -0
- package/src/build/lib/swiperjs/effect-slicer.css +39 -0
- package/src/build/lib/swiperjs/effect-slicer.esm.js +198 -0
- package/src/build/lib/swiperjs/swiper-gl.css +44 -0
- package/src/build/lib/swiperjs/swiper-gl.esm.js +6063 -0
- package/src/export/backend/body-end.js +4 -0
- package/src/export/backend/head.js +25 -0
- package/src/export/backend/lib.js +0 -0
- package/src/export/frontend/body-end.js +9 -0
- package/src/export/frontend/head.js +42 -0
- package/src/export/frontend/lib.js +17 -0
- package/src/export/lib/autonumeric/autonumeric.js +3 -0
- package/src/export/lib/bootstrap/bootstrap-datepicker.js +4 -0
- package/src/export/lib/bootstrap/bootstrap-icons.js +2 -0
- package/src/export/lib/bootstrap/bootstrap.js +3 -0
- package/src/export/lib/chartjs/chart.js +4 -0
- package/src/export/lib/datatables/datatables.js +6 -0
- package/src/export/lib/editorjs/editor.js +48 -0
- package/src/export/lib/fancyapps/fancyapps.js +7 -0
- package/src/export/lib/filepond/filepond.js +51 -0
- package/src/export/lib/fullcalendar/fullcalendar.js +29 -0
- package/src/export/lib/jquery/jquery-plugin.js +14 -0
- package/src/export/lib/jquery/jquery.js +4 -0
- package/src/export/lib/jstree/jstree.js +2 -0
- package/src/export/lib/moment/moment.js +12 -0
- package/src/export/lib/quilljs/quill.js +4 -0
- package/src/export/lib/swiperjs/swiper-plugin.js +20 -0
- package/src/export/lib/swiperjs/swiper.js +4 -0
- package/src/export/lib/videojs/video.js +3 -0
- package/webpack.config.js +79 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Initiative Carousel Slider
|
|
3
|
+
*
|
|
4
|
+
* Infinite 3D carousel slider
|
|
5
|
+
*
|
|
6
|
+
* https://uiinitiative.com
|
|
7
|
+
*
|
|
8
|
+
* Copyright 2023 UI Initiative
|
|
9
|
+
*
|
|
10
|
+
* Released under the UI Initiative Regular License
|
|
11
|
+
*
|
|
12
|
+
* December 27, 2023
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
.swiper-carousel {
|
|
16
|
+
position: relative;
|
|
17
|
+
margin: 0 auto;
|
|
18
|
+
max-width: 100%;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
}
|
|
21
|
+
.swiper-carousel .swiper-slide,
|
|
22
|
+
.swiper-carousel swiper-slide {
|
|
23
|
+
position: relative;
|
|
24
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Initiative Carousel Slider
|
|
3
|
+
*
|
|
4
|
+
* Infinite 3D carousel slider
|
|
5
|
+
*
|
|
6
|
+
* https://uiinitiative.com
|
|
7
|
+
*
|
|
8
|
+
* Copyright 2023 UI Initiative
|
|
9
|
+
*
|
|
10
|
+
* Released under the UI Initiative Regular License
|
|
11
|
+
*
|
|
12
|
+
* December 27, 2023
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export default function CarouselSlider({ swiper, on, extendParams }) {
|
|
16
|
+
extendParams({
|
|
17
|
+
carouselEffect: {
|
|
18
|
+
opacityStep: 0.33,
|
|
19
|
+
scaleStep: 0.2,
|
|
20
|
+
sideSlides: 2,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
on('beforeInit', () => {
|
|
24
|
+
if (swiper.params.effect !== 'carousel') return;
|
|
25
|
+
swiper.classNames.push(`${swiper.params.containerModifierClass}carousel`);
|
|
26
|
+
const overwriteParams = {
|
|
27
|
+
watchSlidesProgress: true,
|
|
28
|
+
centeredSlides: true,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
Object.assign(swiper.params, overwriteParams);
|
|
32
|
+
Object.assign(swiper.originalParams, overwriteParams);
|
|
33
|
+
});
|
|
34
|
+
on('progress', () => {
|
|
35
|
+
if (swiper.params.effect !== 'carousel') return;
|
|
36
|
+
const { scaleStep, opacityStep } = swiper.params.carouselEffect;
|
|
37
|
+
const sideSlides = Math.max(
|
|
38
|
+
Math.min(swiper.params.carouselEffect.sideSlides, 3),
|
|
39
|
+
1,
|
|
40
|
+
);
|
|
41
|
+
const modifyMultiplier = {
|
|
42
|
+
1: 2,
|
|
43
|
+
2: 1,
|
|
44
|
+
3: 0.2,
|
|
45
|
+
}[sideSlides];
|
|
46
|
+
const translateModifier = {
|
|
47
|
+
1: 50,
|
|
48
|
+
2: 50,
|
|
49
|
+
3: 67,
|
|
50
|
+
}[sideSlides];
|
|
51
|
+
|
|
52
|
+
const zIndexMax = swiper.slides.length;
|
|
53
|
+
|
|
54
|
+
for (let i = 0; i < swiper.slides.length; i += 1) {
|
|
55
|
+
const slideEl = swiper.slides[i];
|
|
56
|
+
const slideProgress = swiper.slides[i].progress;
|
|
57
|
+
const absProgress = Math.abs(slideProgress);
|
|
58
|
+
let modify = 1;
|
|
59
|
+
|
|
60
|
+
if (absProgress > 1) {
|
|
61
|
+
modify = (absProgress - 1) * 0.3 * modifyMultiplier + 1;
|
|
62
|
+
}
|
|
63
|
+
const opacityEls = slideEl.querySelectorAll(
|
|
64
|
+
'.swiper-carousel-animate-opacity',
|
|
65
|
+
);
|
|
66
|
+
const translate = `${
|
|
67
|
+
slideProgress *
|
|
68
|
+
modify *
|
|
69
|
+
translateModifier *
|
|
70
|
+
(swiper.rtlTranslate ? -1 : 1)
|
|
71
|
+
}%`;
|
|
72
|
+
|
|
73
|
+
const scale = 1 - absProgress * scaleStep;
|
|
74
|
+
const zIndex = zIndexMax - Math.abs(Math.round(slideProgress));
|
|
75
|
+
slideEl.style.transform = `translateX(${translate}) scale(${scale})`;
|
|
76
|
+
slideEl.style.zIndex = zIndex;
|
|
77
|
+
if (absProgress > sideSlides + 1) {
|
|
78
|
+
slideEl.style.opacity = 0;
|
|
79
|
+
} else {
|
|
80
|
+
slideEl.style.opacity = 1;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
opacityEls.forEach((opacityEl) => {
|
|
84
|
+
opacityEl.style.opacity = 1 - absProgress * opacityStep;
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
on('setTransition', (s, duration) => {
|
|
90
|
+
if (swiper.params.effect !== 'carousel') return;
|
|
91
|
+
for (let i = 0; i < swiper.slides.length; i += 1) {
|
|
92
|
+
const slideEl = swiper.slides[i];
|
|
93
|
+
const opacityEls = slideEl.querySelectorAll(
|
|
94
|
+
'.swiper-carousel-animate-opacity',
|
|
95
|
+
);
|
|
96
|
+
slideEl.style.transitionDuration = `${duration}ms`;
|
|
97
|
+
opacityEls.forEach((opacityEl) => {
|
|
98
|
+
opacityEl.style.transitionDuration = `${duration}ms`;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Initiative Shutters Slider
|
|
3
|
+
*
|
|
4
|
+
* Infinite 3D carousel slider
|
|
5
|
+
*
|
|
6
|
+
* https://uiinitiative.com
|
|
7
|
+
*
|
|
8
|
+
* Copyright 2023 UI Initiative
|
|
9
|
+
*
|
|
10
|
+
* Released under the UI Initiative Regular License
|
|
11
|
+
*
|
|
12
|
+
* October 25, 2023
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
.swiper-shutters .swiper-slide,
|
|
16
|
+
.swiper-shutters swiper-slide {
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
}
|
|
19
|
+
.swiper-shutters-image, .swiper-shutters-image-clones, .swiper-shutters-image-clone {
|
|
20
|
+
position: absolute;
|
|
21
|
+
left: 0;
|
|
22
|
+
top: 0;
|
|
23
|
+
width: 100%;
|
|
24
|
+
height: 100%;
|
|
25
|
+
pointer-events: none;
|
|
26
|
+
}
|
|
27
|
+
.swiper-shutters-image {
|
|
28
|
+
object-fit: cover;
|
|
29
|
+
object-position: center;
|
|
30
|
+
}
|
|
31
|
+
.swiper-shutters-image-clone {
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Initiative Shutters Slider
|
|
3
|
+
*
|
|
4
|
+
* Infinite 3D carousel slider
|
|
5
|
+
*
|
|
6
|
+
* https://uiinitiative.com
|
|
7
|
+
*
|
|
8
|
+
* Copyright 2023 UI Initiative
|
|
9
|
+
*
|
|
10
|
+
* Released under the UI Initiative Regular License
|
|
11
|
+
*
|
|
12
|
+
* October 25, 2023
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
if (typeof window !== 'undefined' && window.SwiperElementRegisterParams) {
|
|
16
|
+
window.SwiperElementRegisterParams(['shuttersEffect']);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export default function EffectShutters({ swiper, extendParams, on }) {
|
|
20
|
+
extendParams({
|
|
21
|
+
shuttersEffect: {
|
|
22
|
+
split: 5,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const createImages = () => {
|
|
27
|
+
swiper.slides.forEach((slideEl) => {
|
|
28
|
+
const imageEl = slideEl.querySelector('.swiper-shutters-image');
|
|
29
|
+
if (!imageEl) return;
|
|
30
|
+
const nextEl = imageEl.nextElementSibling;
|
|
31
|
+
const cloneContainerEl = document.createElement('div');
|
|
32
|
+
cloneContainerEl.classList.add('swiper-shutters-image-clones');
|
|
33
|
+
for (let i = 0; i < swiper.params.shuttersEffect.split; i += 1) {
|
|
34
|
+
const div = document.createElement('div');
|
|
35
|
+
div.classList.add('swiper-shutters-image-clone');
|
|
36
|
+
div.appendChild(imageEl.cloneNode());
|
|
37
|
+
cloneContainerEl.appendChild(div);
|
|
38
|
+
}
|
|
39
|
+
if (nextEl) {
|
|
40
|
+
imageEl.parentNode.insertBefore(cloneContainerEl, nextEl);
|
|
41
|
+
} else {
|
|
42
|
+
imageEl.parentNode.appendChild(cloneContainerEl);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const setImages = () => {
|
|
48
|
+
swiper.el.querySelectorAll('.swiper-shutters-image').forEach((imageEl) => {
|
|
49
|
+
imageEl.style.width = `${swiper.width}px`;
|
|
50
|
+
imageEl.style.height = `${swiper.height}px`;
|
|
51
|
+
});
|
|
52
|
+
swiper.el
|
|
53
|
+
.querySelectorAll('.swiper-slide, swiper-slide')
|
|
54
|
+
.forEach((slideEl) => {
|
|
55
|
+
slideEl
|
|
56
|
+
.querySelectorAll('.swiper-shutters-image-clone')
|
|
57
|
+
.forEach((cloneEl, cloneElIndex) => {
|
|
58
|
+
const percentagePerItem = 100 / swiper.params.shuttersEffect.split;
|
|
59
|
+
const cloneImg = cloneEl.querySelector('.swiper-shutters-image');
|
|
60
|
+
if (swiper.params.direction === 'vertical') {
|
|
61
|
+
cloneEl.style.height = `${
|
|
62
|
+
100 / swiper.params.shuttersEffect.split
|
|
63
|
+
}%`;
|
|
64
|
+
cloneEl.style.top = `${
|
|
65
|
+
(100 / swiper.params.shuttersEffect.split) * cloneElIndex
|
|
66
|
+
}%`;
|
|
67
|
+
cloneImg.style.top = `-${100 * cloneElIndex}%`;
|
|
68
|
+
} else {
|
|
69
|
+
cloneEl.style.width = `${
|
|
70
|
+
100 / swiper.params.shuttersEffect.split
|
|
71
|
+
}%`;
|
|
72
|
+
cloneEl.style.left = `${
|
|
73
|
+
(100 / swiper.params.shuttersEffect.split) * cloneElIndex
|
|
74
|
+
}%`;
|
|
75
|
+
cloneImg.style.left = `-${100 * cloneElIndex}%`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
cloneImg.setAttribute('data-swiper-parallax', '10%');
|
|
79
|
+
|
|
80
|
+
cloneEl.setAttribute(
|
|
81
|
+
'data-swiper-parallax',
|
|
82
|
+
`${
|
|
83
|
+
percentagePerItem *
|
|
84
|
+
(cloneElIndex + 1) *
|
|
85
|
+
(cloneElIndex % 2 === 0 ? 0.5 : -1)
|
|
86
|
+
}%`,
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
on('beforeInit', () => {
|
|
93
|
+
if (swiper.params.effect !== 'shutters') return;
|
|
94
|
+
|
|
95
|
+
swiper.classNames.push('swiper-shutters');
|
|
96
|
+
|
|
97
|
+
const overwriteParams = {
|
|
98
|
+
watchSlidesProgress: true,
|
|
99
|
+
parallax: { enabled: true },
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
Object.assign(swiper.params, overwriteParams);
|
|
103
|
+
Object.assign(swiper.originalParams, overwriteParams);
|
|
104
|
+
});
|
|
105
|
+
on('init', () => {
|
|
106
|
+
if (swiper.params.effect !== 'shutters') return;
|
|
107
|
+
createImages();
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
on('resize init', () => {
|
|
111
|
+
if (swiper.params.effect !== 'shutters') return;
|
|
112
|
+
setImages();
|
|
113
|
+
});
|
|
114
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Initiative Slicer Slider
|
|
3
|
+
*
|
|
4
|
+
* Images slicer slider
|
|
5
|
+
*
|
|
6
|
+
* https://uiinitiative.com
|
|
7
|
+
*
|
|
8
|
+
* Copyright 2023 UI Initiative
|
|
9
|
+
*
|
|
10
|
+
* Released under the UI Initiative Regular License
|
|
11
|
+
*
|
|
12
|
+
* October 25, 2023
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
.swiper-slicer .swiper-slide,
|
|
17
|
+
.swiper-slicer swiper-slide {
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
}
|
|
20
|
+
.swiper-slicer-image, .swiper-slicer-image-clones, .swiper-slicer-image-clone {
|
|
21
|
+
position: absolute;
|
|
22
|
+
left: 0;
|
|
23
|
+
top: 0;
|
|
24
|
+
width: 100%;
|
|
25
|
+
height: 100%;
|
|
26
|
+
pointer-events: none;
|
|
27
|
+
}
|
|
28
|
+
.swiper-slicer-image {
|
|
29
|
+
display: none;
|
|
30
|
+
object-fit: cover;
|
|
31
|
+
object-position: center;
|
|
32
|
+
}
|
|
33
|
+
.swiper-slicer-image-clone {
|
|
34
|
+
overflow: hidden;
|
|
35
|
+
transition-timing-function: cubic-bezier(1, 0, 0.5, 1);
|
|
36
|
+
}
|
|
37
|
+
.swiper-slicer-image-clone .swiper-slicer-image {
|
|
38
|
+
display: block;
|
|
39
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Initiative Slicer Slider
|
|
3
|
+
*
|
|
4
|
+
* Images slicer slider
|
|
5
|
+
*
|
|
6
|
+
* https://uiinitiative.com
|
|
7
|
+
*
|
|
8
|
+
* Copyright 2023 UI Initiative
|
|
9
|
+
*
|
|
10
|
+
* Released under the UI Initiative Regular License
|
|
11
|
+
*
|
|
12
|
+
* October 25, 2023
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
if (typeof window !== 'undefined' && window.SwiperElementRegisterParams) {
|
|
17
|
+
window.SwiperElementRegisterParams(['slicerEffect']);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default function EffectSlicer({ swiper, extendParams, on, emit }) {
|
|
21
|
+
extendParams({
|
|
22
|
+
slicerEffect: {
|
|
23
|
+
split: 5,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
function effectVirtualTransitionEnd({ duration }) {
|
|
28
|
+
const { slides, activeIndex } = swiper;
|
|
29
|
+
if (duration !== 0) {
|
|
30
|
+
let eventTriggered = false;
|
|
31
|
+
const transitionEndTarget = slides[activeIndex].querySelector(
|
|
32
|
+
'.swiper-slicer-image-clone:nth-child(1)',
|
|
33
|
+
);
|
|
34
|
+
if (!transitionEndTarget) return;
|
|
35
|
+
const onTransitionEnd = (e) => {
|
|
36
|
+
if (e.target !== transitionEndTarget) return;
|
|
37
|
+
transitionEndTarget.removeEventListener(
|
|
38
|
+
'transitionend',
|
|
39
|
+
onTransitionEnd,
|
|
40
|
+
);
|
|
41
|
+
if (eventTriggered) return;
|
|
42
|
+
if (!swiper || swiper.destroyed) return;
|
|
43
|
+
eventTriggered = true;
|
|
44
|
+
swiper.animating = false;
|
|
45
|
+
|
|
46
|
+
const evt = new window.CustomEvent('transitionend', {
|
|
47
|
+
bubbles: true,
|
|
48
|
+
cancelable: true,
|
|
49
|
+
});
|
|
50
|
+
swiper.wrapperEl.dispatchEvent(evt);
|
|
51
|
+
};
|
|
52
|
+
transitionEndTarget.addEventListener('transitionend', onTransitionEnd);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const createImages = () => {
|
|
57
|
+
swiper.slides.forEach((slideEl) => {
|
|
58
|
+
if (slideEl.querySelector('.swiper-slicer-image-clones')) return;
|
|
59
|
+
const imageEl = slideEl.querySelector('.swiper-slicer-image');
|
|
60
|
+
if (!imageEl) return;
|
|
61
|
+
const nextEl = imageEl.nextElementSibling;
|
|
62
|
+
const cloneContainerEl = document.createElement('div');
|
|
63
|
+
cloneContainerEl.classList.add('swiper-slicer-image-clones');
|
|
64
|
+
for (let i = 0; i < swiper.params.slicerEffect.split; i += 1) {
|
|
65
|
+
const div = document.createElement('div');
|
|
66
|
+
div.classList.add('swiper-slicer-image-clone');
|
|
67
|
+
div.appendChild(imageEl.cloneNode());
|
|
68
|
+
cloneContainerEl.appendChild(div);
|
|
69
|
+
}
|
|
70
|
+
if (nextEl) {
|
|
71
|
+
imageEl.parentNode.insertBefore(cloneContainerEl, nextEl);
|
|
72
|
+
} else {
|
|
73
|
+
imageEl.parentNode.appendChild(cloneContainerEl);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const setImages = () => {
|
|
79
|
+
swiper.slides.forEach((slideEl) =>
|
|
80
|
+
slideEl.querySelectorAll('.swiper-slicer-image').forEach((imageEl) => {
|
|
81
|
+
imageEl.style.width = `${swiper.width}px`;
|
|
82
|
+
imageEl.style.height = `${swiper.height}px`;
|
|
83
|
+
}),
|
|
84
|
+
);
|
|
85
|
+
swiper.slides.forEach((slideEl) => {
|
|
86
|
+
slideEl
|
|
87
|
+
.querySelectorAll('.swiper-slicer-image-clone')
|
|
88
|
+
.forEach((cloneEl, cloneElIndex) => {
|
|
89
|
+
const cloneImg = cloneEl.querySelector('.swiper-slicer-image');
|
|
90
|
+
if (swiper.params.direction === 'horizontal') {
|
|
91
|
+
cloneEl.style.height = `${100 / swiper.params.slicerEffect.split}%`;
|
|
92
|
+
cloneEl.style.top = `${
|
|
93
|
+
(100 / swiper.params.slicerEffect.split) * cloneElIndex
|
|
94
|
+
}%`;
|
|
95
|
+
cloneImg.style.top = `-${100 * cloneElIndex}%`;
|
|
96
|
+
} else {
|
|
97
|
+
cloneEl.style.width = `${100 / swiper.params.slicerEffect.split}%`;
|
|
98
|
+
cloneEl.style.left = `${
|
|
99
|
+
(100 / swiper.params.slicerEffect.split) * cloneElIndex
|
|
100
|
+
}%`;
|
|
101
|
+
cloneImg.style.left = `-${100 * cloneElIndex}%`;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const setTranslate = () => {
|
|
108
|
+
const axis = swiper.params.direction === 'vertical' ? 'Y' : 'X';
|
|
109
|
+
swiper.slides.forEach((slideEl, slideIndex) => {
|
|
110
|
+
slideEl.style.transform = `translate${axis}(-${slideIndex * 100}%)`;
|
|
111
|
+
const slideProgress = slideEl.progress;
|
|
112
|
+
const contentEl = slideEl.querySelector('.swiper-slide-content');
|
|
113
|
+
if (contentEl) {
|
|
114
|
+
contentEl.style.transform = `translate${axis}(${
|
|
115
|
+
swiper.size * -slideProgress * 1.2
|
|
116
|
+
}px)`;
|
|
117
|
+
}
|
|
118
|
+
const images = slideEl.querySelectorAll('.swiper-slicer-image-clone');
|
|
119
|
+
images.forEach((imageEl) => {
|
|
120
|
+
const progress = -slideProgress;
|
|
121
|
+
imageEl.style.transform = `translate${axis}(${progress * 100}%)`;
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const setTransition = (duration) => {
|
|
127
|
+
swiper.slides.forEach((slideEl) => {
|
|
128
|
+
const images = slideEl.querySelectorAll('.swiper-slicer-image-clone');
|
|
129
|
+
const contentEl = slideEl.querySelector('.swiper-slide-content');
|
|
130
|
+
if (contentEl) {
|
|
131
|
+
contentEl.style.transitionDuration = `${duration}ms`;
|
|
132
|
+
}
|
|
133
|
+
// eslint-disable-next-line
|
|
134
|
+
|
|
135
|
+
images.forEach((imageEl, imageIndex) => {
|
|
136
|
+
if (duration === 0) {
|
|
137
|
+
imageEl.style.transitionTimingFunction = 'ease-out';
|
|
138
|
+
imageEl.style.transitionDuration = `${
|
|
139
|
+
swiper.params.speed +
|
|
140
|
+
(swiper.params.speed / (images.length - 1)) *
|
|
141
|
+
(images.length - imageIndex - 1)
|
|
142
|
+
}ms`;
|
|
143
|
+
} else {
|
|
144
|
+
imageEl.style.transitionTimingFunction = '';
|
|
145
|
+
imageEl.style.transitionDuration = `${
|
|
146
|
+
duration +
|
|
147
|
+
(duration / (images.length - 1)) * (images.length - imageIndex - 1)
|
|
148
|
+
}ms`;
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
effectVirtualTransitionEnd({ duration });
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
on('setTranslate', () => {
|
|
157
|
+
if (swiper.params.effect !== 'slicer') return;
|
|
158
|
+
|
|
159
|
+
setTranslate();
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
on('setTransition', (_s, duration) => {
|
|
163
|
+
if (swiper.params.effect !== 'slicer') return;
|
|
164
|
+
setTransition(duration);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
on('slidesLengthChange', () => {
|
|
168
|
+
createImages();
|
|
169
|
+
setImages();
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
on('beforeInit', () => {
|
|
173
|
+
if (swiper.params.effect !== 'slicer') return;
|
|
174
|
+
|
|
175
|
+
swiper.classNames.push('swiper-slicer');
|
|
176
|
+
|
|
177
|
+
const overwriteParams = {
|
|
178
|
+
slidesPerView: 1,
|
|
179
|
+
slidesPerGroup: 1,
|
|
180
|
+
watchSlidesProgress: true,
|
|
181
|
+
spaceBetween: 0,
|
|
182
|
+
virtualTranslate: true,
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
Object.assign(swiper.params, overwriteParams);
|
|
186
|
+
Object.assign(swiper.originalParams, overwriteParams);
|
|
187
|
+
});
|
|
188
|
+
on('init', () => {
|
|
189
|
+
if (swiper.params.effect !== 'slicer') return;
|
|
190
|
+
createImages();
|
|
191
|
+
emit('setTranslate', swiper, swiper.translate);
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
on('resize init', () => {
|
|
195
|
+
if (swiper.params.effect !== 'slicer') return;
|
|
196
|
+
setImages();
|
|
197
|
+
});
|
|
198
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Initiative Swiper GL
|
|
3
|
+
*
|
|
4
|
+
* Stunning WebGL image transitions
|
|
5
|
+
*
|
|
6
|
+
* https://uiinitiative.com
|
|
7
|
+
*
|
|
8
|
+
* Copyright 2024 UI Initiative
|
|
9
|
+
*
|
|
10
|
+
* Released under the UI Initiative Regular License
|
|
11
|
+
*
|
|
12
|
+
* April 25, 2024
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
.swiper-gl {
|
|
16
|
+
position: relative;
|
|
17
|
+
margin: 0 auto;
|
|
18
|
+
max-width: 100%;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
}
|
|
21
|
+
.swiper-gl .swiper-slide,
|
|
22
|
+
.swiper-gl swiper-slide {
|
|
23
|
+
position: relative;
|
|
24
|
+
}
|
|
25
|
+
.swiper-gl .swiper-gl-image {
|
|
26
|
+
display: none;
|
|
27
|
+
}
|
|
28
|
+
.swiper-gl > canvas {
|
|
29
|
+
position: absolute;
|
|
30
|
+
left: 0;
|
|
31
|
+
top: 0;
|
|
32
|
+
width: 100%;
|
|
33
|
+
height: 100%;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.swiper-gl-image {
|
|
37
|
+
width: 100%;
|
|
38
|
+
height: 100%;
|
|
39
|
+
object-fit: cover;
|
|
40
|
+
object-position: center;
|
|
41
|
+
position: absolute;
|
|
42
|
+
left: 0;
|
|
43
|
+
top: 0;
|
|
44
|
+
}
|