Skip to content

文字循环横向滚动

需求

文字循环进行滚动,文字的数量不定

实现

css实现

这种方式最简单,但如果文字多了,超出的部分不会显示

html
<div class="nbon-container">-->
  测试1测试2测试3测试4测试5测试6测试7测试8测试9测试10测试11测试12测试13测试14测试15
  </div>
css
.nbon-container{
    padding-left: 100%;
    display: inline-block;
    white-space: nowrap;
    animation: 10s rowLeft linear infinite;
  }
  @keyframes rowLeft {
    0% {
      transform: translateX(0);
    }
    100% {
      transform: translateX(-100%);
    }
  }

vue-marquee-text-component文本字幕组件

文档:https://evodiaaut.github.io/vue-marquee-text-component/

优点: 使用简单,文字多的时候也能全部显示

缺点: 文字少的时候,滚动速度很慢,文字多的时候滑动速度快

  <marquee-text :duration="30">
    测试111
  </marquee-text>
  
  import marqueeText from 'vue-marquee-text-component'

animation+动态计算滚动时长

优点:解决了文字多时滑动速度快的问题

vue
<template>
  <div
    class="nbon-container"
    ref="containerRef"
    :style="duration"
  >
    {{overNumVal}}
  </div>
</template>

<script setup>
  import {ref, watch} from 'vue'
  
  const props = defineProps({
    overNumVal: {
      type: String,
      default: ''
    }
  })
  const transTime = 30
  const containerRef = ref(null)
  
  const duration = ref({
    animationDuration: transTime + 's'
  })
  
  watch(() => props.overNumVal, () => {
    // 通过dom的长度来计算新的滚动时长
    duration.value.animationDuration = (containerRef.value.clientWidth / transTime) + 's'
  }, {
    flush: 'post'
  })
</script>

<style scoped lang="scss">
  .nbon-container{
    // 数据从最右边进入
    padding-left: 720px;
    display: inline-block;
    white-space: nowrap;
    animation: rowLeft linear infinite;
  }
  @keyframes rowLeft {
    0% {
      transform: translateX(0);
    }
    100% {
      transform: translateX(-100%);
    }
  }
</style>

如有转载或 CV 的请标注本站原文地址