最近在刷网易云音乐歌单时发现首页的轮播图很有意思,正好自己想尝试做一个PC版的网易云音乐,于是就是使用Vue去做这个demo,废话少说,我要出招了,接招吧
页面的DOM结构
1 | <template> |
Slider-container的样式(Stylus)
1 | .slider-container |
这个子组件主要分为两块。
- 轮播图,其中它们的业务逻辑是
- 自动切换
- 左右icon切换轮播图
- 点击前后轮播图切换轮播图
- 鼠标滑动到轮播图停止轮播,离开后继续轮播
Slider-content的DOM结构
1 | <div class="slider-content" :class="mask ? 'mask' : ''"> |
Slider-content的样式(Stylus)
1 | .slider-content |
- 底部的dot, 其中它们的业务逻辑是
- 当前轮播图对应位置的dot高亮
- 鼠标移动到相应的dot上切换对应位置的轮播图
Dots的DOM结构
1 | <div class="dots" v-if="dots"> |
Dots的样式(Stylus)
1 | .dots |
上面是页面的DOM结构和表现的实现代码,接下来我们要讲的是连招的实现,小心啦,我要摸眼W + R3了。
上面我们讲到轮播图的业务逻辑,接下来,我们就讲讲如何实现的的吧
自动轮播
1
2
3
4
5
6
7
8play () {
this.pause();
if (this.autoPlay) {
this.timer = setInterval(()=>{
this.next();
}, this.interval)
}
}
暂停轮播
1
2
3pause () {
clearInterval(this.timer);
}
Icon切换轮播图
1
2
3
4
5
6next () {
this.currentIndex = ++this.currentIndex % this.list.length;
},
prev () {
this.currentIndex = this.currentIndex === 0 ? this.list.length - 1 : this.currentIndex - 1;
},
前后轮播图的切换轮播图
1
2
3
4
5
6
7
8
9
10
11
12
13onClick (i) {
if (i === this.currentIndex){
this.$emit('sliderClick', i);
} else {
let currentClickClassName = this.sliderDomList[i].className.split(' ')[1]
console.log(currentClickClassName)
if (currentClickClassName === 'next') {
this.next()
} else {
this.prev()
}
}
}
dots轮播图的切换轮播图
这里比较简单,只需要设置它的鼠标事件即可1
"currentIndex = index" =
代码传送门:Vue网易云音乐轮播图的实现
到这里,基本上我们提出的业务逻辑原理都已经实现了,到时候我会将代码整理完了commit到github上,现在正在整理ing,谢谢。
代码传送门:Vue网易云音乐轮播图的实现