【问题标题】:JS - Canvas - draw at two canvases simultaneous - ?feed two vars?JS - 画布 - 同时在两个画布上绘制 - ?喂两个变量?
【发布时间】:2016-12-14 10:09:35
【问题描述】:

有一个问题。作为一个菜鸟,我找到了一个不错的脚本并重写了它,让我很满意。但我想知道我是否可以使以下内存/性能效率更高。

首先介绍一下背景。

  • 我制作了一个画布,用鼠标输入在上面画了一条线。非常基本。
  • 使用“canvas2svg”,我能够将画布复制到 svg 输出/下载。

问题:

现在,一切正常。但我想知道是否可以使以下代码更有效地提高内存/性能。

“ctx”变量在画布上绘制 “rttSvg” var 绘制到 svg 文件。

    points.push({ x: e.clientX, y: e.clientY });

    ctx.beginPath();
    ctx.moveTo(points[points.length - 2].x, points[points.length - 2].y);
    ctx.lineTo(points[points.length - 1].x, points[points.length - 1].y);
    ctx.stroke();

    rttSvg.beginPath();
    rttSvg.moveTo(points[points.length - 2].x, points[points.length - 2].y);
    rttSvg.lineTo(points[points.length - 1].x, points[points.length - 1].y);
    rttSvg.stroke();

我可以把这个结合起来吗?像这样的东西? (菜鸟提前警告:)

  (ctx.rttSvg).beginPath();

想法 对于这样的一小部分,我当然可以创建一个函数,传递两个变量并执行。但是我必须创建很多很多函数,因为我必须为所有与画布和 svg 交互的代码执行此操作。我想内联。

如您所见,我仍然需要围绕 JS 的思考过程。 :)

【问题讨论】:

  • 不,如果不包装每个绘图操作以便两者兼而有之,简化它是不切实际的
  • 我不同意。如果这两个绘图操作完全相同,那么您可以简单地拥有一个函数,该函数将上下文作为参数,然后在该上下文上绘图。调用函数两次...function drawStuff(context) {} 和...drawStuff(ctx);drawStuff(rttSvg);
  • @Archer,是的。这确实有效:) points.push({ x: e.clientX, y: e.clientY }); drawStuff(ctx,点); drawStuff(rttSvg,点);和函数 drawStuff(context,points) { }
  • 您可以更进一步,不要传递points,因为只要函数在同一范围内,它就可用。我添加了一个带有示例的答案。

标签: javascript html variables canvas svg


【解决方案1】:

如果没有更多上下文,很难 100% 确定这是否是一种有效的方法,但您可以将绘图包装在一个函数中,然后调用该函数,将绘图上下文作为参数...

function drawStuff(context) {
    context.beginPath();
    context.moveTo(points[points.length - 2].x, points[points.length - 2].y);
    context.lineTo(points[points.length - 1].x, points[points.length - 1].y);
    context.stroke();
}

然后在适当的地方...

points.push({ x: e.clientX, y: e.clientY });

drawStuff(ctx);
drawStuff(rttSvg);

【讨论】:

  • 啊,是的,它完美地工作,没有通过'点'。非常感谢! (我想投票,但因为我有一个全新的帐户,所以我必须等待:))
  • 我很高兴能提供帮助。祝你好运:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 2021-05-27
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
相关资源
最近更新 更多