2011-12-11 15 views
2

私はhtml5に単純な線を描こうとしていますが、次の問題に気付きました。HTML5キャンバス描画基本線。それはバグですか?

下記のコードは素晴らしいです。それは最初の行を描画してから、私はすべての変更を参照してくださいいけない理由は、以下のコードは、必ず正確に同じではなくを行う必要があります正しく

topcanvas = document.getElementById("topborder"); 
topcontext = topcanvas.getContext("2d"); 

topcontext.clearRect(0, 0, topcanvas.width, topcanvas.height); 
    topcontext.moveTo(1, 0); 
    topcontext.lineTo(4,0); 
    topcontext.lineWidth = 3; 
topcontext.strokeStyle = "#ff0000"; 
topcontext.stroke(); 

線を描画します。出力は(4,0)

topcanvas = document.getElementById("topborder"); 
topcontext = topcanvas.getContext("2d"); 

    topcontext.clearRect(0, 0, topcanvas.width, topcanvas.height); 
    topcontext.moveTo(1000, 0); 
    topcontext.lineTo(4,0); 
    topcontext.lineWidth = 3; 
topcontext.strokeStyle = "#ff0000"; 
topcontext.stroke(); 

topcontext.clearRect(0, 0, topcanvas.width, topcanvas.height); 
    topcontext.moveTo(1, 0); 
    topcontext.lineTo(4,0); 
    topcontext.lineWidth = 3; 
topcontext.strokeStyle = "#ff0000"; 
topcontext.stroke(); 

キャンバス幅は1000とのIは、最終結果があることを期待するように(4,0)、(1,0)から(1000,0)からのラインでありますキャンバスをクリアするには、高さ3

+1

私も(それは*どこか* =^_^= http://jsfiddle.netに最小限の失敗のケースを考えてみましょう投稿バグだと確信しています)、他の人が(異なるブラウザで)問題を見て、修正された解決策を簡単に投稿できるようにします。 –

答えて

1

は、次の手順を実行します

topcanvas.width=topcanvas.width; 
+0

Brilliant!それはとてもうまくいく。 – Shoogle

+0

topcanvas.widthがtopcanvas.widthと同じでない理由は何ですか? – Shoogle

+2

これはそうではありませんが、widthが割り当てられているという事実は、基礎となるキャンバスの実装が以前に持っていたすべてのピクセルを忘れることになります。キャンバスの仕様を参照してください: "キャンバス要素が作成された後、幅と高さの属性が設定されるたびに(新しい値か以前の値かに関係なく)、ビットマップと関連するコンテキストをクリアして初期状態に戻す必要があります新たに指定された座標空間の寸法で再初期化されます。 –