2011-10-07 51 views
3

這是我的代碼。出於某種原因,它畫的線大多是灰色的。Canvas strokeStyle不可靠更改?

即使我的繪圖調用實際上沒有重疊,看起來似乎有一些線條是用兩個筆劃樣式在彼此之上繪製的。一些線條是白色的,內部灰色。我的白線比我的灰線厚,顯然它畫了兩條線。畫布繪製調用異步或什麼?

任何想法爲什麼?

 for (var i=0; i<minor_lanes.length; i++) { 
      connect(minor_lanes[i], "#333", 3); 
     } 

     for (var i=0; i<major_lanes.length; i++) { 
      connect(major_lanes[i], "#fff", 4); 
     } 

     for (var i=0; i<limited_lanes.length; i++) { 
      connect(limited_lanes[i], "#FFFF99", 2); 
     } 

     function connect(id, color, width) { 
      if (!id) { 
       return; 
      } 
      ctx.lineWidth = width; 
      ctx.strokeStyle = color; 
      $('#' + id).each(function() { 
      var laneX = parseInt($(this).css('left')) + $(this).width()/2; 
      var laneY = parseInt($(this).css('top')) + $(this).height()/2; 
      ctx.moveTo(x,y); 
      ctx.lineTo(laneX, laneY); 
      ctx.stroke(); 
      }); 
     } 

回答

6

我想你忘記

ctx.beginPath(); 
// draw path 
// stroke 
ctx.closePath(); 
+0

這做到了。所以我只是建立一條線路。畫布上的文檔非常稀疏。謝謝您的幫助。 – Joren

+1

如果你不知道[這個頁面],那麼「令人沮喪的稀疏」(http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html)另外, 'beginPath()'實際上會影響當前路徑 - 'closePath()'基本上將'lineTo()'添加到最後一個子路徑的開始位置,然後在該位置啓動一個新的子路徑。 – ellisbben