当前位置:首页 > VUE

vue实现轮播图代码

2026-01-21 12:47:11VUE

Vue实现轮播图代码

以下是一个基于Vue 3的轮播图实现示例,包含自动轮播、手动切换和指示器功能。

基础结构

<template>
  <div class="carousel-container">
    <div class="carousel" @mouseenter="pause" @mouseleave="resume">
      <div class="slides" :style="{ transform: `translateX(-${currentIndex * 100}%)` }">
        <div v-for="(slide, index) in slides" :key="index" class="slide">
          <img :src="slide.image" :alt="slide.alt">
        </div>
      </div>
      <button class="prev" @click="prev">‹</button>
      <button class="next" @click="next">›</button>
      <div class="indicators">
        <span 
          v-for="(item, index) in slides" 
          :key="index" 
          :class="{ active: currentIndex === index }"
          @click="goTo(index)"
        ></span>
      </div>
    </div>
  </div>
</template>

脚本部分

<script>
import { ref, onMounted, onUnmounted } from 'vue';

export default {
  setup() {
    const slides = ref([
      { image: 'image1.jpg', alt: 'Image 1' },
      { image: 'image2.jpg', alt: 'Image 2' },
      { image: 'image3.jpg', alt: 'Image 3' }
    ]);
    const currentIndex = ref(0);
    let intervalId = null;
    const autoPlayDelay = 3000;

    const next = () => {
      currentIndex.value = (currentIndex.value + 1) % slides.value.length;
    };

    const prev = () => {
      currentIndex.value = (currentIndex.value - 1 + slides.value.length) % slides.value.length;
    };

    const goTo = (index) => {
      currentIndex.value = index;
    };

    const startAutoPlay = () => {
      intervalId = setInterval(next, autoPlayDelay);
    };

    const pause = () => {
      clearInterval(intervalId);
    };

    const resume = () => {
      startAutoPlay();
    };

    onMounted(() => {
      startAutoPlay();
    });

    onUnmounted(() => {
      pause();
    });

    return {
      slides,
      currentIndex,
      next,
      prev,
      goTo,
      pause,
      resume
    };
  }
};
</script>

样式部分

<style scoped>
.carousel-container {
  width: 100%;
  max-width: 800px;
  margin: 0 auto;
  overflow: hidden;
  position: relative;
}

.carousel {
  position: relative;
  height: 400px;
}

.slides {
  display: flex;
  transition: transform 0.5s ease;
  height: 100%;
}

.slide {
  min-width: 100%;
  height: 100%;
}

.slide img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.prev, .next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: rgba(0,0,0,0.5);
  color: white;
  border: none;
  padding: 10px 15px;
  cursor: pointer;
  z-index: 10;
}

.prev {
  left: 10px;
}

.next {
  right: 10px;
}

.indicators {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 8px;
}

.indicators span {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: rgba(255,255,255,0.5);
  cursor: pointer;
}

.indicators span.active {
  background: white;
}
</style>

功能说明

  1. 自动轮播:组件挂载后自动开始轮播,3秒切换一次
  2. 鼠标悬停暂停:鼠标移入轮播区域时暂停自动播放
  3. 导航按钮:提供上一张/下一张的手动切换按钮
  4. 指示器:底部圆点指示当前幻灯片位置,可点击跳转
  5. 平滑过渡:使用CSS transition实现平滑的滑动效果

扩展建议

  1. 添加淡入淡出效果:修改CSS transition属性
  2. 无限循环:克隆首尾幻灯片实现无缝循环
  3. 响应式设计:添加媒体查询适应不同屏幕尺寸
  4. 懒加载:对未显示的图片实现懒加载
  5. 触摸支持:添加touch事件处理移动端滑动

vue实现轮播图代码

标签: 代码vue
分享给朋友:

相关文章

vue实现查询替换

vue实现查询替换

Vue 实现查询替换功能 在 Vue 中实现查询替换功能,可以通过数据绑定和字符串操作方法结合实现。以下是具体实现方式: 基础实现 <template> <div>…

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Token…

vue实现下拉刷新组件

vue实现下拉刷新组件

实现下拉刷新组件的核心思路 下拉刷新功能通常通过监听触摸事件、滚动位置和动画效果实现。Vue中可以利用自定义指令或封装组件完成,以下为两种常见实现方式。 基于自定义指令的实现 创建指令监听触摸事件,…

vue实现视窗

vue实现视窗

Vue 实现视窗功能 在 Vue 中实现视窗功能通常涉及监听浏览器窗口大小变化、响应式布局或创建自定义弹窗组件。以下是几种常见实现方式: 监听浏览器窗口大小变化 使用 Vue 的 mounted…

vue交互实现

vue交互实现

Vue 交互实现方法 Vue.js 提供了多种方式实现用户交互,包括事件处理、表单绑定、动态渲染等。以下是常见的交互实现方法: 事件处理 通过 v-on 或 @ 指令绑定事件,触发方法或直接执行表达…

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr…