版本選擇
swiper是個常用的插件,現在已經迭代到了第四代:swiper4。
常用的版本是swiper3和swiper4,我選擇的是swiper3。
安裝
安裝swiper3的最新版本3.4.2:
npm i swiper@3.4.2 -S
這里一個小知識,查看node包的所有版本號的方法:
npm view 包名 versions
組件編寫
swiper官方的使用方法分為4個流程:
我也按照這個流程編寫組件:
加載插件
import Swiper from 'swiper';import 'swiper/dist/css/swiper.min.css';
HTML內容
<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定義一個大小
.swiper-container { width: 600px; height: 300px;}初始化Swiper
因為dom渲染完成才能初始化Swiper,所以必須將初始化放入vue的生命周期鉤子函數mounted中:
mounted(): { /* eslint-disable no-new */ new Swiper('.swiper-container', {})}以上代碼中的/* eslint-disable no-new */是啟用的eslint代碼檢測的項目可以使用,如果沒有使用eslint可用使用一下代碼:
mounted(): { var mySwiper = new Swiper('.swiper-container', {})}完成
將以上的代碼合并起來:
<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>運行,你看可以實現輪播圖的效果了。但是到此為止只實現了輪播的效果,還沒有對數據的渲染。
對數據的渲染
在實際項目中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插件。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答