swiper是個經常使用的插件,如今已經迭代到了第四代:swiper4。
經常使用的版本是swiper3和swiper4,我選擇的是swiper3。css
安裝swiper3的最新版本3.4.2:vue
npm i swiper@3.4.2 -S
這裏一個小知識,查看node包的全部版本號的方法:node
npm view 包名 versions
swiper官方的使用方法分爲4個流程:ios
我也按照這個流程編寫組件:ajax
import Swiper from 'swiper'; import 'swiper/dist/css/swiper.min.css';
<template> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> </div> <!-- 若是須要分頁器 --> <div class="swiper-pagination"></div> <!-- 若是須要導航按鈕 --> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> <!-- 若是須要滾動條 --> <div class="swiper-scrollbar"></div> </div> </template>
.swiper-container { width: 600px; height: 300px; }
由於dom渲染完成才能初始化Swiper,因此必須將初始化放入vue的生命週期鉤子函數mounted中:npm
mounted(): { /* eslint-disable no-new */ new Swiper('.swiper-container', {}) }
以上代碼中的/* eslint-disable no-new */
是啓用的eslint代碼檢測的項目可使用,若是沒有使用eslint可用使用一下代碼:json
mounted(): { var mySwiper = new Swiper('.swiper-container', {}) }
將以上的代碼合併起來:axios
<template> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> </div> <!-- 若是須要分頁器 --> <div class="swiper-pagination"></div> <!-- 若是須要導航按鈕 --> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> <!-- 若是須要滾動條 --> <div class="swiper-scrollbar"></div> </div> </template> <script> import Swiper from 'swiper'; import 'swiper/dist/css/swiper.min.css'; export default { mounted(): { var mySwiper = new Swiper('.swiper-container', {}) } } </script> <style> .swiper-container { width: 600px; height: 300px; } </style>
運行,你看能夠實現輪播圖的效果了。可是到此爲止只實現了輪播的效果,尚未對數據的渲染。bash
在實際項目中swiper插件經常使用於實現banner圖的效果(新浪手機版):數據結構
我用在vue項目中經常使用ajax插件axios來示例:
axios .get('/user?ID=12345') .then(function (response) { this.imgList = response; }) .catch(function (error) { console.log(error); });
將獲取數據的數據結構規定爲:
[ "https://www.baidu.com/img/baidu_jgylogo3.gif", "https://www.baidu.com/img/baidu_jgylogo3.gif", "https://www.baidu.com/img/baidu_jgylogo3.gif", "https://www.baidu.com/img/baidu_jgylogo3.gif", "https://www.baidu.com/img/baidu_jgylogo3.gif" ]
<template> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide" v-for="item in imgList" :style="{backgroundImage: 'url(' + item + ')'}"></div> </div> <!-- 若是須要分頁器 --> <div class="swiper-pagination"></div> <!-- 若是須要導航按鈕 --> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> <!-- 若是須要滾動條 --> <div class="swiper-scrollbar"></div> </div> </template> <style> .swiper-slide { width: 100%; height: 400px; } <style>
到此爲止已經將數據渲染完成了,可是查看實際效果,彷佛banner沒法實現輪播圖的效果啊。這裏只是將圖片渲染了出來,可是渲染出輪播圖並無被初始化。由於初始化已經在生命週期mounted時完成了。
因此在獲取數據且DOM更新後,須要從新初始化swiper。
axios .get('/user?ID=12345') .then(function (response) { // 獲取數據更新 this.imgList = response; // DOM尚未更新 this.$nextTick(() => { // DOM更新了 // swiper從新初始化 /* eslint-disable no-new */ new Swiper('.swiper-container', {}) }) }) .catch(function (error) { console.log(error); });
到此,輪播圖的效果實現了。
swiper是咱們平時很經常使用的插件,但將swiper導入vue項目中遇到的問題很多。最主要的問題是要搞懂vue的生命週期,這樣纔能有效地使用各類js插件。