2016-11-15 30 views
2

我不明白爲什麼我的線是不能畫繪畫時不能呆在這。我正在試圖結合2'圖紙'。畫布上的線條從另一個功能

  • 網格(平得很清楚)。
  • 一些其他的線(也很好地繪製)。

但是當我結合2,我失去了我的線條,或者他們似乎沒有得到繪製。

*請注意,我有2個功能,各獲得上下文。再次,我可以繪製一個,但不能繪製另一個(它們不在畫布上)。另外,閱讀另一個StackOverflow問題,通過添加一個beginPath()來回答,沒有區別。 this one是無用的。

我缺少/做錯了嗎?

var canvas = document.getElementById("canvasId"); 
 
canvas.width = 300; 
 
canvas.height = 300; 
 
var ctx = canvas.getContext("2d"); 
 
printLogContext(ctx); 
 
console.log(`__________`); 
 

 
ctx.beginPath(); 
 
//drawGrid(ctx, 300, 300); 
 
drawAxes(ctx); 
 
drawGrid(ctx, 300, 300); 
 

 
function drawAxes(context) { 
 
    printLogContext(context); 
 
    context.beginPath; 
 
    context.strokeStyle = "000000"; 
 
    context.beginPath(); 
 

 
    context.moveTo(0, 150); 
 
    context.lineTo(300, 150); 
 

 
    context.moveTo(150, 0); 
 
    context.lineTo(150, 300); 
 

 
    context.stroke(); 
 
    context.closePath(); 
 

 
} 
 

 
function drawGrid(ctx, width, height) { 
 
    var step = 10; 
 
    ctx.strokeStyle = "#E5F7F6"; 
 
    //resetTransform(ctx); 
 
    for (var row = 0; row < width; row = row + step) { 
 
    ctx.moveTo(0, row); 
 
    ctx.lineTo(width, row); 
 
    ctx.stroke(); 
 
    } 
 

 
    for (var col = 0; col < height; col = col + step) { 
 
    ctx.moveTo(col, 0); 
 
    ctx.lineTo(col, height); 
 
    ctx.stroke(); 
 
    } 
 
} 
 

 
function printLogContext(ctx) { 
 
    (ctx) ? console.log(`Have ctx`): console.log(`Don't habe ctx`); 
 
}
<canvas id="canvasId" style="border: solid"></canvas>

回答

3

它借鑑這兩種功能就好了。

的問題是,黑軸由淺藍網格覆蓋。

如果更改的功能的順序,你會看到軸爲好。

你也必須使用#定義顏色時,甚至黑色

var canvas = document.getElementById("canvasId"); 
 
canvas.width = 300; 
 
canvas.height = 300; 
 
var ctx = canvas.getContext("2d"); 
 
printLogContext(ctx); 
 
console.log(`__________`); 
 

 
drawGrid(ctx, 300, 300); 
 
drawAxes(ctx); 
 

 
function drawAxes(context) { 
 
    printLogContext(context); 
 
    context.strokeStyle = "#000000"; 
 
    context.beginPath(); 
 

 
    context.moveTo(0, 150); 
 
    context.lineTo(300, 150); 
 

 
    context.moveTo(150, 0); 
 
    context.lineTo(150, 300); 
 

 
    context.stroke(); 
 
    context.closePath(); 
 

 
} 
 

 
function drawGrid(ctx, width, height) { 
 
    var step = 10; 
 
    ctx.strokeStyle = "#E5F7F6"; 
 
    //resetTransform(ctx); 
 
    for (var row = 0; row < width; row = row + step) { 
 
    ctx.moveTo(0, row); 
 
    ctx.lineTo(width, row); 
 
    ctx.stroke(); 
 
    } 
 

 
    for (var col = 0; col < height; col = col + step) { 
 
    ctx.moveTo(col, 0); 
 
    ctx.lineTo(col, height); 
 
    ctx.stroke(); 
 
    } 
 
} 
 

 
function printLogContext(ctx) { 
 
    (ctx) ? console.log(`Have ctx`): console.log(`Don't habe ctx`); 
 
}
<canvas id="canvasId" style="border: solid"></canvas>

+0

上帝,我覺得自己很蠢。如果你看,我確實嘗試了正確的順序。我之後評論了它。我以爲我有那個#號。捂臉!謝謝你的眼睛! –

+0

如果可以,請跟進...有沒有辦法讓黑線始終存在(不使用圖像或放置的順序)? –

+0

@TinklePooplebottham我不會真的知道,因爲我只使用畫布進行簡單的事情。看來儘管在ctx.beginPath()和ctx.closePath()中包裝每行(*在兩個循環*中)將允許軸顯示(*部分覆蓋*),但我無法解釋爲什麼... –