我在FF(3.6和4beta4)下使用strokeText面临一个奇怪的效果,我在Chrome或Safari下无法重现。 如果我绘制一个填充的路径形状(但不是描边),然后是描边文本,则在调用strokeText()时会触发路径。
这是我的代码:
var el = document.getElementById('canvas'),
ctx = el.getContext('2d');
ctx.save();
// draw Rect
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.lineTo(200, 100);
ctx.lineTo(200, 200);
ctx.lineTo(100, 200);
ctx.lineTo(100, 100);
ctx.closePath();
ctx.fillStyle = 'red';
ctx.fill();
// draw Text
ctx.save();
ctx.textAlign = 'start';
ctx.fillStyle = "rgba(0,0,0,0.0)";
ctx.strokeStyle = "blue";
ctx.lineWidth = 2;
ctx.font = "bold 35pt sans-serif";
ctx.strokeText("Hello World !", 100, 280);
ctx.restore();
如果你运行它,那么矩形是蓝色的,而不是。
你看到这段代码有问题,还是FF中的错误?
谢谢!
答案 0 :(得分:1)
它已在Firefox 4 beta 8中修复。(刚刚测试过......)。 我认为相关的错误是:https://bugzilla.mozilla.org/show_bug.cgi?id=499628
答案 1 :(得分:0)
以这种方式绘制矩形怎么样?
var el = document.getElementById('canvas'),
ctx = el.getContext('2d');
ctx.save();
// draw Rect
ctx.fillStyle = 'red';
ctx.fillRect (100, 100, 100, 100); // <===
// draw Text
ctx.save();
ctx.textAlign = 'start';
ctx.fillStyle = "rgba(0,0,0,0.0)";
ctx.strokeStyle = "blue";
ctx.lineWidth = 2;
ctx.font = "bold 35pt sans-serif";
ctx.strokeText("Hello World !", 100, 280);
ctx.restore();
关于strokeText问题的编辑,似乎如果你在绘制之前绘制文本并填充路径修复它
var el = document.getElementById('canvas'),
ctx = el.getContext('2d');
// draw Text -> at first
ctx.save();
ctx.textAlign = 'start';
ctx.fillStyle = "rgba(0,0,0,0.0)";
ctx.strokeStyle = "blue";
ctx.lineWidth = 2;
ctx.font = "bold 35pt sans-serif";
ctx.strokeText("Hello World !", 100, 280);
ctx.save();
// draw Rect
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.lineTo(200, 100);
ctx.lineTo(200, 200);
ctx.lineTo(100, 200);
ctx.lineTo(100, 100);
ctx.closePath();
ctx.fillStyle = 'red';
ctx.fill();
ctx.restore();