| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | import { Canvas } from '@antv/f2';function wrapEvent(e) {  if (!e) return;  if (!e.preventDefault) {    e.preventDefault = function () {};  }  return e;}Component({  /**   * 组件的属性列表   */  properties: {    onRender: {      type: null,      value: function value() {}    }  },  /**   * 组件的初始数据   */  data: {},  ready: function ready() {    var _this = this;    var query = wx.createSelectorQuery().in(this);    query.select('.f2-canvas').fields({      node: true,      size: true    }).exec(function (res) {      var _res$ = res[0],        node = _res$.node,        width = _res$.width,        height = _res$.height;      var context = node.getContext('2d');      var pixelRatio = wx.getSystemInfoSync().pixelRatio;      // 高清设置      node.width = width * pixelRatio;      node.height = height * pixelRatio;      var children = _this.data.onRender(_this.data);      var canvas = new Canvas({        pixelRatio: pixelRatio,        width: width,        height: height,        context: context,        children: children      });      canvas.render();      _this.canvas = canvas;      _this.canvasEl = canvas.canvas.get('el');    });  },  observers: {    // 处理 update    '**': function _() {      var canvas = this.canvas,        data = this.data;      if (!canvas) return;      var children = data.onRender(data);      canvas.update({        children: children      });    }  },  lifetimes: {    detached: function detached() {      var canvas = this.canvas;      if (!canvas) return;      canvas.destroy();    }  },  /**   * 组件的方法列表   */  methods: {    click: function click(e) {      var canvasEl = this.canvasEl;      if (!canvasEl) {        return;      }      var event = wrapEvent(e);      // 包装成 touch 对象      event.touches = [e.detail];      canvasEl.dispatchEvent('click', event);    },    touchStart: function touchStart(e) {      var canvasEl = this.canvasEl;      if (!canvasEl) {        return;      }      canvasEl.dispatchEvent('touchstart', wrapEvent(e));    },    touchMove: function touchMove(e) {      var canvasEl = this.canvasEl;      if (!canvasEl) {        return;      }      canvasEl.dispatchEvent('touchmove', wrapEvent(e));    },    touchEnd: function touchEnd(e) {      var canvasEl = this.canvasEl;      if (!canvasEl) {        return;      }      canvasEl.dispatchEvent('touchend', wrapEvent(e));    }  }});
 |