mpvue小程序開發之 實現一個彈幕評論

 

 先上圖數據結構

就是一個簡單的彈幕發送功能閉包

彈幕區的頁面:dom

      <div class="content" v-show="doommData.length">
        <div class="textLeft"></div>
        <div class="textItem">
          <p class="text aon" v-if="item.display" v-for="(item,index) in doommData" :key="index" :id="item.id" :style="{'animation-duration':item.time+'s', top:item.top+'%',color:'#333',background:item.result.bgColor}">
            <image :src="item.result.faceImage" class="headImg" />
            <span class="name">{{item.result.name}}:</span>
            <span class="text">{{item.result.sendMessage}}</span>
          </p>
        </div>
      </div>

彈幕區的代碼邏輯:async

// 彈幕參數
class Doomm {
  constructor(result, top, time, color, id) {
    //內容,頂部距離,運行時間,顏色,id(參數可自定義增長)
    /**
     * result數據結構
     * faceImage:"",
     * bgColor: "#57B2FF",
     * sendMessage: "66666",
     * sendTime: "2019-11-06 15:10:15",
     * name: "eve"
     *
     */
    this.result = result;
    this.top = top;
    this.time = time;
    this.color = color;
    this.display = true;
    this.id = id;
  }
}
//隨機字體顏色
getRandomColor() {
  let rgb = [];
  for (let i = 0; i < 3; ++i) {
    let color = Math.floor(Math.random() * 256).toString(16);
    color = color.length == 1 ? "0" + color : color;
    rgb.push(color);
  }
  return "#" + rgb.join("");
}
//節流函數
function throttle(fn, wait) {
  var canUse = true; // 設置一個開關
  return function(item) {
    if (!canUse) {
      return false;
    } // 若是開關已經關掉了就不用往下了
    canUse = false; // 利用閉包剛進來的時候關閉開關
    setTimeout(() => {
      fn(item);
      canUse = true; // 執行完纔打開開關
    }, wait);
  };
}
    //添加彈幕列表
    async barrageCyclic() {
      await this.Arr.forEach((ele, i) => {
        //往彈幕列表裏面添加數據
        this.doommList.push(
          new Doomm(
            ele,
            Math.ceil(Math.random() * 70 + 10),
            Math.floor(Math.random() * 20 + 10),
            getRandomColor(),
            i
          )
        );
      });
      this.doommData = this.doommList;
    },
相關文章
相關標籤/搜索