【发布时间】:2014-10-02 02:10:00
【问题描述】:
我最近在画布上玩一些代码时发现了这个奇怪的地方。
给定以下代码
var pattern = ctx.createPattern(image, 'repeat');
ctx.fillStyle = pattern;
ctx.fillRect(10, 10, 500, 500);
您会期望它会在画布上从点 x:10, y:10 开始渲染带有此图像 的图案。
但实际上似乎发生的是,它呈现从 x:10, y:10 开始的矩形,但模式从 x:0, y:0 开始。
解决方法是翻译画布
ctx.translate(10,10);
然后从x:0, y:0开始渲染矩形
ctx.fillRect(0, 0, 500, 500);
我在jsfiddle 设置了一个演示来说明这个问题。只需更改 x 和 y 偏移量以查看默认情况下会发生什么,然后使用复选框启用翻译以“修复”问题。
所以我的问题是这样的:
为什么rect 和fillRect 在填充模式时的行为是这样的,考虑到大多数时候它是违反直觉的?
【问题讨论】:
-
一般来说,最好总是
translate画布然后在0,0绘图,这让生活sooo 更轻松。
标签: javascript html canvas html5-canvas