当前位置:首页 > VUE

vue实现文字滚动停顿

2026-01-21 09:47:09VUE

实现文字滚动停顿的几种方法

在Vue中实现文字滚动并带有停顿效果,可以通过CSS动画、JavaScript定时器或第三方库来实现。以下是几种常见的实现方式:

使用CSS动画实现

通过CSS的@keyframesanimation属性可以实现文字滚动效果,结合animation-delay或关键帧设置停顿时间。

<template>
  <div class="scroll-container">
    <div class="scroll-text">{{ text }}</div>
  </div>
</template>

<style>
.scroll-container {
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
}

.scroll-text {
  display: inline-block;
  animation: scroll 10s linear infinite;
}

@keyframes scroll {
  0%, 20% {
    transform: translateX(0);
  }
  80%, 100% {
    transform: translateX(-100%);
  }
}
</style>

使用JavaScript定时器实现

通过setIntervalsetTimeout控制滚动和停顿时间,实现更灵活的停顿效果。

<template>
  <div class="scroll-container" ref="scrollContainer">
    <div class="scroll-text" ref="scrollText">{{ text }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: '这是一段需要滚动并停顿的文字内容。',
      scrollPosition: 0,
      isPaused: false
    };
  },
  mounted() {
    this.startScrolling();
  },
  methods: {
    startScrolling() {
      const container = this.$refs.scrollContainer;
      const textElement = this.$refs.scrollText;

      const scroll = () => {
        if (this.isPaused) return;

        this.scrollPosition -= 1;
        textElement.style.transform = `translateX(${this.scrollPosition}px)`;

        if (this.scrollPosition <= -textElement.offsetWidth) {
          this.scrollPosition = container.offsetWidth;
          this.isPaused = true;
          setTimeout(() => {
            this.isPaused = false;
          }, 2000); // 停顿2秒
        }

        requestAnimationFrame(scroll);
      };

      scroll();
    }
  }
};
</script>

使用第三方库(如vue-marquee)

vue-marquee是一个专门用于实现文字滚动的Vue组件,支持停顿效果。

安装:

npm install vue-marquee-text-component

使用:

<template>
  <vue-marquee-text :duration="10" :repeat="4" :paused="isPaused">
    {{ text }}
  </vue-marquee-text>
</template>

<script>
import VueMarqueeText from 'vue-marquee-text-component';

export default {
  components: {
    VueMarqueeText
  },
  data() {
    return {
      text: '这是一段需要滚动并停顿的文字内容。',
      isPaused: false
    };
  },
  mounted() {
    setInterval(() => {
      this.isPaused = !this.isPaused;
    }, 5000); // 每5秒停顿一次
  }
};
</script>

结合Vue Transition实现平滑停顿

通过Vue的过渡效果,可以实现更平滑的停顿和滚动切换。

<template>
  <div class="scroll-container">
    <transition name="scroll" mode="out-in">
      <div :key="currentText" class="scroll-text">{{ currentText }}</div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      texts: ['第一段文字', '第二段文字', '第三段文字'],
      currentIndex: 0,
      interval: null
    };
  },
  computed: {
    currentText() {
      return this.texts[this.currentIndex];
    }
  },
  mounted() {
    this.interval = setInterval(() => {
      this.currentIndex = (this.currentIndex + 1) % this.texts.length;
    }, 3000); // 每3秒切换一次
  },
  beforeDestroy() {
    clearInterval(this.interval);
  }
};
</script>

<style>
.scroll-container {
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
}

.scroll-text {
  display: inline-block;
}

.scroll-enter-active, .scroll-leave-active {
  transition: all 1s;
}

.scroll-enter {
  transform: translateX(100%);
}

.scroll-leave-to {
  transform: translateX(-100%);
}
</style>

以上方法可以根据具体需求选择,CSS动画适合简单的滚动效果,JavaScript定时器提供更灵活的控制,而第三方库可以快速实现复杂功能。

vue实现文字滚动停顿

标签: 停顿文字
分享给朋友:

相关文章

vue实现文字

vue实现文字

Vue 中实现文字显示的方法 在 Vue 中实现文字显示可以通过多种方式,包括插值表达式、指令、组件等。以下是几种常见的实现方法: 插值表达式 使用双大括号 {{ }} 进行文本插值,这是 Vue…

vue实现文字复制

vue实现文字复制

Vue 实现文字复制的几种方法 使用 Clipboard API 在 Vue 中可以通过调用浏览器的 Clipboard API 实现文字复制功能。该方法兼容现代浏览器,无需额外依赖。 method…

vue实现文字复制

vue实现文字复制

Vue 中实现文字复制的几种方法 使用 document.execCommand 通过调用浏览器的 execCommand 方法实现复制功能。该方法在现代浏览器中仍可用,但逐渐被新的 Clipboar…

vue实现文字按钮

vue实现文字按钮

实现文字按钮的基本方法 在Vue中创建文字按钮可以通过多种方式实现,核心思路是利用按钮或可点击元素,通过CSS去除默认样式,使其呈现为纯文字形式。 模板部分 <template>…

vue实现文字下标

vue实现文字下标

在 Vue 中实现文字下标 Vue 中可以通过多种方式实现文字下标效果,以下是几种常见的方法: 使用 HTML 的 <sub> 标签 HTML 提供了 <sub> 标签用于…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text {…