Vue2 轮播图slide组件实例代码


Posted in Javascript onMay 31, 2018

Vue2原生始轮播图组件,支持宽度自适应、高度设置、轮播时间设置、左右箭头按钮控制,圆点按钮切换,以及箭头、圆点按钮是否显示。

<v-carousel :slideData="slideData" :height="450" :begin="0" :interval="3000" :dot="true" :arrow="true"></v-carousel>

Vue2 轮播图slide组件实例代码

话不多说直接上源码

轮播图应用页面 \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组件实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于jquery的获取mouse坐标插件的实现代码
Apr 01 Javascript
一个简单的瀑布流效果(主体形式自写)
May 27 Javascript
Extjs单独定义各组件的实例代码
Jun 25 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
Sep 25 Javascript
js定时器怎么写?就是在特定时间执行某段程序
Oct 11 Javascript
判断滚动条到底部的JS代码
Nov 04 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
js数组操作方法总结(必看篇)
Nov 22 Javascript
vue中echarts3.0自适应的方法
Feb 26 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
May 07 Javascript
JavaScript如何把两个数组对象合并过程解析
Oct 10 Javascript
vue 手机物理监听键+退出提示代码
Sep 09 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
May 31 #Javascript
JavaScript 中的12种循环遍历方法【总结】
May 31 #Javascript
Vue 让元素抖动/摆动起来的实现代码
May 31 #Javascript
angular2路由之routerLinkActive指令【推荐】
May 30 #Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
May 30 #jQuery
Vue2.0 实现移动端图片上传功能
May 30 #Javascript
jQuery 导航自动跟随滚动的实现代码
May 30 #jQuery
You might like
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
laravel-admin 实现在指定的相册下添加照片
2019/10/21 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
php array_map()函数实例用法
2021/03/03 PHP
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
js数组的基本使用总结
2021/01/18 Javascript
深入Python函数编程的一些特性
2015/04/13 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
python交互式图形编程实例(一)
2017/11/17 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
python三引号如何输入
2020/07/06 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
企划主管岗位职责
2013/12/12 职场文书
高级护理专业毕业生推荐信
2013/12/25 职场文书
就业协议书样本
2014/08/20 职场文书
公司授权委托书范本
2014/09/18 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
使用MybatisPlus打印sql语句
2022/04/22 SQL Server