Vue2 轮播图slide组件实例代码
程序员文章站
2023-11-16 11:34:52
vue2原生始轮播图组件,支持宽度自适应、高度设置、轮播时间设置、左右箭头按钮控制,圆点按钮切换,以及箭头、圆点按钮是否显示。
vue2原生始轮播图组件,支持宽度自适应、高度设置、轮播时间设置、左右箭头按钮控制,圆点按钮切换,以及箭头、圆点按钮是否显示。
<v-carousel :slidedata="slidedata" :height="450" :begin="0" :interval="3000" :dot="true" :arrow="true"></v-carousel>
话不多说直接上源码
轮播图应用页面 \components\public\home.vue
<template> <div id="home"> <v-carousel :slidedata="slidedata" :height="450" :begin="0" :interval="3000" :dot="true" :arrow="true"></v-carousel> </div> </template> <script> import carousel from "./public/carousel"; export default { name: 'home', data() { return { slidedata:[ { title:'这是一个vue轮播图组件', src:require('../assets/pic1.jpg'), url:'/show/499' }, { title:'这是一个vue轮播图组件', src:require('../assets/pic2.jpg'), url:'/show/499' }, { title:'这是一个vue轮播图组件', src:require('../assets/pic3.jpg'), url:'/show/499' }, { title:'这是一个vue轮播图组件', src:require('../assets/pic4.jpg'), url:'/show/499' }, { title:'这是一个vue轮播图组件', src:require('../assets/pic5.jpg'), url:'/show/499' }, ] } }, components:{ 'v-carousel': carousel, }, methods: { }, mounted() { } } </script> <style scoped> </style>
轮播图组件页面 src\components\public\carousel.vue
<template> <div id="carousel"> <div class="carousel" ref="carousel" v-bind:style="{height:height+'px'}"> <transition-group tag="ul" class="slide clearfix" :name="transitionname" > <li v-for="(item,index) in slidedata" :key="index" v-show="index==beginvalue" v-bind:style="{height:height+'px'}" > <router-link :to="item.url"> <img :src="item.src"> <div class="title">{{item.title}}</div> </router-link> </li> </transition-group> <div class="up" @click="up" v-show="arrow"></div> <div class="next" @click="next" v-show="arrow"></div> <div class="slidedot" v-show="dot"> <span v-for="(item,index) in slidedata" :class="{active:index==beginvalue}" @click="change(index)" :key="index"></span> </div> </div> </div> </template> <script> export default { name: "carousel", data(){ return{ setinterval:'', beginvalue:0, transitionname:'slide' } }, beforedestroy() { // 组件销毁前,清除监听器 clearinterval(this.setinterval); }, methods:{ change(key){ if(key>(this.slidedata.length-1)){ key=0; } if(key<0){ key=this.slidedata.length-1; } this.beginvalue=key; }, autoplay(){ //console.log(this.$refs.carousel.getboundingclientrect().width); this.transitionname='slide'; this.beginvalue++ if(this.beginvalue>=this.slidedata.length){ this.beginvalue=0; return; } }, play(){ this.setinterval=setinterval(this.autoplay,this.interval) }, mouseover(){ //鼠标进入 //console.log('over') clearinterval(this.setinterval) }, mouseout(){ //鼠标离开 //console.log('out') this.play() }, up(){ //上一页 --this.beginvalue; this.transitionname='slideback'; this.change(this.beginvalue); }, next(){ //下一页 ++this.beginvalue; this.transitionname='slide'; this.change(this.beginvalue); } }, mounted(){ var box = this.$refs.carousel; //监听对象 box.addeventlistener('mouseover',()=>{ this.mouseover(); }) box.addeventlistener('mouseout',()=>{ this.mouseout(); }) this.beginvalue=this.begin; this.play(); }, props:{ height:{ type: number, default: 600 }, dot:{ type: boolean, default: true }, arrow:{ type: boolean, default: true }, interval:{ type: number, default: 5000 }, begin:{ type: number, default: 0 }, slidedata:{ type: array, default: function () { return []; } } } } </script>
<style scoped> .slide{position: relative;margin: 0;padding: 0; overflow: hidden;width: 100%; height:450px;} .slide li{list-style: none;position: absolute;width: 100%; height:450px;} .slide li img{width: 100%; height:450px;cursor:pointer} .slide li .title{position: absolute; left:0; bottom: 0; padding: 10px 20px; width: 100%; background: rgba(0,0,0,.35);color: #fff;font-size: larger; text-align: center} .slidedot{position: absolute;z-index: 999; bottom: 60px;right:15px; } .slidedot span{display: inline-block; width: 30px; height: 7px; background:rgba(255,255,255,.65); margin-left: 5px;} .slidedot span.active{background:rgba(255,255,255,1);} .up,.next{position: absolute; left:0; top: 50%; margin-top: -32px; cursor: pointer; width:64px;height: 64px; background-repeat: no-repeat; background-position: 50% 50%; } .up{background-image: url("data:image/png;base64,ivborw0kggoaaaansuheugaaadaaaaawcayaaabxavmhaaabskleqvroq9xa220cmrcf4xmqib0kdjasscfpidwlazqaelic6sbumnfiywsctb7pjx336v/k3yextbq+ivic4avan8mtjywwrr5rroqdwagaik4kt5b3lgcu4rx7l+tbuwbuxj8b7ej+tad4xys47rokie8drmwnacljwwhr8agajpgwqfz8ccaz3h2qhe8kqih3a1tfuwaq46cb1fftga7xzkcxebogu/wwofv8ekbj/gpa1/grgj4e7jazdwqgtcy9j9asgilfrm9sxpcx/qh4sa7hvqa9wzkc2hrdrnobjv7+g3ai1ycuicfar8qwobvcboiemao6ikyahrdtggqec6as4qaoqrgckhduggxeccateqbiqoqcmhdhggheciaskqaiqqqcihdpgdui57orcqnxjqmxpoafkh24viqixvd4blc3htp8a6pfgkb3vbyxaaaaaelftksuqmcc");} .next{left: auto;right:0;background-image: url("data:image/png;base64,ivborw0kggoaaaansuheugaaadaaaaawcayaaabxavmhaaaboeleqvroq9xa0w0cqqyeyu9jqshqaxssegiduailqad04milezgdoihz4/ggn5c8/n/u060olvy4+8nmngduyavc4whnlupufjazn+xrecals15klgky/y9hpacj2n3hrn+vdk+ksao6erraj4ig6ejqar0iokcnkaeoewuafaiuoecua6orekalqgaoqkgbfqg5gi1oatarbqawohxaqlqdsogpabneniaoyiraduilwgpvxmjgwk+zhvbb/wfg7tv4k4a15u0gpjmbspzqtagixk8byms3a7lxrqbgfbuafd8cymblaex4kaaixgaoipcakupladxxpqbffblafv8cumbtaep4kqajngboiqcaouptgm27emo9j8+we7cl0d9tj5qbgdw+fqllpc54y+uf4bbdxczch9le8dfn39ovaaaaaelftksuqmcc");} .up:hover{background-color: rgba(0,0,0,.3)} .next:hover{background-color: rgba(0,0,0,.3)} /*进入过渡生效时的状态*/ .slide-enter-active{ transform:translatex(0); transition: all 1s ease; } /*进入开始状态*/ .slide-enter{ transform:translatex(-100%); } /*离开过渡生效时的状态*/ .slide-leave-active{ transform:translatex(100%); transition: all 1s ease; } /*离开过渡的开始状态*/ .slide-leave{ transform:translatex(0); } /*进入过渡生效时的状态*/ .slideback-enter-active{ transform:translatex(0); transition: all 1s ease; } /*进入开始状态*/ .slideback-enter{ transform:translatex(100%); } /*离开过渡生效时的状态*/ .slideback-leave-active{ transform:translatex(-100%); transition: all 1s ease; } /*离开过渡的开始状态*/ .slideback-leave{ transform:translatex(0); } </style>
总结
以上所述是小编给大家介绍的vue2 轮播图slide组件实例代码,希望对大家有所帮助
上一篇: 用Jquery选择器计算table中的某一列某一行的合计
下一篇: Vue 样式绑定的实现方法