Nuxt Swiper
!重要Nuxt Swiper 使用 Swiper.js 作为基础,利用其 Web 组件。在使用此模块并报告与 Nuxt Swiper 无直接关系的问题之前,请务必阅读 Swiper.js 的文档。如果存在底层错误,请将问题提交到 Swiper.js 的 存储库。
!注意 如果你想学习如何在 Vue.js 中使用 Web 组件,请参考此处的文档:Vue.js Web 组件
特性
- 📖 开源
- 🪄 TypeScript 支持
- ✅ 启用自动导入
- ✨ 开箱即用,如魔法般神奇
设置
在线尝试
步骤 1:安装模块
npx nuxi@latest module add swiper
用法
!信息 由于这些是 Web 组件,它们使用 kebab-case 命名约定,而不是 Vue 使用的 camelCase 命名约定。
Swiper 组件 (WebComponent) |
---|
<swiper-container/> |
<swiper-slide /> |
模块选项
interface ModuleOptions {
/**
* Enable custom Swiper composables to help you access Swiper instance.
* @example ```vue
* <script setup>
* const swiperRef = ref<null>(null)
* const swiper = useSwiper(swiperRef, { loop: true, autoplay: { delay: 5000 })
*
* const next = () => swiper.next()
* </script>
*
* <template>
* <swiper-container ref="swiperRef" :init="false">
* <swiper-slide>Slide 1</swiper-slide>
* <swiper-slide>Slide 2</swiper-slide>
* </swiper-container>
* </template>
* ```
* @default true
*/
enableComposables?: boolean
/**
* Bundle Swiper custom elements.
* if disabled, you need to import swiper css and modules manually.
* @see https://swiper.js.cn/element#core-version--modules
* @default true
*/
bundled?: boolean
}
基本用法
<script setup lang="ts">
// Create 10 slides
const containerRef = ref(null)
const slides = ref(Array.from({ length: 10 }))
const swiper = useSwiper(containerRef)
onMounted(() => {
// Access Swiper instance
// Read more about Swiper instance: https://swiper.js.cn/swiper-api#methods--properties
console.log(swiper.instance)
})
</script>
<template>
<ClientOnly>
<swiper-container ref="containerRef">
<swiper-slide
v-for="(slide, idx) in slides"
:key="idx"
style="background-color: rgb(32, 233, 70); color: white;"
>
Slide {{ idx + 1 }}
</swiper-slide>
</swiper-container>
</ClientOnly>
<!-- Go back one slide -->
<button @click="swiper.prev()">
Prev
</button>
<!-- Go forward one slide -->
<button @click="swiper.next()">
Next
</button>
</template>
<style lang="css">
swiper-slide {
display: flex;
justify-content: center;
align-items: center;
font-size: 18px;
height: 20vh;
font-size: 4rem;
font-weight: bold;
font-family: 'Roboto', sans-serif;
}
</style>
高级用法
<script setup lang="ts">
const containerRef = ref(null)
const slides = ref(Array.from({ length: 10 }))
const swiper = useSwiper(containerRef, {
effect: 'creative',
loop: true,
autoplay: {
delay: 5000,
},
creativeEffect: {
prev: {
shadow: true,
translate: [0, 0, -400],
},
next: {
shadow: true,
translate: [0, 0, -400],
},
},
})
onMounted(() => {
console.log(swiper.instance)
})
</script>
<template>
<ClientOnly>
<swiper-container ref="containerRef" :init="false">
<swiper-slide
v-for="(slide, idx) in slides"
:key="idx"
style="background-color: rgb(32, 233, 70); color: white;"
>
Slide {{ idx + 1 }}
</swiper-slide>
</swiper-container>
</ClientOnly>
</template>
<style lang="css">
swiper-slide {
display: flex;
justify-content: center;
align-items: center;
font-size: 18px;
height: 20vh;
font-size: 4rem;
font-weight: bold;
font-family: 'Roboto', sans-serif;
}
</style>
💻 开发
本地开发
致谢
Swiper.js
由 @nolimits4web 开发。
Nuxt Swiper
由 @cpreston321 开发。
📧 联系方式
X (以前称为 Twitter) - @christian_ggg
另外,如果你喜欢我的工作,请随时请我喝杯咖啡 ☕️