nuxt-swiper
Version:
[](https://www.npmjs.com/package/nuxt-swiper/) [](https://www.npmjs.com/package/nuxt-swiper) [ • 2.36 kB
JavaScript
import { computed, nextTick, onMounted, ref, watch } from "vue";
export function useSwiper(swiperContainerRef, options) {
const swiper = ref();
const isBeginning = computed(() => swiper.value?.isBeginning ?? true);
const isEnd = computed(() => swiper.value?.isEnd ?? false);
const activeIndex = computed(() => swiper.value?.activeIndex ?? 0);
const realIndex = computed(() => swiper.value?.realIndex ?? 0);
const slides = computed(() => swiper.value?.slides ?? []);
const slidesPerView = computed(() => swiper.value?.slidesPerViewDynamic() ?? 0);
const progress = computed(() => swiper.value?.progress ?? 0);
const getNumberOfSlides = computed(() => swiper.value?.slides.length ?? 0);
const next = (...params) => {
if (!swiper.value)
return;
if (params.length === 0)
swiper.value.slideNext();
else swiper.value.slideNext(...params);
};
const to = (...params) => {
if (!swiper.value)
return;
swiper.value.slideTo(...params);
};
const reset = (...params) => {
if (!swiper.value)
return;
if (params.length === 0)
swiper.value.slideReset();
else swiper.value.slideReset(...params);
};
const prev = (...params) => {
if (!swiper.value)
return;
if (params.length === 0)
swiper.value.slidePrev();
else swiper.value.slidePrev(...params);
};
const checkSwiperRef = () => {
const isSwiperContainer = swiperContainerRef.value?.nodeName === "SWIPER-CONTAINER";
if (!isSwiperContainer && swiper.value !== null && !options) {
console.warn(
'"useSwiper()" requires a ref and is tied to the %c`<swiper-container ref="swiperContainerRef"></swiper-container>` element.',
"font-weight: bold;"
);
}
};
const _initialize = () => {
if (swiperContainerRef.value && options !== void 0) {
Object.assign(swiperContainerRef.value, options);
swiperContainerRef.value?.initialize();
}
swiper.value = swiperContainerRef?.value?.swiper;
};
watch(swiper, () => checkSwiperRef());
onMounted(() => nextTick(() => _initialize()));
return {
// Instance
instance: swiper,
// Reactive state
isBeginning,
isEnd,
activeIndex,
realIndex,
slides,
slidesPerView,
progress,
getNumberOfSlides,
// Navigation methods
next,
prev,
to,
reset
};
}