8

HTML5 キャンバスに円とテキストを描画するのに十分シンプルに思えましたが、直感的でない動作が発生します。円はきれいにきれいに描けるようになり、円を描けば描くほど古い円はどんどん八角形になっていきます。私には非常に奇妙です...また、テキストは古い円から消え、最後に描かれた円にのみ表示されます。キャンバスでこれを行う適切な方法は何ですか?

    $("#circles_container").on("click", "#circles_canvas", function(event) {
        var canvas = document.getElementById('circles_canvas');
        if (canvas.getContext) {
            var ctx = canvas.getContext("2d");
            var w = 16;
            var x = event.pageX;
            var y = Math.floor(event.pageY-$(this).offset().top);
            ctx.fillStyle = "rgb(200,0,0)";
            ctx.arc(x, y, w/2, 0, 2 * Math.PI, false);
            ctx.fill();

            ctx = canvas.getContext("2d");
            ctx.font = '8pt Calibri';
            ctx.fillStyle = 'white';
            ctx.textAlign = 'center';
            ctx.fillText('0', x, y+3);
        }
    });
4

1 に答える 1

11

これを関数の開始近くに追加するだけです:

ctx.beginPath();

あなたは常に長い道を描いていました。

スタック スニペットとJS Fiddle のデモ (キャンバスをクリック)

var canvas = document.getElementById('circles_canvas');
canvas.addEventListener("click", function(event) {
  if (canvas.getContext) {
    var ctx = canvas.getContext("2d");
    var w = 16;
    var x = Math.floor(event.pageX-this.offsetLeft);
    var y = Math.floor(event.pageY-this.offsetTop);
    
    ctx.beginPath();
    ctx.fillStyle = "rgb(200,0,0)";
    ctx.arc(x, y, w/2, 0, 2 * Math.PI, false);
    ctx.fill();

    ctx.font = '8pt Calibri';
    ctx.fillStyle = 'white';
    ctx.textAlign = 'center';
    ctx.fillText('0', x, y+3);
  }
})
canvas {
  border: 1px solid black;
}
<h1>Click Canvas Below</h1>
<canvas id="circles_canvas"></canvas>

于 2013-01-26T18:02:15.753 に答える