js+transition实现字幕无缝滚动效果

2019-04-16  本文已影响0人  纵横无涯

重点是延时器的使用和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>

上一篇下一篇

猜你喜欢

热点阅读