56 lines
1.8 KiB
JavaScript
56 lines
1.8 KiB
JavaScript
export default function effectInit(params) {
|
|
const {
|
|
effect,
|
|
swiper,
|
|
on,
|
|
setTranslate,
|
|
setTransition,
|
|
overwriteParams,
|
|
perspective,
|
|
recreateShadows,
|
|
getEffectParams
|
|
} = params;
|
|
on('beforeInit', () => {
|
|
if (swiper.params.effect !== effect) return;
|
|
swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);
|
|
if (perspective && perspective()) {
|
|
swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
|
|
}
|
|
const overwriteParamsResult = overwriteParams ? overwriteParams() : {};
|
|
Object.assign(swiper.params, overwriteParamsResult);
|
|
Object.assign(swiper.originalParams, overwriteParamsResult);
|
|
});
|
|
on('setTranslate', () => {
|
|
if (swiper.params.effect !== effect) return;
|
|
setTranslate();
|
|
});
|
|
on('setTransition', (_s, duration) => {
|
|
if (swiper.params.effect !== effect) return;
|
|
setTransition(duration);
|
|
});
|
|
on('transitionEnd', () => {
|
|
if (swiper.params.effect !== effect) return;
|
|
if (recreateShadows) {
|
|
if (!getEffectParams || !getEffectParams().slideShadows) return;
|
|
// remove shadows
|
|
swiper.slides.forEach(slideEl => {
|
|
slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());
|
|
});
|
|
// create new one
|
|
recreateShadows();
|
|
}
|
|
});
|
|
let requireUpdateOnVirtual;
|
|
on('virtualUpdate', () => {
|
|
if (swiper.params.effect !== effect) return;
|
|
if (!swiper.slides.length) {
|
|
requireUpdateOnVirtual = true;
|
|
}
|
|
requestAnimationFrame(() => {
|
|
if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {
|
|
setTranslate();
|
|
requireUpdateOnVirtual = false;
|
|
}
|
|
});
|
|
});
|
|
} |