context2d.strokeText () обводит путь по FF3.6 / 4 - PullRequest
0 голосов
/ 14 января 2011

Я сталкиваюсь со странным эффектом strokeText в FF (3.6 и 4beta4), который не воспроизводится в 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?

Спасибо!

Ответы [ 2 ]

1 голос
/ 14 января 2011

Это было исправлено в Firefox 4 beta 8. (только что протестировано ...).Я думаю, что связанная ошибка: https://bugzilla.mozilla.org/show_bug.cgi?id=499628

0 голосов
/ 14 января 2011

А как насчет рисования прямоугольника таким образом?

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...