HTML5翻译方法,如何重置为默认值?

Win*_*ade 24 html5 canvas

由于HTML5的translate-method显然将绘图的起源相对于其原始起源.(当我连续两次使用ctx.translate(20,20)时,我得到与使用ctx.translate(40,40)时相同的结果.现在问题是我想将绘图的原点重置为它的原始位置(首次使用translate()之前的位置),我该怎么做?

Lok*_*tar 54

你可以用.save()和来做到这一点.restore()

ctx.save();
ctx.translate(// do some translations);
// draw whatever
ctx.restore();
Run Code Online (Sandbox Code Playgroud)

您需要调用save()"保存"当前上下文状态.然后你可以执行翻译,旋转等.完成调用后restore(),将上下文的状态重置为最初调用时的状态save().

现场演示

MDN教程也解释了它

  • 这是最好的解决方案,因为它允许您堆叠转换. (2认同)

psy*_*brm 45

ctx.setTransform(1, 0, 0, 1, 0, 0);
Run Code Online (Sandbox Code Playgroud)

MDN setTransform文档

  • 如果你想要的只是将一批翻译撤回到默认(未转换)空间,那么`setTransform(1,0,0,1,0,0)`比'save&restore`更好,因为保存/恢复工作在每个上下文属性而不仅仅是转换. (3认同)
  • 虽然这有效,但@Loktar应该被认为是最好的答案:http://stackoverflow.com/a/11144306/1866876 (2认同)

Bol*_*Key 6

ctx.resetTransform();
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅MDN文档.它具有非常低的浏览器兼容性.