requestAnimationFrame 实现跑马灯

Posted wilsunson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requestAnimationFrame 实现跑马灯相关的知识,希望对你有一定的参考价值。

html :

<!-- 公告 -->
        <div class="notice-container" v-show="noticeList.length">
          <span class="notice-icon"></span>
          <div class="notice-items" ref="noticeBox">
            <div class="notice-items-inner" ref="noticeInner">
              <p v-for="(item, index) in noticeList" :key="index">{{item.noticeContent}}</p><p>{{noticeList.length && noticeList[0].noticeContent}}</p> // 两p标签必须粘合一起
            </div>
          </div>
        </div>

js:

// 公告的走马灯
    initNoticeScroll () {
      let boxWidth = this.$refs.noticeBox.offsetWidth
      let innerWidth = 0
      let child = this.$refs.noticeInner.childNodes
      child.forEach(item => {
        innerWidth += item.offsetWidth
      })
      innerWidth += boxWidth * (child.length - 1)
      if (innerWidth > boxWidth) {
        let padding = 0
        let animation = () => {
          padding -= 1
          this.$refs.noticeInner.style.cssText = `transform: translate3d(${padding}px, 0, 0)`
          if (padding === -(innerWidth - child[0].offsetWidth)) {
            padding = 0
            this.$refs.noticeInner.style.cssText = `transform: translate3d(${padding}px, 0, 0)`
          }
          requestAnimationFrame(animation)
        }
        animation()
      }
    },

css:

.notice-container {

opacity: 0.6;
background: #141F33;

      font-size: 12px;
      color: #3E4759;
      height: 30px;
      overflow: hidden;
      box-sizing: border-box;
      width: 100%;
      display: flex;
      align-items: center;
      position: relative;
    color:#fff;
      .notice-icon {
        display: block;
        margin-left: 10px;
        flex-shrink: 0;
        width: 27px;
        height: 27px;
        background: url("../assets/home/icon_home_gg.png") no-repeat;
        background-size: 100% 100%;
      }

      .notice-items {
        margin: 0 0 0 6px;
        flex: 1;
        display: flex;
        overflow: hidden;
        height: 30px;

        .notice-items-inner {
          display: flex;
          align-items: center;
          width: 100%;

          p {
            flex-shrink: 0;
            margin-right: 100%;
            white-space: nowrap;
          }
        }
      }
    }

效果:

技术图片

以上是关于requestAnimationFrame 实现跑马灯的主要内容,如果未能解决你的问题,请参考以下文章

深入理解requestAnimationFrame

秀才提笔忘了字:javascript使用requestAnimationFrame实现动画

requestAnimationFrame、cancelAnimationFrame用法

深入理解 requestAnimationFrame

深入理解requestAnimationFrame

requestAnimationFrame 使用小记