首頁 > 軟體

vue通過定時器實現垂直捲動公告

2022-04-08 13:00:41

前言

最近專案有個需求是做一個垂直捲動的公告,其中也涉及到了設定定時器和清除定時器方面的知識點,在這裡記錄下過程,不對的地方歡迎大家指正,一起共同進步!

思路

1. 寫好樣式,把卷動的內容迴圈出來,固定顯示區域的高度,超出隱藏
2. 設定定時器,將第一條資料塞到最後一個,刪除第一條資料,暫停播放
3. 在mounted中建立並執行定時器
4. destroyed中清除定時器

HTML部分

<div class="roll">
      <div class="roll-line" />
      <i class="el-icon-bell"></i>
      <ul class="list">
        <li
          v-for="(item, index) in ulList"
          :key="item.id"
          :class="!index && play ? 'toUp' : ''"
        >
          {{ item.msg }}
        </li>
      </ul>
</div>

JS部分

export default {
  data() {
    return {
      ulList: [
        { msg: "這是第一條資訊這是第一條資訊這是第一條資訊這是第一條資訊" },
        { msg: "這是第二條資訊這是第二條資訊這是第二條資訊這是第二條資訊" },
        { msg: "這是第三條資訊這是第三條資訊這是第三條資訊這是第三條資訊" },
        { msg: "這是第四條資訊這是第四條資訊這是第四條資訊這是第四條資訊" },
        { msg: "這是第五條資訊這是第五條資訊這是第五條資訊這是第五條資訊" }
      ],
      play: false,
      timer: null, // //接收定時器
    };
  },
  mounted() {  //頁面掛載完成時就開始定時器,公告文字捲動
    setInterval(this.startPlay, 4000);
     console.log('開始定時器');
  },
  destroyed() { // 頁面銷燬時清除定時器
    clearInterval(this.timer); 
    console.log('銷燬定時器');
  },
  methods: {
    startPlay() {
      let that = this;
      that.play = true; //開始播放
      that.timer = setTimeout(() => {  //建立並執行定時器
        that.ulList.push(that.ulList[0]); //將第一條資料塞到最後一個
        that.ulList.shift(); //刪除第一條資料
        that.play = false; //暫停播放
      }, 500);
      console.log(that.timer);
    },
  }
};

css樣式

<style lang="scss" scoped>
.roll {
  width: 100%;
  height: 60px; /*關鍵樣式*/
  line-height: 60px; /*關鍵樣式*/
  background: #fff;
  margin-bottom: 24px;
  box-shadow: 4px 0 10px rgba(226, 226, 226, 0.3);
  padding: 0 20px;
  color: #f5212d;
  font-size: 14px;
  display: flex;
  .roll-line {
    width: 2px;
    height: 100%;
    background: #dee2e6;
    margin: 0 20px 0 -20px;
  }
  .el-icon-bell {
    color: #343a40;
    line-height: 60px; /*關鍵樣式*/
    margin-right: 10px;
  }
  .toUp {
    margin-top: -60px; /*關鍵樣式*/
    transition: all 1s; /*關鍵樣式*/
  }
  .list {
    list-style: none;
    width: 100%;
    text-align: center;
    overflow: hidden; /*關鍵樣式*/
    height: 60px; /*關鍵樣式*/
    padding: 0;
    margin: 0;
  }
  li {
    text-align: left;
    height: 60px; /*關鍵樣式*/
    line-height: 60px; /*關鍵樣式*/
  }
}
</style>

關於定時器的清除

由於定時器在呼叫時,都會返回一個整形的數位,該數位代表定時器的序號,即第多少個定時器,所以定時器的清除要藉助於這個返回的數位。
定時器清除的方法:clearTimeout(obj)和clearInterval(obj)。(注意定時器的清除方法)

通過列印console.log(that.timer);可以看出確實會返回一個整數,他代表是第幾個定時器

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com