vue实现轮播图

197 阅读1分钟
<-------------------------html-------------------------------->
<div class="slide" v-on:mouseover="stop()" v-on:mouseout="move()">
    <div class="slideshow">
        <transition-group tag="ul" name="image">
            <li v-for="(imgs, index) in imgArray" v-show="index===mark" :key="imgs">
                <a href="#">
                    <img :src="imgs" />
                </a>
            </li>
        </transition-group>
    </div>
    <div class="bar">
  <span v-for="(item, index) in imgArray" :class="{ 'active':index===mark }"
  @click="change(index)" :key="index"></span>
    </div>
</div>

<-------------方法--------------------->

export default { data() { return { timer: null, //定时器 mark: 0, //比对图片索引的变量 imgArray: [ //图片路径 require('../../assets/img/banners/bannerA.jpg'), require('../../assets/img/banners/bannerB.png'), require('../../assets/img/banners/bannerC.png'), require('../../assets/img/banners/bannerD.png'), ], } },

methods: {
    autoPlay() {
        this.mark++
        if (this.mark === 4) {
            this.mark = 0
        }
    },
    play() {
        this.timer = setInterval(this.autoPlay, 5000)
    },
    change(i) {
        this.mark = i
    },
    stop() {
        clearInterval(this.timer)
    },
    move() {
        this.timer = setInterval(this.autoPlay, 5000)
    },
},
created() {
    this.play()
},
<-------------样式--------------------->
  • { margin: 0; padding: 0; list-style: none; } .slide { width: 100%; height: 500px; margin: 0 auto; overflow: hidden; position: relative; } .slideshow { width: 100%; height: 500px; } .slideshow ul { width: 100%; height: 500px; } li { width: 100%; position: absolute; } .slideshow ul a { display: inline-block; width: 100%; } img { width: 100%; height: 500px; } .bar { position: absolute; width: 100%; bottom: 10px; margin: 0 auto; z-index: 10; text-align: center; } .bar span { width: 10px; height: 10px; border-radius: 50%; background: white; display: inline-block; margin-right: 10px; } .active { background: red !important; } .image-enter-active { transform: translateX(0); transition: all 1.5s ease; } .image-leave-active { transform: translateX(-100%); transition: all 1.5s ease; } .image-enter { transform: translateX(100%); } .image-leave { transform: translateX(0); }