【发布时间】:2016-11-21 02:34:54
【问题描述】:
我对 createPattern() 有疑问。首先,我定义了一个画布并将其作为模式的源传递,以应用于第二个(更大的)画布 - 就像在 epistemex 的这个演示中一样:
http://jsfiddle.net/epistemex/dn7bvjh0/
这很好用。但是,当我多次调用下面的函数时,每次更改“接收”画布(“canvasContext”)的大小时,画布的大小都会波动。画布越大,图案的元素彼此放置得越近。当画布(不同尺寸)彼此相邻放置时,这会导致节奏中断,我正在寻找解决方案!
var unit = heightNow/2;
var canvasPattern = document.createElement("canvas");
canvasPattern.width = unit;
canvasPattern.height = unit;
var pctx = canvasPattern.getContext("2d");
pctx.beginPath();
pctx.fillStyle = basicClrs1[woordNummer];
pctx.rect(0,0,unit,unit);
pctx.fill();
pctx.beginPath();
pctx.fillStyle = basicClrs2[woordNummer];
pctx.rect(0,0,unit/2,unit/2);
pctx.fill();
pctx.lineWidth = unit/4;
pctx.stroke;
var pattern = canvasContext.createPattern(canvasPattern,"repeat");
canvasContext.fillStyle = pattern;
canvasContext.rect(0,0,widthNow,heightNow);
canvasContext.translate(0,0,widthNow,heightNow);
canvasContext.fill();
【问题讨论】:
-
你能提供一个完整的例子吗?不清楚 heightNow 和 widthNow 是什么,我不确定你提供的所有代码是否都包含在函数中。我已经创建了this fiddle,但我不确定它是否与您正在做的相匹配。
-
如果画布的宽度和高度在任何时候都不同,那么这可能会导致“节奏中断”,因为图案大小仅取决于高度。
-
在每个页面加载时都会生成新的 div,具有不同的宽度和高度('widthNow' 和 'heightNow')。但两者总是变量“单位”的精确倍数 - 模式模块的大小 - 所以我希望模式与高度和宽度同步。事实并非如此,div 越大,在右侧和底部可见的“下一个”模式模块的意外片段就越多。
-
您链接到的图像显示垂直方向您正在获得模式的下一个副本;这是因为画布的高度是奇数,偶数不会发生这种情况。由于高度奇数,pattern-module包含半个像素,因此不可避免地无法正常显示。关于宽度,你确定它是单位的倍数吗?在图像中它看起来不像,并且代码不强制它是单位的倍数(尽管它是高度的)。
-
感谢您的回复。是的,宽度和高度一样,肯定是单位的倍数。我看起来不像那样,因为图案神秘地缩小了一点。同样的情况在这里发生:jsfiddle.net/czjdwk4h 如果您更改单位值,则模式有时适合,有时不适合。
标签: javascript canvas html5-canvas