riku
2024-05-12 fb876cbc3b21035125668f2db6ee84e47efb544f
src/utils/map/animation.js
@@ -21,6 +21,7 @@
  this._fps = this.frameAnimation.fps;
  // 绘制图形缓存
  this.moveViews = {};
  this.clear = true;
}
MapAnimation.prototype = {
@@ -159,6 +160,15 @@
            Layer.drawMesh(d, f);
            // 风向风速
            sector.drawSectorAna(d, start + index);
            // 执行监听函数
            if (typeof that.OnEachFrameCallback === 'function') {
              that.OnEachFrameCallback(d, start + index);
            }
            // 绘制3D图形时,最少需要2个点才可绘制图形
            // 因此此处索引只到倒数第二个点就结束,此时执行这段任务结束的监听回调
            if (typeof that.OnEachTaskEndCallback === 'function') {
              that.OnEachTaskEndCallback(d);
            }
          }
          var pos = d.lnglats_GD[d.lnglats_GD.length - 1];
@@ -200,9 +210,27 @@
    this.start();
  },
  /**
   * 设置每一帧的监听函数
   * @param {Function} callback
   */
  setOnEachFrameCallback(callback) {
    this.OnEachFrameCallback = callback;
  },
  /**
   * 设置每一段任务结束的监听函数
   * @param {Function} callback
   */
  setOnEachTaskEndCallback(callback) {
    this.OnEachTaskEndCallback = callback;
  },
  /*******************************动画任务逻辑 -start ******************************/
  start: function () {
    sector.clearSector();
    if (this.frameAnimation.isStop) {
      sector.clearSector();
    }
    this.frameAnimation.start();
  },
  changeSpeed: function (speed) {
@@ -214,6 +242,8 @@
  stop: function () {
    this.factorDatas = undefined;
    this.frameAnimation.addOnNextTasks(undefined);
    // this.OnEachFrameCallback = undefined;
    // this.OnEachTaskEndCallback = undefined;
    this.frameAnimation.stop();
  },
  setOnStopCallback: function (callback) {
@@ -242,6 +272,8 @@
  /*******************************动画任务逻辑 -end ******************************/
  _clearMap: function () {
    if (!this.clear) return;
    var list = [];
    for (const key in this.moveViews) {
      list.push(this.moveViews[key]);
@@ -386,4 +418,7 @@
  }
};
export { MapAnimation };
const realTimeMapAnimation = new MapAnimation();
realTimeMapAnimation.clear = false;
export { realTimeMapAnimation, MapAnimation };