vue CLI3.0自己实现一个轮播组件,并设置自定义属性

搭建CLI步奏过程不详细介绍了

主要利用Vue.component()注册全局组件,滑动效果使用了translateX
如下图
vue CLI3.0自己实现一个轮播组件,并设置自定义属性
让后开始详细介绍如何实现自己的轮播组件

一.新建jv-swiper文件夹
1.1、然后在jv-swiper文件夹新建index.vue ,该vue其实为swiper的外层控制

<template>   <div class="jv-swiper" ref="swileng">     <slot></slot>           <div v-if="indicator==='true'" class="indicator-box">//此段代码为指示器,轮播的小点点         <div  v-for="(i,index) in jv_siwdom" :key="index" :class="jv_siw_index==index?'indicator_color':''" class="indicator">    </div>      </div>       </div> </template>  <script>  /* eslint-disable */ export default {   name: "JvSwiper",   porps: {},   data() {     return {       indicator: true,       jv_siwdom: 0,       jv_siw_index: 0,     };   },   created() {},   mounted() {     let jv_interval = 3000,//滑动间隔       jv_duration = 300,//运动时间       jv_indicator = true;//指示器,轮播的小点点     try {       jv_interval = this.$refs.swileng.attributes.interval.value;//使用过程中设置的属性参数       jv_duration = this.$refs.swileng.attributes.duration.value;       jv_indicator = this.$refs.swileng.attributes.indicator.value;            } catch (error) {           }     this.indicator = jv_indicator;//把用户设置的或者默认的运动直接存储一下     let siwdom = this.$refs.swileng.childNodes,//获取有用户设置了多少张轮播     slef=this,       cont = 0,       box_left = 0;     this.jv_siwdom=siwdom.length - 1;  //给负责渲染层的变量赋值,让它生产多少张轮播          let seti = setInterval(() => {//执行       SwiRotste();     }, jv_interval);          function SwiRotste() {       cont += 1;        //进来就累加一次       if (cont == siwdom.length - 1) {  //如果等于最后一个         cont = 0;       }       slef.jv_siw_index=cont;        //把当前的值赋值给jv_siw_index,告诉我们当前滑动到哪一张       box_left = 100 * cont;       for (let i = 0, s = siwdom.length - 1; i < s; i++) {  //给每个div添加不同的translateX值及运动时间         siwdom[i].style.transform = `translateX(${-box_left}%)`;         siwdom[i].style.transition = `${jv_duration / 1000}s`;       }     }   } }; </script>  <style> .jv-swiper {   width: 100%;   height: auto;   background-color: slategrey;   display: -webkit-inline-box;   overflow: hidden;   position: relative; } .indicator-box{   display: flex; position: absolute;   bottom: 12px;   right: 6px;  } .indicator {   width: 6px;   height: 6px;   border-radius: 100%;   background-color: #333;   margin: 0 3px; } .indicator_color{   background-color: #fff; } </style>    

1.2、然后在jv-swiper文件夹新建swiper-item.vue ,该vue其实为swiper的swiper-item

<template>   <div class="swiper-item">     <slot></slot>   </div> </template>  <script> export default {   name: "swiper-item",   porps: {} }; </script> <style> .swiper-item {      width: 100%;   height: 100%;     z-index: 9999;   } .swiper-item img {   width: 100%;   height: auto; } </style>   

二、在jv-swiper同级新建jv-index.js用了统一注册组件

/* eslint-disable */ import JvSwiper from './jv-swiper' import SwiperItem from './jv-swiper/swiper-item.vue'  const JvIndex={     install:function(Vue){         // Vue.component()是用来注册全局组件的        Vue.component("jv-swiper", JvSwiper);        Vue.component("swiper-item", SwiperItem);     }   } export default JvIndex  

三、在mian.js 注册一下

import JvIndex from './components/jv-index' Vue.use(JvIndex) 

四、开始使用啦~

<template>   <div class="hello">     <h1>{{ msg }}</h1>     //第一个轮播     <jv-swiper interval='5000' duration='400' indicator='true'>//设置自定义属性,这几个( interval、duration、indicator)属性都需要放子啊标签上哦       <swiper-item  v-for="(item, index) in img" v-bind:key="index">          <img :src="item" alt="">         </swiper-item>     </jv-swiper>          //第二个轮播     <jv-swiper interval='3000' duration='400' indicator='true'>       <swiper-item  v-for="(item, index) in img" v-bind:key="index">          <img :src="item" alt="">         </swiper-item>     </jv-swiper>   </div> </template>  <script> /* eslint-disable */ export default {   name: "HelloWorld",   props: {     msg: String   },   data() {     return {       img: ['http://m.xuelejia.com/static/images/lunbo2.jpg','http://m.xuelejia.com/static/images/new-banner2.png','http://m.xuelejia.com/static/images/lunbo3.jpg']     };   } }; </script>  <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> h3 {   margin: 40px 0 0; } ul {   list-style-type: none;   padding: 0; } li {   display: inline-block;   margin: 0 10px; } a {   color: #42b983; } </style>  

好了大功告成,下面为效果图
vue CLI3.0自己实现一个轮播组件,并设置自定义属性

总结:

主要利用Vue.component()注册全局组件
使用 this.$refs.swileng.attributes 获取用户设置的参数,不知道各位大佬有没有更好的方式,求介绍
使用this.$refs.swileng.childNodes获取用多少张轮播,不知道各位大佬有没有更好的方式,求介绍
滑动效果使用了translateX 使用 slot 实现用户在组件标签内插入html代码 个人感觉自己写的代码还是有点小乱,还需改进提升