当前位置:首页 > VUE

vue实现轮播动画

2026-03-08 22:32:36VUE

使用 Vue 实现轮播动画

基础轮播实现(基于 v-show 和定时器)

通过 v-show 控制当前显示项,结合 setInterval 实现自动轮播。核心逻辑如下:

<template>
  <div class="carousel">
    <div v-for="(item, index) in items" :key="index" v-show="currentIndex === index">
      {{ item.content }}
    </div>
    <button @click="prev">Prev</button>
    <button @click="next">Next</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { content: 'Slide 1' },
        { content: 'Slide 2' },
        { content: 'Slide 3' }
      ],
      currentIndex: 0,
      timer: null
    }
  },
  mounted() {
    this.startAutoPlay()
  },
  methods: {
    startAutoPlay() {
      this.timer = setInterval(() => {
        this.next()
      }, 3000)
    },
    next() {
      this.currentIndex = (this.currentIndex + 1) % this.items.length
    },
    prev() {
      this.currentIndex = (this.currentIndex - 1 + this.items.length) % this.items.length
    }
  },
  beforeDestroy() {
    clearInterval(this.timer)
  }
}
</script>

添加 CSS 过渡动画

通过 Vue 的 <transition> 组件和 CSS 实现平滑过渡效果:

vue实现轮播动画

<template>
  <div class="carousel-container">
    <transition name="slide" mode="out-in">
      <div :key="currentIndex" class="slide">
        {{ items[currentIndex].content }}
      </div>
    </transition>
  </div>
</template>

<style>
.slide-enter-active, .slide-leave-active {
  transition: all 0.5s ease;
}
.slide-enter {
  transform: translateX(100%);
}
.slide-leave-to {
  transform: translateX(-100%);
}
</style>

使用第三方库(Swiper.js)

对于更复杂的轮播需求,可以集成 Swiper.js:

<template>
  <div class="swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide" v-for="(item, index) in items" :key="index">
        {{ item.content }}
      </div>
    </div>
    <div class="swiper-pagination"></div>
  </div>
</template>

<script>
import Swiper from 'swiper'
import 'swiper/css/swiper.css'

export default {
  data() {
    return {
      items: [...],
      mySwiper: null
    }
  },
  mounted() {
    this.mySwiper = new Swiper('.swiper-container', {
      loop: true,
      autoplay: {
        delay: 3000,
      },
      pagination: {
        el: '.swiper-pagination',
      }
    })
  }
}
</script>

响应式轮播实现

结合 window.resize 事件和计算属性实现响应式:

vue实现轮播动画

export default {
  computed: {
    slidesToShow() {
      return window.innerWidth < 768 ? 1 : 3
    }
  },
  methods: {
    updateSlides() {
      if (this.mySwiper) {
        this.mySwiper.params.slidesPerView = this.slidesToShow
        this.mySwiper.update()
      }
    }
  },
  mounted() {
    window.addEventListener('resize', this.updateSlides)
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.updateSlides)
  }
}

手势支持(移动端)

添加 touch 事件处理实现手势滑动:

methods: {
  handleTouchStart(e) {
    this.startX = e.touches[0].clientX
  },
  handleTouchEnd(e) {
    const endX = e.changedTouches[0].clientX
    if (this.startX - endX > 50) {
      this.next()
    } else if (endX - this.startX > 50) {
      this.prev()
    }
  }
}

模板中需要添加相应事件监听:

<div 
  @touchstart="handleTouchStart"
  @touchend="handleTouchEnd"
>
  <!-- 轮播内容 -->
</div>

标签: 动画vue
分享给朋友:

相关文章

实现vue

实现vue

安装Vue.js 通过npm安装Vue.js是最常见的方式。确保已安装Node.js和npm,运行以下命令: npm install vue 或者使用CDN直接引入: <script src…

vue实现选区

vue实现选区

Vue 实现选区的基本方法 在Vue中实现选区功能通常涉及DOM操作和事件处理。以下是几种常见的方法: 使用原生JavaScript的Selection API 通过window.getSelec…

ssh vue 实现

ssh vue 实现

使用SSH连接Vue项目部署的服务器 在Vue项目开发或部署过程中,可能需要通过SSH连接到远程服务器进行配置或维护。以下是实现SSH连接并部署Vue项目的关键步骤: 生成SSH密钥对 在本地终端运…

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…