vue实现无缝轮播(跑马灯效果)

本文介绍了如何使用Vue.js来创建一个无缝轮播组件,通过创建Sweiper.vue和SweiperItem.vue两个组件,并利用v-model传递数据实现自动轮播功能。在轮播过程中,组件间的通信确保了显示的图片与选定的值相匹配,从而达到平滑的跑马灯效果。

1.首先创建两个vue组件Sweiper.vue和SweiperItem.vue;
2.将两个组件引入页面,Sweiper.vue中用v-model传参(v-model 其实是语法糖,默认属性value和默认事件input);
代码中我是通过v-model的selcted将值传给Sweiper(子组件),自动轮播时子组件再通过触发input事件将即将显示的值传回给父组件
3.核心是要让selected的值传到SweiperItem中,与SweiperItem中的name值相等判该显示哪张图片;

<template>
  <div>
    <Sweiper v-model="selected">
      <!--v-model是个语法糖,相当于value和input事件-->
      <Sweiper-item  name="item1">
        <div class="item">
          <img :src="getImg('01')" alt="">
        </div>
      </Sweiper-item>
      <Sweiper-item name="item2">
        <div class="item">
          <img :src="getImg('02')" alt="">
        </div>
      </Sweiper-item>
      <Sweiper-item name="item3">
        <div class="item">
          <img :src="getImg('03')" alt="">
        </div>
      </Sweiper-item>
    </Sweiper>
  </div>
</template>
这里的图片没有通过数组用v-for循环,方便大家看其结构形式
<script>
  import Sweiper from "../components/Sweiper.vue";
  import SweiperItem from "../components/SweiperItem.vue";
  export default {
   
   
    name: "mySweiper",
    components: {
   
   
      Sweiper,
      SweiperItem
    },
    data() {
   
   
      return {
   
   
        selected: "item1",//默认第一张
      }
    },
    methods:{
   
   
      getImg(url){
   
   
        return 
### 实现 Vue 3 中无缝滚动跑马灯效果Vue 3 中实现无缝滚动的跑马灯效果和无限轮播滚动功能,可以通过结合 CSS 动画与 Vue 的响应式系统来完成。以下是一些实现思路和代码示例。 #### 1. 使用 CSS 动画实现文字跑马灯效果 为了实现文字的无缝滚动,可以使用 `CSS` 动画,通过 `transform: translateX` 来实现水平移动。以下是一个简单的实现示例: ```vue <template> <div class="marquee-container"> <div class="marquee-content" :class="{ 'animate': isAnimating }"> {{ message }} </div> </div> </template> <script> export default { data() { return { message: '这是一个跑马灯效果的文字滚动示例,无限循环滚动展示!', isAnimating: true }; } }; </script> <style scoped> .marquee-container { overflow: hidden; white-space: nowrap; width: 100%; } .marquee-content { display: inline-block; padding-left: 100%; /* 将文字从屏幕右侧开始滚动 */ transition: transform 0.5s linear; } .marquee-content.animate { animation: scrollText 10s linear infinite; } @keyframes scrollText { 0% { transform: translateX(0); } 100% { transform: translateX(-100%); } } </style> ``` #### 2. 使用 Vue 3 实现图片无限滚动轮播图 对于图片的无限轮播滚动,可以通过动态计算图片的位置,并结合 `setInterval` 实现自动切换。以下是一个简单的实现思路: ```vue <template> <div class="carousel-container"> <div class="carousel-track" :style="{ transform: 'translateX(' + currentPosition + 'px)' }"> <img v-for="(image, index) in images" :key="index" :src="image" class="carousel-image" /> </div> </div> </template> <script> export default { data() { return { images: [ 'https://via.placeholder.com/300x150?text=Image+1', 'https://via.placeholder.com/300x150?text=Image+2', 'https://via.placeholder.com/300x150?text=Image+3' ], currentIndex: 0, interval: null, imageWidth: 300, // 每张图片的宽度 currentPosition: 0 }; }, mounted() { this.startCarousel(); }, methods: { startCarousel() { this.interval = setInterval(() => { this.currentIndex = (this.currentIndex + 1) % this.images.length; this.currentPosition = -this.currentIndex * this.imageWidth; }, 3000); } }, beforeUnmount() { clearInterval(this.interval); } }; </script> <style scoped> .carousel-container { overflow: hidden; width: 300px; height: 150px; } .carousel-track { display: flex; transition: transform 0.5s ease-in-out; } .carousel-image { width: 300px; height: 150px; } </style> ``` #### 3. 无缝滚动与无限循环的结合 对于更复杂的无缝滚动需求(如图片和文字的混合滚动),可以通过动态克隆元素并调整动画时间来实现。例如,通过克隆一组元素并设置动画的无限循环,可以实现无缝滚动效果。 ```vue <template> <div class="scroll-container"> <div class="scroll-content" :style="{ animationDuration: animationDuration + 's' }"> <div v-for="(item, index) in items" :key="index" class="scroll-item"> {{ item }} </div> <!-- 克隆元素实现无缝滚动 --> <div v-for="(item, index) in items" :key="index + items.length" class="scroll-item"> {{ item }} </div> </div> </div> </template> <script> export default { data() { return { items: ['项目1', '项目2', '项目3', '项目4'], animationDuration: 10 }; } }; </script> <style scoped> .scroll-container { overflow: hidden; width: 100%; } .scroll-content { display: flex; animation: scrollItems linear infinite; } .scroll-item { flex: 0 0 200px; margin-right: 20px; } @keyframes scrollItems { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } } </style> ``` ### 总结 通过上述方法,可以在 Vue 3 中实现无缝滚动的跑马灯效果以及无限轮播滚动功能。这些实现主要依赖于 CSS 动画和 Vue 的响应式数据绑定,确保动画的流畅性和可维护性。[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值