Vue 實(shí)現(xiàn)從小到大的橫向滑動(dòng)效果詳解
本文實(shí)例講述了Vue 實(shí)現(xiàn)從小到大的橫向滑動(dòng)效果。分享給大家供大家參考,具體如下:
最近項(xiàng)目中遇到一個(gè)需求,需要實(shí)現(xiàn)橫向滑動(dòng),并且在滑動(dòng)過程中,中間的大,兩邊的小,通過參考其他的人代碼以及自己的實(shí)踐,終于做出來(lái)啦,給大家做個(gè)參考。
實(shí)現(xiàn)效果如下圖:

先來(lái)說一下實(shí)現(xiàn)思路吧:
整體思路:采用vue+vue-awesome-swiper完成
因?yàn)槲覀兊捻?xiàng)目是采用vue來(lái)做的,所以在經(jīng)過很多的考量和比較以后,選擇了vue-awesome-swiper插件來(lái)輔助,從這個(gè)名字上也能看出,這個(gè)插件是支持vue的,使用起來(lái)也非常方便。
第一步:下載插件vue-awesome-swiper
可以在命令行直接下載,下載命令:npm install vue-awesome-swiper --save,進(jìn)行全局保存,下載完成后查看一下你下載的版本,我下載后版本是3.1.3,不同的版本之間可能使用上會(huì)有一點(diǎn)細(xì)微的差別,可以參考官方文檔。
第二步:在vue文件中引入插件
第一步安裝成功后,插件就可以在vue中使用啦,在這里有兩種引入方法。
- 第一種,全局引入
打開main.js文件,在里面加入以下代碼,這樣在后面開發(fā)單獨(dú)的vue文件的時(shí)候,就不需要再去單獨(dú)導(dǎo)入了,這里路徑是固定的,直接復(fù)制就可以,這里的common.css是自己實(shí)現(xiàn)的,這個(gè)文件的用處后面講。
import Vue from 'vue' import VueAwesomeSwiper from 'vue-awesome-swiper' import 'swiper/dist/css/swiper.css' import '../src/assets/common.css' Vue.use(VueAwesomeSwiper);
- 第二種,局部插件引入
局部引入的話,就在你自己的vue文件中引入就可以了,引入方法如下:
說明:是否需要引入css文件需要看下載插件版本,如果是3以上,是不需要單獨(dú)引入css文件的,如果是3以下,需要單獨(dú)引入。
import 'swiper/dist/css/swiper.css'
import { swiper, swiperSlide } from 'vue-awesome-swiper'
export default {
components: {
swiper,
swiperSlide
}
第三步:?jiǎn)为?dú)開發(fā)swiper的vue控件(這里以全局引入的方法為例) BannerSwiper.vue
<template>
<!--滑動(dòng)banner -->
<div class="swiperbanner_container">
<swiper :options="swiperOption" ref="mySwiper">
<swiper-slide v-for="(item,index) in BannerList" :key="item.bannerid">
<img :src="item.imgurl" alt="" class="banner_img">
</swiper-slide>
</swiper>
<div class="swiper-pagination"></div>
</div>
</template>
<script>
import bannerurl1 from '../../assets/mall/banner.png'
import bannerurl2 from '../../assets/smart/holiday.png'
import bannerurl3 from '../../assets/smart/leave_home.png'
export default {
name: "SwiperBanner",
data() {
return {
swiperOption:{
direction:'horizontal',
spaceBetween:10,
observeParents: true, //觀察父組件,當(dāng)父組件變化時(shí),自己隨著變化
observer: true, //觀察自己,自己的參數(shù)變化時(shí),更新
centeredSlides:true, //設(shè)置為true時(shí),活動(dòng)塊居中顯示,默認(rèn)下居左顯示
loop:true, //滑動(dòng)過程中會(huì)在前后復(fù)制多個(gè)slider,效果看起來(lái)是循環(huán)的
loopedSlides:3, //設(shè)置滑動(dòng)過程中所要用到的loop個(gè)數(shù)
slidesPerView:'auto', //同時(shí)顯示的slide數(shù)量
loopAdditionalSlides:100,
autoPlay:{
delay:3000,
disableOnInteraction:false //鼠標(biāo)移動(dòng)上去時(shí)是否繼續(xù)播放
},
pagination : '.swiper-pagination',
paginationType : 'bullets',
paginationElement:'span'
}
}
},
props:{
BannerList:{
type:Array,
default:function(){
return [
{
bannerid:0,
imgurl:bannerurl1,
bannerlink:''
},{
bannerid:1,
imgurl:bannerurl2,
bannerlink:''
},{
bannerid:2,
imgurl:bannerurl3,
bannerlink:''
}
]
}
}
},
methods: {
},
computed: {
swiper() {
return this.$refs.mySwiper.swiper
}
},
mounted() {
console.log('this is current swiper instance object', this.swiper)
this.swiper.slideTo(3, 1000, false);
}
}
</script>
<style scoped>
.swiperbanner_container{
width:100%;
height:160px;
overflow: visible !important;
}
.swiper-pagination{
bottom:2px !important;
}
.banner_img{
width:100%;
height:116px;
}
</style>
需要使用到的參數(shù)可以在官方文檔中看到具體的含義,點(diǎn)擊鏈接自行查看。
這里有兩個(gè)參數(shù)需要特別注意:
spaceBetween:10
這個(gè)參數(shù)用于設(shè)置兩個(gè)slide之間的間隙,可根據(jù)自己的項(xiàng)目動(dòng)態(tài)修改
observeParents: true
observer: true
觀察父組件,當(dāng)父組件變化時(shí),自己動(dòng)態(tài)改變,剛開始開發(fā)的時(shí)候我沒有設(shè)置這個(gè)變量,發(fā)現(xiàn)滑動(dòng)的時(shí)候特別不流暢,感覺就是普通的滑動(dòng)效果,無(wú)法劃一下就跳到下一個(gè)完整的slide上去就是因?yàn)檫@個(gè)變量沒有設(shè)置,所以非常重要。
第四步,在需要的文件中引用它,并給他傳值,這里不多說,沒什么特殊性,和普通的引用方法一樣。
第五步,單獨(dú)實(shí)現(xiàn)css樣式。
經(jīng)過了前四步以后,其實(shí)還不能完全實(shí)現(xiàn)效果圖中的樣子,我們還需要手動(dòng)去修改插件中提供的樣式。因?yàn)槲沂侨忠?,所以修改的樣式就放在剛開始說的common.css中。
common.css的內(nèi)容如下:
/**重寫swiper-slider的屬性**/
.swiper-slide{
width:85%;
/*margin-left: 5px;*/
/*margin-right: 5px;*/
}
.swiper-slide-active>img{
height:136px !important;
}
.swiper-slide-prev,.swiper-slide-next{
margin-top:10px;
}
實(shí)現(xiàn)的思路:將中間處于激活狀態(tài)的slide高度放大,其中!important不可省略,要不然會(huì)失效,將兩邊的slide分別向下移動(dòng)一段距離。因?yàn)槲业膕lide中只有一張圖片,所以我直接修改了圖片的高度,如果你的是div的話,你可以換成div的class名稱。
刷新后,就是最開始的實(shí)現(xiàn)效果啦~
不過這里實(shí)現(xiàn)分頁(yè),我發(fā)現(xiàn)vue中設(shè)置分頁(yè)變量不起作用,目前還未解決,等解決了再來(lái)更新,就這樣。
希望本文所述對(duì)大家vue.js程序設(shè)計(jì)有所幫助。
相關(guān)文章
Vue-router 類似Vuex實(shí)現(xiàn)組件化開發(fā)的示例
本篇文章主要介紹了Vue-router 類似Vuex實(shí)現(xiàn)組件化開發(fā)的示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09
vue中的eventBus會(huì)不會(huì)產(chǎn)生內(nèi)存泄漏你知道嗎
這篇文章主要為大家詳細(xì)介紹了vue中的eventBus會(huì)不會(huì)產(chǎn)生內(nèi)存泄漏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02
vue項(xiàng)目Network: unavailable的問題及解決
這篇文章主要介紹了vue項(xiàng)目Network: unavailable的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
vue將單頁(yè)面改造成多頁(yè)面應(yīng)用的方法
最近領(lǐng)導(dǎo)交我一個(gè)項(xiàng)目是使用 vue-cli 搭建的單頁(yè)面應(yīng)用。下面小編通過本文給大家介紹vue將單頁(yè)面改造成多頁(yè)面應(yīng)用的方法 ,感興趣的朋友一起看看吧2018-11-11
element中el-table中的el-input校驗(yàn)的實(shí)現(xiàn)
本文主要介紹了element中el-table中的el-input校驗(yàn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
在vue中更換字體,本地存儲(chǔ)字體非引用在線字體庫(kù)的方法
今天小編就為大家分享一篇在vue中更換字體,本地存儲(chǔ)字體非引用在線字體庫(kù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-09-09

