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

2023年4月28日14:09:13

搭建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代码 个人感觉自己写的代码还是有点小乱,还需改进提升

  • 作者:G.Bro
  • 原文链接:https://blog.csdn.net/fasdfdssdf/article/details/98956642
    更新时间:2023年4月28日14:09:13 ,共 3542 字。