首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Web Workers在画布中绘制区域

使用Web Workers在画布中绘制区域
EN

Stack Overflow用户
提问于 2016-12-09 15:59:35
回答 1查看 739关注 0票数 1

我有使用canvas绘制区域的代码。有没有什么方法可以用Web Workers来绘制它们呢?我知道Worker不能访问DOM,但我看到了人们使用drawImage的例子。

也许有人会做这样的事?

绘图代码:

代码语言:javascript
复制
private draw() {
        if (!this._data.length || !this.canvas) {
            return;
        }
        let maxX   = this.getMaxX(),
            minX   = this.getMinX(),
            maxY   = this.getMaxY(),
            width  = this.canvas.width,
            height = this.canvas.height,
            ctx    = this.canvas.getContext("2d"),
            ratioY = height / maxY;
        ctx.save();
        ctx.setTransform(1, 0, 0, 1, 0, 0);
        ctx.clearRect(0, 0, width, height);
        ctx.restore();
        ctx.beginPath();
        ctx.fillStyle   = this.colorMap.get(this.status);
        ctx.strokeStyle = this.colorMap.get(this.status);
        ctx.moveTo(width * ((maxX - +this._data[0].time) / (maxX - minX)), height);
        for (let i = 0; i < this._data.length; i++) {
            let d = this._data[i];
            let x = width * ((maxX - +d.time) / (maxX - minX));
            let y = height - (d.value * ratioY);
            ctx.lineTo(x, y);
        }
        ctx.lineTo(width * ((maxX - +this._data[this._data.length - 1].time) / (maxX - minX)), height);
        ctx.lineTo(width * ((maxX - +this._data[0].time) / (maxX - minX)), height);
        ctx.fill();
        ctx.closePath();
        ctx.stroke();
    }
EN

回答 1

Stack Overflow用户

发布于 2019-08-27 14:01:07

您可以使用屏幕外画布

代码语言:javascript
复制
const canvas = document.querySelector('#canvas');
const ctx = canvas.getContext('bitmaprenderer');
const offscreenCanvas = new OffscreenCanvas(canvas.width, canvas.height);

const worker = new Worker('worker.js');
worker.postMessage({msg: 'init', canvas: offscreenCanvas}, [offscreenCanvas]);

并在worker.js文件中执行繁重的任务

代码语言:javascript
复制
self.onmessage = function(ev) {
  if(ev.data.msg === 'init') {
    canvas = ev.data.canvas;
    ctx = canvas.getContext('2d');
    ctx.setTransform(1, 0, 0, 1, 0, 0)
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41055663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档