123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- <template>
- <canvas v-if="canvasId" class="ec-canvas" :id="canvasId" :canvasId="canvasId" @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd" @error="error"></canvas>
- </template>
- <script>
- import WxCanvas from './wx-canvas';
- export default {
- props: {
- canvasId: {
- type: String,
- default: 'ec-canvas'
- },
- lazyLoad: {
- type: Boolean,
- default: false
- },
- disableTouch: {
- type: Boolean,
- default: false
- },
- throttleTouch: {
- type: Boolean,
- default: false
- }
- },
- // #ifdef H5
- mounted() {
- if (!this.lazyLoad) this.init();
- },
- // #endif
- // #ifndef H5
- onReady() {
- if (!this.lazyLoad) this.init();
- },
- // #endif
- methods: {
- setChart(chart){
- this.chart = chart
- },
- init() {
- const { canvasId } = this;
- this.ctx = wx.createCanvasContext(canvasId, this);
- this.canvas = new WxCanvas(this.ctx, canvasId);
- const query = wx.createSelectorQuery().in(this);
- query
- .select(`#${canvasId}`)
- .boundingClientRect(res => {
- if (!res) {
- setTimeout(() => this.init(), 50);
- return;
- }
- this.$emit('onInit', {
- width: res.width,
- height: res.height
- });
- })
- .exec();
- },
- canvasToTempFilePath(opt) {
- const { canvasId } = this;
- this.ctx.draw(true, () => {
- wx.canvasToTempFilePath({
- canvasId,
- ...opt
- });
- });
- },
- touchStart(e) {
- const { disableTouch, chart } = this;
- if (disableTouch || !chart || !e.mp.touches.length) return;
- const touch = e.mp.touches[0];
- chart._zr.handler.dispatch('mousedown', {
- zrX: touch.x,
- zrY: touch.y
- });
- chart._zr.handler.dispatch('mousemove', {
- zrX: touch.x,
- zrY: touch.y
- });
- },
- touchMove(e) {
- const { disableTouch, throttleTouch, chart, lastMoveTime } = this;
- if (disableTouch || !chart || !e.mp.touches.length) return;
- if (throttleTouch) {
- const currMoveTime = Date.now();
- if (currMoveTime - lastMoveTime < 240) return;
- this.lastMoveTime = currMoveTime;
- }
- const touch = e.mp.touches[0];
- chart._zr.handler.dispatch('mousemove', {
- zrX: touch.x,
- zrY: touch.y
- });
- },
- touchEnd(e) {
- const { disableTouch, chart } = this;
- if (disableTouch || !chart) return;
- const touch = e.mp.changedTouches ? e.mp.changedTouches[0] : {};
- chart._zr.handler.dispatch('mouseup', {
- zrX: touch.x,
- zrY: touch.y
- });
- chart._zr.handler.dispatch('click', {
- zrX: touch.x,
- zrY: touch.y
- });
- }
- }
- };
- </script>
- <style scoped>
- .ec-canvas {
- width: 100%;
- height: 100%;
- flex: 1;
- }
- </style>
|