当前位置:首页 > VUE

vue实现关键词轮播

2026-01-07 05:14:31VUE

Vue 实现关键词轮播

基础实现方案

使用 Vue 的 v-forsetInterval 实现基础轮播效果:

<template>
  <div class="keyword-carousel">
    <transition name="fade" mode="out-in">
      <span :key="currentIndex">{{ keywords[currentIndex] }}</span>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      keywords: ['Vue', 'React', 'Angular', 'Svelte'],
      currentIndex: 0,
      interval: null
    }
  },
  mounted() {
    this.startCarousel()
  },
  beforeDestroy() {
    clearInterval(this.interval)
  },
  methods: {
    startCarousel() {
      this.interval = setInterval(() => {
        this.currentIndex = (this.currentIndex + 1) % this.keywords.length
      }, 2000)
    }
  }
}
</script>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

高级实现方案

增加暂停/继续功能和平滑动画效果:

<template>
  <div 
    class="keyword-carousel" 
    @mouseenter="pauseCarousel" 
    @mouseleave="resumeCarousel"
  >
    <div class="carousel-container">
      <div 
        v-for="(word, index) in keywords" 
        :key="index" 
        class="keyword"
        :class="{ active: currentIndex === index }"
      >
        {{ word }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      keywords: ['前端', '后端', '移动端', '云计算'],
      currentIndex: 0,
      interval: null,
      isPaused: false
    }
  },
  mounted() {
    this.startCarousel()
  },
  beforeDestroy() {
    clearInterval(this.interval)
  },
  methods: {
    startCarousel() {
      this.interval = setInterval(() => {
        if (!this.isPaused) {
          this.currentIndex = (this.currentIndex + 1) % this.keywords.length
        }
      }, 1500)
    },
    pauseCarousel() {
      this.isPaused = true
    },
    resumeCarousel() {
      this.isPaused = false
    }
  }
}
</script>

<style>
.keyword-carousel {
  height: 40px;
  overflow: hidden;
  position: relative;
}
.carousel-container {
  position: relative;
  height: 100%;
}
.keyword {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  transition: opacity 0.8s ease-in-out;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  font-weight: bold;
}
.keyword.active {
  opacity: 1;
}
</style>

使用第三方库方案

借助 vue-awesome-swiper 实现更丰富的轮播效果:

vue实现关键词轮播

  1. 安装依赖:

    npm install swiper vue-awesome-swiper
  2. 组件实现:

    vue实现关键词轮播

    
    <template>
    <swiper :options="swiperOptions" class="keyword-swiper">
     <swiper-slide v-for="(word, index) in keywords" :key="index">
       <div class="keyword-item">{{ word }}</div>
     </swiper-slide>
    </swiper>
    </template>
import { Swiper, SwiperSlide } from 'vue-awesome-swiper' import 'swiper/css/swiper.css'

export default { components: { Swiper, SwiperSlide }, data() { return { keywords: ['JavaScript', 'TypeScript', 'Python', 'Go'], swiperOptions: { direction: 'vertical', autoplay: { delay: 1500, disableOnInteraction: false }, loop: true, speed: 800, effect: 'fade', fadeEffect: { crossFade: true } } } } }

.keyword-swiper { height: 50px; } .keyword-item { height: 50px; display: flex; align-items: center; justify-content: center; font-size: 22px; color: #42b983; font-weight: bold; } ```

响应式设计考虑

为适应不同屏幕尺寸,可以添加媒体查询:

@media (max-width: 768px) {
  .keyword-item {
    font-size: 18px;
  }
  .keyword-swiper {
    height: 40px;
  }
}

性能优化建议

对于大量关键词的情况,建议使用虚拟滚动技术或仅保留当前可见的关键词在DOM中,避免不必要的渲染开销。可以使用Vue的<keep-alive>组件缓存已渲染的关键词:

<keep-alive>
  <transition name="fade" mode="out-in">
    <span :key="currentIndex">{{ keywords[currentIndex] }}</span>
  </transition>
</keep-alive>

标签: 关键词vue
分享给朋友:

相关文章

vue 指令实现

vue 指令实现

Vue 指令实现 Vue 指令是 Vue.js 提供的特殊属性,用于在 DOM 元素上添加特殊行为。指令以 v- 前缀开头,例如 v-model、v-if、v-for 等。以下是实现自定义指令和常用内…

vue核心实现

vue核心实现

Vue 核心实现原理 Vue.js 的核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现原理的详细说明: 响应式系统 Vue 使用 Object.defineProper…

proxy实现vue

proxy实现vue

使用 Proxy 实现 Vue 响应式系统 Vue 3 的响应式系统基于 JavaScript 的 Proxy API,通过代理对象实现对属性的拦截和依赖追踪。以下是实现的核心逻辑: 创建响…

vue实现列表

vue实现列表

Vue 实现列表的方法 在 Vue 中实现列表渲染通常使用 v-for 指令,可以动态生成多个元素。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 遍历数组,生成列表项。v-for 需要…

vue实现webshell

vue实现webshell

Vue 实现 WebShell 使用 Vue 实现 WebShell 需要结合前端与后端的交互,通常通过 WebSocket 或 HTTP 协议与服务器通信。以下是一个基于 Vue 和 WebSock…

vue实现eventbus

vue实现eventbus

Vue 中实现 EventBus 在 Vue 中,EventBus 是一种跨组件通信的机制,尤其适用于非父子组件之间的数据传递。以下是实现 EventBus 的几种方法: 方法一:使用 Vue 实例…