Vue使用Swiper的案例詳解
Vue使用Swiper看這一篇就夠了
此案例實(shí)現(xiàn)需求
- 完成swiper動(dòng)態(tài)異步數(shù)據(jù)下的slide渲染
- 自定義分頁(yè)器樣式
- 解決loop:true設(shè)置時(shí)的事件丟失問(wèn)題
- swiper鼠標(biāo)移入/移出 暫停/開始輪播
- 單頁(yè)面渲染多個(gè)swiper組件互不影響
1、引入swiper
npm i swiper@5.2.0
2、創(chuàng)建輪播圖組件CarouselContainer.vue,詳細(xì)解析在代碼注釋中
<template> <div class="CarouselContainer" @mouseenter="stopAutoPlay" @mouseleave="startAutoPlay"> <div ref="mySwiper" class="swiper-container" :id="currentIndex" > <div class="swiper-wrapper"> <div class="swiper-slide my-swiper-slide" v-for="(item,index) of slideList" :key="index">{{item.name}}</div> </div> <!-- 分頁(yè)器 --> <div class="swiper-pagination"></div> <!--導(dǎo)航器--> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> </div> </div> </template> <script> import Swiper from 'swiper' import "swiper/css/swiper.css"; export default { name: 'CarouselContainer', props: ['slideList','currentIndex'], data(){ return { currentSwiper:null, } }, watch:{ //slide數(shù)據(jù)發(fā)生變化時(shí),更新swiper slideList:{ deep:true, // eslint-disable-next-line handler(nv,ov){ console.log("數(shù)據(jù)更新了") this.updateSwiper() } } }, mounted() { this.initSwiper() }, methods:{ //鼠標(biāo)移入暫停自動(dòng)播放 stopAutoPlay() { this.currentSwiper.autoplay.stop() }, //鼠標(biāo)移出開始自動(dòng)播放 startAutoPlay() { this.currentSwiper.autoplay.start() }, //初始化swiper initSwiper(){ // eslint-disable-next-line let vueComponent=this//獲取vue組件實(shí)例 //一個(gè)頁(yè)面有多個(gè)swiper實(shí)例時(shí),為了不互相影響,綁定容器用不同值或變量綁定 this.currentSwiper = new Swiper('#'+this.currentIndex, { loop: true, // 循環(huán)模式選項(xiàng) autoHeight:'true',//開啟自適應(yīng)高度,容器高度由slide高度決定 //分頁(yè)器 pagination: { el: '.swiper-pagination', clickable:true,//分頁(yè)器按鈕可點(diǎn)擊 }, on: { //此處this為swiper實(shí)例 //切換結(jié)束獲取slide真實(shí)下標(biāo) slideChangeTransitionEnd: function(){ console.log(vueComponent.$props.currentIndex+"號(hào)swiper實(shí)例真實(shí)下標(biāo)",this.realIndex) }, //綁定點(diǎn)擊事件,解決loop:true時(shí)事件丟失 // eslint-disable-next-line click: function(event){ console.log("你點(diǎn)擊了"+vueComponent.$props.currentIndex+"號(hào)swiper組件") } }, //導(dǎo)航器 navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, autoplay: { //自動(dòng)播放,不同版本配置方式不同 delay: 3000, stopOnLastSlide: false, disableOnInteraction: false }, slidesPerView: 1, //視口展示slide數(shù)1 slidesPerGroup: 1, //slide數(shù)1頁(yè)一組 }) }, //銷毀swiper destroySwiper(){ try { this.currentSwiper.destroy(true,false) }catch (e) { console.log("刪除輪播") } }, //更新swiper updateSwiper(){ this.destroySwiper() this.$nextTick(()=>{ this.initSwiper() }) }, }, destroyed() { this.destroySwiper() } } </script> <style scoped> .CarouselContainer{ background-color: gray; } /*slide樣式*/ .my-swiper-slide{ height: 300px; background-color: pink; } /*swiper容器樣式*/ .swiper-container { width: 700px; border: 1px solid red; } /*自定義分頁(yè)器按鈕被點(diǎn)擊選中時(shí)的樣式*/ /deep/.swiper-pagination-bullet-active{ background-color: #d5a72f !important; width: 20px; } /*自定義分頁(yè)器按鈕常規(guī)樣式*/ /deep/.swiper-pagination-bullet{ background-color: #9624bf; opacity: 1; width: 20px; } </style>
3、創(chuàng)建父組件App.vue渲染多個(gè)swiper組件、模擬異步數(shù)據(jù)變化
<template> <div id="app"> <!--傳遞不同的currentIndex 作為區(qū)分不同swiper組件的動(dòng)態(tài)id--> <CarouselContainer :slide-list="list" currentIndex="1"></CarouselContainer> <CarouselContainer :slide-list="list" currentIndex="2"></CarouselContainer> </div> </template> <script> import CarouselContainer from './components/CarouselContainer.vue' export default { name: 'App', components: { CarouselContainer, }, data(){ return{ list:[ {name:"aaa"}, {name:"bbb"}, {name:"ccc"}, ] } }, mounted() { let self=this //延時(shí)模擬兩次數(shù)據(jù)變化 setTimeout(()=>{ let obj={name:"ddd"} self.list.push(obj) },5000) setTimeout(()=>{ let obj={name:"eee"} self.list[0].name="AAA" self.list.push(obj) },8000) } } </script> <style scoped> </style>
只需要這兩個(gè)文件就可以vue項(xiàng)目中運(yùn)行demo查看效果了
到此這篇關(guān)于Vue使用Swiper看這一篇就夠了的文章就介紹到這了,更多相關(guān)Vue使用Swiper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue 3.x 中mixin封裝公用方法應(yīng)用方式
這篇文章主要介紹了vue 3.x 中mixin封裝公用方法應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05vue3+elementui-plus實(shí)現(xiàn)一個(gè)接口上傳多個(gè)文件功能
這篇文章主要介紹了vue3+elementui-plus實(shí)現(xiàn)一個(gè)接口上傳多個(gè)文件,先使用element-plus寫好上傳組件,然后假設(shè)有個(gè)提交按鈕,點(diǎn)擊上傳文件請(qǐng)求接口,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07Vue+Element UI實(shí)現(xiàn)概要小彈窗的全過(guò)程
彈窗效果是我們?nèi)粘i_發(fā)中經(jīng)常遇到的一個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于Vue+Element UI實(shí)現(xiàn)概要小彈窗的相關(guān)資料,需要的朋友可以參考下2021-05-05element用腳本自動(dòng)化構(gòu)建新組件的實(shí)現(xiàn)示例
本文主要介紹了element-ui的用腳本自動(dòng)化構(gòu)建新組件的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12