vue中js+transition实现字幕滚动

本文介绍了一种使用JavaScript实现无缝滚动字幕的方法,通过结合setInterval和setTimeout,配合CSS transition,实现在一行内两条数据的无缝滚动效果。文章详细解析了如何控制字幕的top属性变化,以达到平滑过渡的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重点是延时器的使用和transition的效果添加和取消
使用setInterval定时器在定时器函数里面判断,当top值小于arr的长度(因为我实现的是两条数据在一行滚动)在条件范围内实现无缝操作,重点操作setTimeout延时器的使用,是为了当操作字幕瞬间到达第一条后过渡属性不会因此覆盖top为0的过渡效果,而延时后加上transition的为了实现第一条字幕top过渡到第二条

if (top <= - num) {
   top = 0
    cg_autopaly.style.transition = ''
    cg_autopaly.style.top = top + 'px'
    setTimeout(() => {
      top = -20
      cg_autopaly.style.transition = 'all 0.5s'
      cg_autopaly.style.top = top + 'px'
    }, 100);
  } else {
    top -= 20
    cg_autopaly.style.transition = 'all 0.5s'
    cg_autopaly.style.top = top + 'px'
  }


js代码

sjAutoPlay (arr) {
   let cg_autopaly = document.getElementsByClassName('cg_autopaly')[0]
   let top = 0
   let num = Math.ceil(arr.length/2) * 20
   // console.log(top)
   this.times = setInterval(function () {
     // console.log(top)
     if (top <= - num) {
       top = 0
       cg_autopaly.style.transition = ''
       cg_autopaly.style.top = top + 'px'
       setTimeout(() => {
         top = -20
         cg_autopaly.style.transition = 'all 0.5s'
         cg_autopaly.style.top = top + 'px'
       }, 100);
     } else {
       top -= 20
       cg_autopaly.style.transition = 'all 0.5s'
       cg_autopaly.style.top = top + 'px'
     }
   }, 2000)
 },

HTML代码

<div class="cg_new_allinfo">
  <div class="cg_autopaly">
     <p v-for="(item, index) in setAllMonthList" :key="index">
       <span v-for="(items, index) in item" :key="index">
         {{items.staff_name}}本月已完成任务任務{{items.month_count}}個;
       </span>
     </p>
   </div>
 </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值