Swiper Vue.js 外掛程式僅可透過 NPM 作為主要 Swiper 函式庫的一部分取得
npm i swiper
swiper/vue
匯出 2 個組件:Swiper
和 SwiperSlide
<template>
<swiper
:slides-per-view="3"
:space-between="50"
@swiper="onSwiper"
@slideChange="onSlideChange"
>
<swiper-slide>Slide 1</swiper-slide>
<swiper-slide>Slide 2</swiper-slide>
<swiper-slide>Slide 3</swiper-slide>
...
</swiper>
</template>
<script>
// Import Swiper Vue.js components
import { Swiper, SwiperSlide } from 'swiper/vue';
// Import Swiper styles
import 'swiper/css';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
const onSwiper = (swiper) => {
console.log(swiper);
};
const onSlideChange = () => {
console.log('slide change');
};
return {
onSwiper,
onSlideChange,
};
},
};
</script>
以下是從 swiper/modules
匯入的其他模組清單
Virtual
- 虛擬幻燈片模組Keyboard
- 鍵盤控制模組Mousewheel
- 滑鼠滾輪控制模組Navigation
- 導覽模組Pagination
- 分頁模組Scrollbar
- 滾動條模組Parallax
- 視差模組FreeMode
- 自由模式模組Grid
- 格線模組Manipulation
- 幻燈片操作模組 (僅適用於核心版本)Zoom
- 縮放模組Controller
- 控制器模組A11y
- 無障礙模組History
- 歷史導覽模組HashNavigation
- Hash 導覽模組Autoplay
- 自動播放模組EffectFade
- 淡入淡出效果模組EffectCube
- 立方體效果模組EffectFlip
- 翻轉效果模組EffectCoverflow
- Coverflow 效果模組EffectCards
- 卡片效果模組EffectCreative
- Creative 效果模組Thumbs
- 縮圖模組<template>
<swiper
:modules="modules"
:slides-per-view="3"
:space-between="50"
navigation
:pagination="{ clickable: true }"
:scrollbar="{ draggable: true }"
@swiper="onSwiper"
@slideChange="onSlideChange"
>
<swiper-slide>Slide 1</swiper-slide>
<swiper-slide>Slide 2</swiper-slide>
<swiper-slide>Slide 3</swiper-slide>
...
</swiper>
</template>
<script>
// import Swiper core and required modules
import { Navigation, Pagination, Scrollbar, A11y } from 'swiper/modules';
// Import Swiper Vue.js components
import { Swiper, SwiperSlide } from 'swiper/vue';
// Import Swiper styles
import 'swiper/css';
import 'swiper/css/navigation';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
// Import Swiper styles
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
const onSwiper = (swiper) => {
console.log(swiper);
};
const onSlideChange = () => {
console.log('slide change');
};
return {
onSwiper,
onSlideChange,
modules: [Navigation, Pagination, Scrollbar, A11y],
};
},
};
</script>
navigation.nextEl
、pagination.el
等),Swiper Vue 組件將會為導覽、分頁和滾動條建立所需的元素Swiper 套件包含不同的 CSS、Less 和 SCSS 樣式集
swiper/css
- 僅核心 Swiper 樣式swiper/css/bundle
- 所有 Swiper 樣式,包括所有模組樣式 (例如導覽、分頁等)模組樣式 (如果您已匯入捆綁樣式,則不需要)
swiper/css/a11y
- A11y 模組所需的樣式swiper/css/autoplay
- 自動播放模組所需的樣式swiper/css/controller
- 控制器模組所需的樣式swiper/css/effect-cards
- 卡片效果模組所需的樣式swiper/css/effect-coverflow
- Coverflow 效果模組所需的樣式swiper/css/effect-creative
- Creative 效果模組所需的樣式swiper/css/effect-cube
- 立方體效果模組所需的樣式swiper/css/effect-fade
- 淡入淡出效果模組所需的樣式swiper/css/effect-flip
- 翻轉效果模組所需的樣式swiper/css/free-mode
- 自由模式模組所需的樣式swiper/css/grid
- 格線模組所需的樣式swiper/css/hash-navigation
- Hash 導覽模組所需的樣式swiper/css/history
- 歷史模組所需的樣式swiper/css/keyboard
- 鍵盤模組所需的樣式swiper/css/manipulation
- 操作模組所需的樣式swiper/css/mousewheel
- 滑鼠滾輪模組所需的樣式swiper/css/navigation
- 導覽模組所需的樣式swiper/css/pagination
- 分頁模組所需的樣式swiper/css/parallax
- 視差模組所需的樣式swiper/css/scrollbar
- 滾動條模組所需的樣式swiper/css/thumbs
- 縮圖模組所需的樣式swiper/css/virtual
- 虛擬模組所需的樣式swiper/css/zoom
- 縮放模組所需的樣式對於 Less 樣式,請在匯入路徑中將 css
替換為 less
,例如
import 'swiper/less';
import 'swiper/less/navigation';
import 'swiper/less/pagination';
對於 SCSS 樣式,請在匯入路徑中將 css
替換為 scss
,例如
import 'swiper/scss';
import 'swiper/scss/navigation';
import 'swiper/scss/pagination';
Swiper
Vue.js 組件會接收所有 Swiper 參數 作為組件 props,外加一些額外的 props
Prop | 類型 | 預設值 | 描述 |
---|---|---|---|
tag | 字串 | 'div' | 主要的 Swiper 容器 HTML 元素標籤 |
wrapperTag | 字串 | 'div' | 字串 |
Swiper 組件支援所有 Swiper 事件,包括額外的 swiper
事件,該事件會盡快傳回 swiper 執行個體。例如
<swiper @swiper="..." @slideChange="..." @reachEnd="..." ...></swiper>
Prop | 類型 | 預設值 | 描述 |
---|---|---|---|
tag | 字串 | 'div' | 字串 |
zoom | 布林值 | false | 啟用縮放模式所需的額外包裝器 |
virtualIndex | 數字 | 實際的 swiper 幻燈片索引。必須為虛擬幻燈片設定 |
SwiperSlide
組件具有以下插槽 props
isActive
- 當目前幻燈片為活動狀態時為 trueisPrev
- 當目前幻燈片為活動狀態的前一張幻燈片時為 trueisNext
- 當目前幻燈片為活動狀態的下一張幻燈片時為 trueisVisible
- 當目前幻燈片可見時為 true (必須啟用 watchSlidesProgress
Swiper 參數)isDuplicate
- 當目前幻燈片為重複幻燈片時為 true (啟用 loop
模式時)。例如<swiper>
<swiper-slide v-slot="{ isActive }">
<div>Current slide is {{ isActive ? 'active' : 'not active' }}</div>
</swiper-slide>
</swiper>
Swiper Vue 提供 useSwiper
hook,以便在 Swiper 內的組件中輕鬆取得 Swiper 執行個體
<!-- some-inner-component.vue -->
<template>
<button @click="swiper.slideNext()">Slide to the next slide</button>
</template>
<script>
import { useSwiper } from 'swiper/vue';
export default {
setup() {
const swiper = useSwiper();
return {
swiper,
};
},
};
</script>
useSwiperSlide
是另一個 hook,用於 Swiper 幻燈片內的組件以取得幻燈片資料 (與 SwiperSlide 插槽 props 中的資料相同)
<!-- some-inner-component.vue -->
<template>
<p>Current slide is {{swiperSlide.isActive ? 'active' : 'not active'}}</p>
</template>
<script>
import { useSwiperSlide } from 'swiper/vue';
export default {
setup() {
const swiperSlide = useSwiperSlide();
return {
swiperSlide,
};
},
};
</script>
Swiper Vue.js 組件使用「插槽」來進行內容分發。有 4 個可用的插槽
container-start
- 元素將會新增至 swiper-container 的開頭container-end
(預設) - 元素將會新增至 swiper-container 的結尾wrapper-start
- 元素將會新增至 swiper-wrapper 的開頭wrapper-end
- 元素將會新增至 swiper-wrapper 的結尾例如
<swiper>
<swiper-slide>Slide 1</swiper-slide>
<swiper-slide>Slide 2</swiper-slide>
<template v-slot:container-start><span>Container start</span></template>
<template v-slot:container-end><span>Container end</span></template>
<template v-slot:wrapper-start><span>Wrapper start</span></template>
<template v-slot:wrapper-end><span>Wrapper end</span></template>
</swiper>
將會呈現為
<div class="swiper">
<span>Container start</span>
<div class="swiper-wrapper">
<span>Wrapper start</span>
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<span>Wrapper end</span>
</div>
<span>Container end</span>
</div>
此處的虛擬幻燈片呈現完全由 Vue.js 處理,除了在幻燈片上設定 :virtual="true"
屬性和設定 virtualIndex
之外,不需要任何其他設定
<template>
<swiper :modules="[Virtual]" :slides-per-view="3" :space-between="50" virtual>
<swiper-slide
v-for="(slideContent, index) in slides"
:key="index"
:virtualIndex="index"
>{{slideContent}}</swiper-slide
>
</swiper>
</template>
<script>
import { Virtual } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/vue';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
// Create array with 1000 slides
const slides = Array.from({ length: 1000 }).map(
(el, index) => `Slide ${index + 1}`
);
return {
slides,
Virtual,
};
},
};
</script>
控制器需要將一個 Swiper 執行個體傳遞到另一個執行個體
<template>
<!-- Main Swiper -> pass controlled swiper instance -->
<swiper
:modules="[Controller]"
:controller="{ control: controlledSwiper }"
...
>
...
</swiper>
<!-- Controlled Swiper -> store swiper instance -->
<swiper :modules="[Controller]" @swiper="setControlledSwiper" ...>
...
</swiper>
</template>
<script>
import { ref } from 'vue';
import { Controller } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/vue';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
const controlledSwiper = ref(null);
const setControlledSwiper = (swiper) => {
controlledSwiper.value = swiper;
};
return {
Controller,
controlledSwiper,
setControlledSwiper,
};
},
};
</script>
對於雙向控制 (當兩個 Swiper 互相控制時),它應該像這樣
<template>
<swiper
:modules="[Controller]"
@swiper="setFirstSwiper"
:controller="{ control: secondSwiper }"
...
>
...
</swiper>
<swiper
:modules="[Controller]"
@swiper="setSecondSwiper"
:controller="{ control: firstSwiper }"
...
>
...
</swiper>
</template>
<script>
import { ref } from 'vue';
import { Controller } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/vue';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
const firstSwiper = ref(null);
const secondSwiper = ref(null);
const setFirstSwiper = (swiper) => {
firstSwiper.value = swiper;
};
const setSecondSwiper = (swiper) => {
secondSwiper.value = swiper;
};
return {
Controller,
firstSwiper,
secondSwiper,
setFirstSwiper,
setSecondSwiper,
};
},
};
</script>
與控制器相同,我們需要儲存縮圖執行個體並將其傳遞到主圖庫
<template>
<!-- Main Swiper -> pass thumbs swiper instance -->
<swiper :modules="[Thumbs]" :thumbs="{ swiper: thumbsSwiper }" ...>
...
</swiper>
<!-- Thumbs Swiper -> store swiper instance -->
<!-- It is also required to set watchSlidesProgress prop -->
<swiper
:modules="[Thumbs]"
watch-slides-progress
@swiper="setThumbsSwiper"
...
>
...
</swiper>
</template>
<script>
import { ref } from 'vue';
import { Thumbs } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/vue';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
const thumbsSwiper = ref(null);
const setThumbsSwiper = (swiper) => {
thumbsSwiper.value = swiper;
};
return {
Thumbs,
thumbsSwiper,
setThumbsSwiper,
};
},
};
</script>
以下效果可用
若要使用效果,您必須先匯入並安裝它們 (與所有其他模組一樣)。
您可以在這裡找到正在執行的效果示範。
<template>
<swiper :modules="[EffectFade]" effect="fade">
<swiper-slide>Slide 1</swiper-slide>
<swiper-slide>Slide 2</swiper-slide>
<swiper-slide>Slide 3</swiper-slide>
...
</swiper>
</template>
<script>
import { EffectFade } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/vue';
import 'swiper/css';
import 'swiper/css/effect-fade';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
return {
EffectFade,
};
},
};
</script>
如您所見,將 Swiper 整合到您的網站或應用程式中非常容易。所以這裡有您的下一步驟