用vue实现轮播图效果

286 阅读1分钟
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style>
* {
margin: 0;
padding: 0;
list-style: none;
}

.index {
display: flex;
position: absolute;
left: 60%;
top: 95%;
}

.index li {
width: 12px;
height: 12px;
margin: 0 10px;
background-color: #fff;
border-radius: 50%;
}

.index li.active {
background: red;
}

.container {
width: 700px;
position: relative;

}
</style>
</head>

<body>
<div id="app">
<div class="container">
<img :src="img" alt="" v-show="i===activeIndex" v-for="(img,i) in list">
<ul class="index">
<li @mouseenter="hover(i)" :class='{active:i===activeIndex}' v-for="(img,i) in list"></li>
</ul>
</div>
</div>
<script>
let vm = new Vue({
el: '#app',
data() {
return {
timer:null,
activeIndex: 0,
list: [
'https://p1.music.126.net/jmSZkitsHu6P2osBGwVEtg==/109951165049297767.jpg?imageView&quality=89',
'https://p1.music.126.net/nhXeKMPCgZZbn1cyowYL_Q==/109951165049323147.jpg?imageView&quality=89',
'https://p1.music.126.net/qFByl2TS77pjEO8Z8fN_kg==/109951165049330063.jpg?imageView&quality=89',
'https://p1.music.126.net/aQfHxFI9b32v19zynGuGiQ==/109951165049233036.jpg?imageView&quality=89',
'https://p1.music.126.net/JvG5vdr7omoTUAwtfmDlNg==/109951165049340661.jpg?imageView&quality=89',
'https://p1.music.126.net/yjlmXhnl8z6Y-R8ybkIpdw==/109951165050136855.jpg?imageView&quality=89',
'https://p1.music.126.net/9GlwjBanTApab4DmKp6Pig==/109951165049975107.jpg?imageView&quality=89'
]
}
},
mounted() {
//DOM初始化完成
this.run()
// setInterval(() => {
// this.activeIndex++
// if (this.activeIndex === this.list.length) {
// this.activeIndex = 0
// }
// }, 2000)
},
methods:{
run() {
this.timer = setInterval(() => {
this.activeIndex++
if (this.activeIndex === this.list.length) {
this.activeIndex = 0
}
}, 2000)
},
hover(i) {
clearInterval(this.timer)
this.activeIndex = i
this.run()
}
}
})
</script>
</body>

</html>