orcaslicer/resources/web/include/swiper/svelte/swiper-slide.svelte
zorro.zhang b4ffa91cb4 ENH: model info display UI
Change-Id: I066c0e7f8ce87ec00b1141a1b44430444a819b42
(cherry picked from commit 05907a1a42da82737090d55046974d401f8af057)
2023-04-17 15:39:02 +08:00

95 lines
2.2 KiB
Svelte

<script>
import { onMount, onDestroy, beforeUpdate, afterUpdate } from 'svelte';
import { uniqueClasses } from './utils.js';
export let zoom = undefined;
export let virtualIndex = undefined;
let className = undefined;
export { className as class };
let slideEl = null;
let slideClasses = 'swiper-slide';
let swiper = null;
let eventAttached = false;
const updateClasses = (_, el, classNames) => {
if (el === slideEl) {
slideClasses = classNames;
}
};
const attachEvent = () => {
if (!swiper || eventAttached) return;
swiper.on('_slideClass', updateClasses);
eventAttached = true;
};
const detachEvent = () => {
if (!swiper) return;
swiper.off('_slideClass', updateClasses);
eventAttached = false;
};
$: slideData = {
isActive:
slideClasses.indexOf('swiper-slide-active') >= 0 ||
slideClasses.indexOf('swiper-slide-duplicate-active') >= 0,
isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,
isDuplicate: slideClasses.indexOf('swiper-slide-duplicate') >= 0,
isPrev:
slideClasses.indexOf('swiper-slide-prev') >= 0 ||
slideClasses.indexOf('swiper-slide-duplicate-prev') >= 0,
isNext:
slideClasses.indexOf('swiper-slide-next') >= 0 ||
slideClasses.indexOf('swiper-slide-duplicate-next') >= 0,
};
onMount(() => {
if (typeof virtualIndex === 'undefined') return;
slideEl.onSwiper = (_swiper) => {
swiper = _swiper;
attachEvent();
};
attachEvent();
});
afterUpdate(() => {
if (!slideEl || !swiper) return;
if (swiper.destroyed) {
if (slideClasses !== 'swiper-slide') {
slideClasses = 'swiper-slide';
}
return;
}
attachEvent();
});
beforeUpdate(() => {
attachEvent();
});
onDestroy(() => {
if (!swiper) return;
detachEvent();
});
</script>
<div
bind:this={slideEl}
class={uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`)}
data-swiper-slide-index={virtualIndex}
{...$$restProps}
>
{#if zoom}
<div
class="swiper-zoom-container"
data-swiper-zoom={typeof zoom === 'number' ? zoom : undefined}
>
<slot data={slideData} />
</div>
{:else}
<slot data={slideData} />
{/if}
</div>