uni-app 轮播图下面的字幕滚动组件

发布于 1周前 作者 eggper 来自 Uni-App

uni-app 轮播图下面的字幕滚动组件

1 回复

uni-app 中实现轮播图下面的字幕滚动组件,可以结合 swiper 组件和自定义的滚动字幕组件来实现。以下是一个基本的代码示例,展示了如何实现这一功能。

首先,在页面的模板部分,我们定义一个 swiper 组件来显示轮播图,并在其下方放置一个用于显示滚动字幕的 view 组件。

<template>
  <view class="container">
    <!-- 轮播图 -->
    <swiper :autoplay="true" interval="3000" indicator-dots="true">
      <swiper-item v-for="(image, index) in images" :key="index">
        <image :src="image" class="slide-image"></image>
      </swiper-item>
    </swiper>
    
    <!-- 字幕滚动 -->
    <view class="scroll-text-container">
      <view class="scroll-text" :style="{ transform: `translateX(-${scrollPosition}px)` }">
        <text v-for="(text, index) in texts" :key="index" class="text-item">{{ text }}</text>
      </view>
    </view>
  </view>
</template>

接下来,在页面的脚本部分,我们定义数据和逻辑来控制字幕的滚动。这里使用了一个定时器来不断更新 scrollPosition,从而实现滚动效果。

<script>
export default {
  data() {
    return {
      images: [
        'https://example.com/image1.jpg',
        'https://example.com/image2.jpg',
        'https://example.com/image3.jpg'
      ],
      texts: ['字幕1', '字幕2', '字幕3', '字幕4'],
      scrollPosition: 0,
      textWidth: 0,
      containerWidth: 0,
      intervalId: null
    };
  },
  mounted() {
    this.$nextTick(() => {
      this.containerWidth = this.$refs.scrollTextContainer.clientWidth;
      this.textWidth = this.$refs.scrollTextItem.clientWidth * this.texts.length;
      this.startScrolling();
    });
  },
  methods: {
    startScrolling() {
      this.intervalId = setInterval(() => {
        this.scrollPosition = (this.scrollPosition + 2) % this.textWidth;
      }, 30);
    },
    stopScrolling() {
      clearInterval(this.intervalId);
    }
  },
  beforeDestroy() {
    this.stopScrolling();
  }
};
</script>

最后,在页面的样式部分,我们定义必要的样式来确保滚动字幕的显示和布局。

<style>
.container {
  position: relative;
  width: 100%;
  height: 100%;
}
.slide-image {
  width: 100%;
  height: 200px;
}
.scroll-text-container {
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
  position: relative;
}
.scroll-text {
  display: inline-block;
  white-space: nowrap;
  will-change: transform;
}
.text-item {
  display: inline-block;
  padding: 0 10px;
}
</style>

这个示例展示了一个基本的轮播图与字幕滚动组件的实现。根据实际需求,你可能需要调整样式、增加功能或优化性能。

回到顶部