2011-01-14 5 views
0

私はChromeまたはSafariで再現しないFF(3.6および4beta4)の下でstrokeTextで奇妙な結果に直面しています。 塗りつぶされたパスシェイプ(ストロークされていない)、ストロークされたテキストを描画すると、strokeText()が呼び出されたときにパスがストロークされます。ここでcontext2d.strokeText()は、FF3.6/4の下のパスをストロークします。

は私のコードです:

  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(); 

あなたがそれを実行した場合、それはいけない一方で、RECTは、青色でストロークされています。

このコードに何か問題があるか、それともFFのバグですか?

ありがとうございます!

+1

でしたか?strokeText()の前後にctx.beginPath()/ ctx.closePath()を試しましたか? –

+0

あなたが正しいです、それは問題を修正します。ありがとう! (私はFF4beta8にアップグレードしましたが、修正されています。下の自分の答えを参照してください。 –

答えて

0

この方法でrectを描画するのはどうですか?

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問題について以下EDIT、あなたがパスを描画し、充填する前にテキストを描画する場合は

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(); 
+0

本当に問題は修正されています。残念ながら、この回避策ではzオーダーが破られます(テキストは他の形で隠れることがあります)。 FFのキャンバスで... –

+0

@パトリックええ、私はそう考えています。あなたの特定のケースでは、fillRectを使用してより良いでしょう:) – stecb

+0

はい:-)しかし、私はすべての真実を言っていない;-)私dojoxキャンバスAPIをラップする.gfxここのコードは生成されたものです。 –

関連する問題