Swiper是一個功能豐富的“滑動特效”外掛: 常用的tab切換,banner切換等等,包含各種切換特效,看Demo就非常炫酷。同時,也提供了主流的框架元件版本。然而,最新版的Vue元件只支援在Vue3中使用。查詢資料後實踐,記錄一個Vue2中的使用方式。 Swiper的官網介紹也比較清楚,英文官網中是最新的版本的內容,沒有找到舊版的文件內容,中文官網可以看到舊版的文件。
一、Swiper 在Vue2 中的使用方法
最新的Swiper只支援Vue3,所以在 Vue2上要安裝舊版本
第一步:npm 安裝正確的版本
npm i [email protected] [email protected]
第二步:在對應的Vue頁面中引用庫
這裡其實是使用vue-awesome-swiper
庫對swiper的封裝
import { Swiper, SwiperSlide } from 'vue-awesome-swiper' import 'swiper/css/swiper.css' // 新增元件 components: { Swiper, SwiperSlide, },
第三步:在頁面上使用元件,並對元件新增設定,swiperOption屬性設定見後文
<swiper :options="swiperOption"> <swiper-slide>Slide 1</swiper-slide> <swiper-slide>Slide 2</swiper-slide> <swiper-slide>Slide 3</swiper-slide> <swiper-slide>Slide 4</swiper-slide> <swiper-slide>Slide 5</swiper-slide> <swiper-slide>Slide 6</swiper-slide> <swiper-slide>Slide 7</swiper-slide> </swiper>
二、Swiper 相關引數和事件(options的配置)
相關引數和事件參考中文網站中舊版api。該文件是Swiper 4.X - 7.X
的api ,但是這裡是[email protected]
版本,大部分api是通用的,7上只是略有區別,看文件時注意區分即可。
注意:
該元件事件的監聽有一些坑,透過監聽點選某個slider事件進行說明。
監聽事件可以直接寫在元件的標籤中,如<swiper :options="swiperOption" @tap="test">
, 這樣在test方法中就可以收到點選回撥。然而,當我們想獲取點選某個slide時,卻發現在該方法中無法獲取到swiper物件,進而無法使用swiper物件的activeIndex屬性
獲取到當前點選的slide位置。
若要想獲取該swiper例項,則需要將監聽配置到on引數中:
swiperOption: { on: { // 該方法中的this都指代swiper本身 tap: function () { console.log('點選的位置', this.activeIndex); } } }
注意這裡也不能寫成箭頭函式,會更改this的指向。
三、簡單的例子:中間大兩邊小的輪播
效果如圖:
初始載入
可設定loop
屬性讓初始載入即兩邊都有slide,詳見下方程式碼loop
屬性註釋
滾動後
完整程式碼如下,主要是配置相關的樣式,具體引數含義註釋在程式碼中了:
<template> <div> <div class="swiper"> <swiper :options="swiperOption"> <swiper-slide>Slide 1</swiper-slide> <swiper-slide>Slide 2</swiper-slide> <swiper-slide>Slide 3</swiper-slide> <swiper-slide>Slide 4</swiper-slide> <swiper-slide>Slide 5</swiper-slide> <swiper-slide>Slide 6</swiper-slide> <swiper-slide>Slide 7</swiper-slide> </swiper> </div> </div> </template> <script> import { Swiper, SwiperSlide } from 'vue-awesome-swiper' import 'swiper/css/swiper.css' export default { name: 'Main', components: { Swiper, SwiperSlide, }, data() { return { swiperOption: { spaceBetween: 30, slidesPerView: 5, // 一屏顯示的slide個數 centeredSlides: true,// 居中的slide是否標記為active,預設是最左active,這樣樣式即可生效 slideToClickedSlide: true,// 點選的slide會居中 // loop: true,// 迴圈播放, 可有無限滾動效果,初始載入即是滾動後的效果 on: { // 該方法中的this都指代swiper本身 tap: function () { console.log('點選的位置', this.activeIndex); } } }, } }, mounted() { }, methods: { test(e) { // 預設會$event物件 console.log(11,e); } }, } </script> <style lang="less" scoped> .swiper { width: 100%; height: 50px; bottom: 10px; position: absolute; background-color: darkred; } .swiper-container { width: 100%; height: 100%; } .swiper-slide { text-align: center; font-size: 18px; background: #fff; /* Center slide text vertically */ display: -webkit-box; display: -ms-flexbox; display: -webkit-flex; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; transition: 300ms; transform: scale(0.5); } .swiper-slide-active, .swiper-slide-duplicate-active { background-color: aqua; transform: scale(1); } </style>