Vue封装 轮播图 组件 (传入链接、图片即可使用)

1.先看效果图:
在这里插入图片描述

2.目录:
在这里插入图片描述
3.Swiper.vue源码:

<template>
  <div id="mySwiper">
    <div
      class="swiper"
      @touchstart="touchStart"
      @touchmove="touchMove"
      @touchend="touchEnd"
    >
      <slot></slot>
    </div>

    <div class="indicator">
      <div
        class="indicatorItem"
        v-for="(item, index) in slideCount"
        :key="index"
        :class="{ active: index === currentIndex - 1 }"
      ></div>
    </div>
  </div>
</template>

<script>
export default {
   
  name: "Swiper",
  props: {
   },
  data: function() {
   
    return {
   
      slideCount: 0,
      interval: 3000,
      imgWidth: 0, //swiper每张图片的宽度一样
      swiperStyle: {
   }, //利用swiper的style对象来控制着“过渡”
      currentIndex: 1, //记录当前滑动的下标
      scrolling: false, //当用手触摸和移动时,则暂停滚动
      animalDuration: 300, //切换一张图片0.3
      showIndicator: true, //当只有一张图片时,不显示小点点
      moveRatio: 0.25,
      playTimer: null, //控制着计时器的开始与暂停
      moveRatio: 0.25
    };
  },
  methods: {
   
    handleDom: function() {
   
      let swiperEle = document.querySelector(".swiper");
      let slideEles = document.getElementsByClassName("slide");
      this.slideCount = slideEles.length;
      console.log(this.slideCount)
  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
好的,以下是一个基于Vue.js实现的轮播图组件: ```html <template> <div class="slider"> <div class="slider-wrapper" :style="{ transform: 'translateX(-' + currentImage * 100 + '%)' }"> <div class="slider-item" v-for="(image, index) in images" :key="index" :style="{ backgroundImage: 'url(' + image + ')' }"> </div> </div> <div class="slider-dots"> <span class="dot" v-for="(image, index) in images" :key="index" :class="{ active: currentImage === index }" @click="goToImage(index)"> </span> </div> </div> </template> <script> export default { data() { return { currentImage: 0, interval: null, }; }, props: { images: { type: Array, required: true, }, intervalTime: { type: Number, default: 3000, }, }, methods: { startSlider() { this.interval = setInterval(() => { this.currentImage++; if (this.currentImage >= this.images.length) { this.currentImage = 0; } }, this.intervalTime); }, goToImage(index) { this.currentImage = index; clearInterval(this.interval); this.startSlider(); }, }, mounted() { this.startSlider(); }, beforeUnmount() { clearInterval(this.interval); }, }; </script> <style scoped> .slider { position: relative; overflow: hidden; } .slider-wrapper { display: flex; transition: transform 0.5s ease-out; } .slider-item { width: 100%; height: 0; padding-bottom: 56.25%; background-position: center; background-size: cover; } .slider-dots { position: absolute; bottom: 10px; left: 50%; transform: translateX(-50%); display: flex; } .slider-dots .dot { width: 10px; height: 10px; border-radius: 50%; background-color: #ccc; margin-right: 10px; cursor: pointer; } .slider-dots .active { background-color: #333; } </style> ``` 这个轮播图组件接受一个`images`数组作为参数,每个元素是一个图片的URL。可以通过设置`intervalTime`属性来控制自动播放的时间间隔,默认为3秒。组件内部使用了`setInterval`函数来实现自动播放,并且在组件销毁前使用`clearInterval`函数清除定时器。底部的小圆点会根据当前显示的图片来更新样式,并且可以点击切换到对应的图片

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值