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的loading 加载提示效果实现代码
Sep 01 Javascript
js控制表单奇偶行样式的简单方法
Jul 31 Javascript
extjs_02_grid显示本地数据、显示跨域数据
Jun 23 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
Jun 26 Javascript
VueJS全面解析
Nov 10 Javascript
jQuery UI制作选项卡(tabs)
Dec 13 Javascript
Webpack优化配置缩小文件搜索范围
Dec 25 Javascript
详解webpack的proxyTable无效的解决方案
Jun 15 Javascript
小程序实现列表删除功能
Oct 30 Javascript
JavaScript Array对象基本方法详解
Sep 03 Javascript
微信小程序实现身份证取景框拍摄
Sep 09 Javascript
夯基础之手撕javascript继承详解
Nov 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
新52大事件
2020/03/03 欧美动漫
php上的memcache和memcached两个pecl库
2010/03/29 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
HTML中事件触发列表与解说
2007/07/09 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
js创建对象的方式总结
2015/01/10 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
浅析Ajax语法
2016/12/05 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
vue.js 获取select中的value实例
2018/03/01 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
在Python中操作字典之fromkeys()方法的使用
2015/05/21 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
代码详解django中数据库设置
2019/01/28 Python
QML使用Python的函数过程解析
2019/09/26 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python模块相关知识点小结
2020/03/09 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
大型晚会策划方案
2014/02/06 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
万里长城导游词
2015/01/30 职场文书
女儿满月酒致辞
2015/07/29 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
Consul在linux环境的集群部署
2022/04/08 Servers