我想在 html5 画布中画一个椭圆,我在stackoverflow 中找到了一个很好的方法。但我还有另一个问题。
function drawEllipse(ctx, x, y, w, h) {
var kappa = 0.5522848;
ox = (w / 2) * kappa, // control point offset horizontal
oy = (h / 2) * kappa, // control point offset vertical
xe = x + w, // x-end
ye = y + h, // y-end
xm = x + w / 2, // x-middle
ym = y + h / 2; // y-middle
ctx.beginPath();
ctx.moveTo(x, ym);
ctx.bezierCurveTo(x, ym - oy, …Run Code Online (Sandbox Code Playgroud) 我找到了这段代码:
if (!("aa" in window)) {
alert('oh my god');
var aa = 1;
}
alert("aa" in window);
alert(aa);
Run Code Online (Sandbox Code Playgroud)
此代码第二个警报是警报true,但是,第三个警报是"未定义",并且"if"中的警报未运行.为什么?
我认为原因是in; 它的作用是什么?
我在谷歌上搜索过,但一无所获,因为谷歌认为"在&srquo; 是一个过滤词.
我们总是使用inin循环,但是,坦率地说,我使用它但是并不真正理解它.
最近几天我在学习“变换”,现在我知道如何通过变换的矩阵进行翻译、旋转、倾斜、缩放。但是如果我想在一个转换语句中完成上述所有操作,我该怎么做?
ctx.transform(a,b,c,d,e,f);
Run Code Online (Sandbox Code Playgroud)
当我们想通过变换旋转某些东西时,我们必须为每个(a,b,c,d)发布 4 个参数,所以,如果我想旋转和缩放,例如,旋转 30 度和缩放(1.5,2),可以变换是同时完成的吗?那么 (a,b,c,d) 的值是多少?以及如何计算它们?
另一个问题:转换中有顺序吗?我的意思是如果我使用变换来旋转、缩放和平移,它们之间的顺序是什么?毕竟顺序很重要,“先翻译,再缩放”和“先缩放,再翻译”,会得到不同的结果。
一个画布,已经做了一些事情,如缩放,翻译和旋转,但我不知道它是否改变了,它之前没有保存,所以我不能使用restore()方法来恢复.
我现在会画一些东西,但是如果canvas.context已翻译(或其他),我的操作将会转到错误的位置.
// no save
ctx.translate(300,100);
ctx.scale(1,0.5);
ctx.rotate(Math.PI/2);
...
// to do something
...
// at now , how i go back the default?
Run Code Online (Sandbox Code Playgroud)
所以我想知道如何才能恢复默认状态并正确执行我的操作?越简单越好,谢谢