怎么在Vue中使用better-scroll实现轮播图

这篇文章将为大家详细讲解有关怎么在Vue中使用better-scroll实现轮播图,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

better-scroll 是什么

better-scroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件。它的核心是借鉴的 iscroll 的实现,它的 API 设计基本兼容 iscroll,在 iscroll 的基础上又扩展了一些 feature 以及做了一些性能优化。

better-scroll 是基于原生 JS 实现的,不依赖任何框架。它编译后的代码大小是 63kb,压缩后是 35kb,gzip 后仅有 9kb,是一款非常轻量的 JS lib。

今天我们利用它实现一个横向滚动——轮播图组件。演示如下:

首先来整理一下需求:

  • 能够根据异步请求到的图片数据进行轮播图展示。

  • 能够控制它是否自动播放,是否循环播放,自动播放间隔。

  • 能够提示当前播放页。

Mock数据

由于是一个demo,从网上找了几张图片写成json格式,数据用于模拟接口数据。这里用到了mock.js。Axios。安装方法如下:

npm install mockjs

npm install --save axios vue-axios

axios使用方法不多赘述,简述一下mock数据。在mock文件夹下新建json文件夹放置json数据文件。新建index.js导出接口。就可以使用axios请求接口了。

[
	"https://img3.mukewang.com/szimg/5df8852609e0762d12000676-360-202.png",
"https://img1.mukewang.com/szimg/5d9c62fb0907ccf012000676-360-202.png",
"https://img3.mukewang.com/5aeecb1d0001e5ea06000338-360-202.jpg"
]
constMock=require('mockjs')

Mock.mock('/slider','get',require('./json/slider.json'))

基础组件:slider.vue

将轮播图组件抽象出来,接收isLoop、isAutoPlay、interval属性控制轮播图。从mounted方法调用顺序可以知道思路是

  • setSliderWidth()中先获取再设置显示层和图片包裹层高度。

  • initDots()根据图片包裹层子元素的个数设置数组放置圆点。

  • initSlider()初始化better-scroll。

  • autoPlay()设置自动播放。




importBScrollfrom'better-scroll'
exportdefault{
data(){
return{
dots:[],
currentIndex:0/*当前页下标*/
}
},
props:{
isLoop:{/*循环播放*/
type:Boolean,
default:true
},
isAutoPlay:{/*自动播放*/
type:Boolean,
default:true
},
interval:{/*播放间隔*/
type:Number,
default:2000
}
},
mounted(){/*mounted阶段dom渲染完,20ms确保刷新*/
setTimeout(()=>{
this.setSliderWidth()
this.initDots()
this.initSlider()
if(this.isAutoPlay){
this.autoPlay()
}
},20)
},
methods:{
setSliderWidth(){/*获取显示层宽度,计算内容层宽度*/
constclientWidth=this.$refs.slider.clientWidth
letsliderWidth=0
this.children=this.$refs.group.children
for(leti=0;i{
constpageIndex=this.slider.getCurrentPage().pageX/*获取当前轮播页,用于圆点提示*/
this.currentIndex=pageIndex
if(this.isAutoPlay){
clearTimeout(this.timer)/*重新设置自动播放,否则无法自动播放*/
this.autoPlay()
}
})
},
autoPlay(){
this.timer=setTimeout(()=>{
this.slider.next(400)
},this.interval)
}
},
destroyed(){/*确保清除定时器*/
clearTimeout(this.timer)
}
}



.slider-apply
positionrelative//让dots找准位置
height200px
width100%//slider-apply会依据父元素宽度显示宽度
overflowhidden//超出元素隐藏
border-radius5px
.dots
positionabsolute
bottom10px
left50%
transformtranslate(-50%,0)//居中
displayflex
.dot
margin010px
height7px
width7px
background#fff
border-radius50%
.active//当前dot样式
width15px
border-radius50%5px

应用组件:slider-apply.vue

可以根据alider-apply.vue中的使用方法应用在自己的项目中。




importSliderfrom'base/slider'
exportdefault{
data(){
return{
imageList:[],//图片列表
showSlider:false//显示slider标志位
}
},
created(){
this.getImages()//获取数据
},
methods:{
getImages(){
this.axios.get('/slider').then((res)=>{
this.imageList=res.data
this.showSlider=true
}).catch((err)=>{
console.log(err)
})
}
},
components:{
Slider
}
}




.slider-wrapper
margin0auto
height200px//固定轮播图显示高度
width500px//固定轮播图显示宽度,可设置百分比
background#000
border-radius5px
.slider-item
floatleft//元素向左浮动
width100%
overflowhidden
text-aligncenter
.img
height200px
width100%

关于怎么在Vue中使用better-scroll实现轮播图就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

发布于 2021-03-21 22:39:11
分享
海报
162
上一篇:如何在Vue中使用vm.$attrs 下一篇:怎么在C#中使用可空类型
目录

    忘记密码?

    图形验证码