第一次使用@ font-face将文本绘制到<canvas>无效

当我在具有通过@ font-face加载的字体的画布中绘制文本时,该文本无法正确显示。它根本不显示(在Chrome 13和Firefox 5中),或者字体错误(Opera 11)。此类意外行为仅在带有字体的第一个图形上发生。之后,一切正常。


这是标准行为还是什么?


谢谢。


PS:以下是测试用例的源代码


<!DOCTYPE html>

<html>

    <head>

        <meta charset="UTF-8">

        <title>@font-face and &lt;canvas&gt;</title>

        <style id="css">

@font-face {

    font-family: 'Press Start 2P';

    src: url('fonts/PressStart2P.ttf');

}

        </style>

        <style>

canvas, pre {

    border: 1px solid black;

    padding: 0 1em;

}

        </style>

    </head>

    <body>

        <h1>@font-face and &lt;canvas&gt;</h1>

        <p>

            Description: click the button several times, and you will see the problem.

            The first line won't show at all, or with a wrong typeface even if it does.

            <strong>If you have visited this page before, you may have to refresh (or reload) it.</strong>

        </p>

        <p>

            <button id="draw">#draw</button>

        </p>

        <p>

            <canvas width="250" height="250">

                Your browser does not support the CANVAS element.

                Try the latest Firefox, Google Chrome, Safari or Opera.

            </canvas>

        </p>

        <h2>@font-face</h2>

        <pre id="view-css"></pre>

        <h2>Script</h2>

        <pre id="view-script"></pre>

        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

        <script id="script">

var x = 30,

    y = 10;


$('#draw').click(function () {

    var canvas = $('canvas')[0],

        ctx = canvas.getContext('2d');

    ctx.font = '12px "Press Start 2P"';

    ctx.fillStyle = '#000';

    ctx.fillText('Hello, world!', x, y += 20);

    ctx.fillRect(x - 20, y - 10, 10, 10);

});

        </script>

        <script>

$('#view-css').text($('#css').text());

$('#view-script').text($('#script').text());

        </script>

    </body>

</html>


海绵宝宝撒
浏览 925回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP