2012-05-17 6 views
1

하나 이상의 캔버스 요소를 추가하고 페이지로드시로드해야하는 html 페이지가 있습니다.하나의 HTML 페이지에 여러 HTML 캔버스 요소 그리기

function draw() 
{ 
var c=document.getElementById("myCanvas"); 
var padding = 20; 
var ctx=c.getContext("2d"); 
var grd=ctx.createLinearGradient(0,0,175,50); 
grd.addColorStop(0,"#E05D1B"); 
grd.addColorStop(1,"#00FF00"); 
ctx.fillStyle=grd; 
ctx.fillRect(0,0,275,50); 
} 

<canvas id="myCanvas" width="250" height="8" style="margin-bottom:10px;margin-left:10px;"> 
<img src="images\gradient1.png" style="margin-bottom:10px;margin-left:10px;"/> 
</canvas> 

다른 ID로이 코드를 추가하지만 자바 스크립트를 다시 코딩해야합니다. 어떻게 줄일 수 있니?

<canvas id="myCanvas1" width="250" height="8" style="margin-bottom:10px;margin-left:10px;"> <img src="images\gradient1.png" style="margin-bottom:10px;margin-left:10px;"/> </canvas> 
+0

"축소"해야합니까? 그게 무슨 뜻 이니? –

+0

만약 draw 함수를 보면 다중 코드 라인을 추가 할 필요가있는 여러 아이템에 대해 하나의 id myCanvas를 가질 수 있습니다; 어떻게 일반화 할 수 있습니까? 아니면 코드 줄을 줄일 수 있습니까? – GOK

답변

5

당신은 당신의 그리기 기능 (fiddle)에 매개 변수로 별도의 캔버스 요소의 컨텍스트를 전달할 수 : 당신이 얼마나 많은 캔버스 요소에 따라

function draw(ctx) 
{ 
    var grd=ctx.createLinearGradient(0,0,175,50); 
    grd.addColorStop(0,"#E05D1B"); 
    grd.addColorStop(1,"#00FF00"); 
    ctx.fillStyle=grd; 
    ctx.fillRect(0,0,275,50); 
} 

draw(document.getElementById("canvas_1").getContext("2d")); 
draw(document.getElementById("canvas_2").getContext("2d")); 

또는, 더 할 수있다 루프에서 드로잉 함수를 호출하는 것이 효율적입니다 (fiddle) :

function draw(ctx) 
{ 
    var grd=ctx.createLinearGradient(0,0,175,50); 
    grd.addColorStop(0,"#E05D1B"); 
    grd.addColorStop(1,"#00FF00"); 
    ctx.fillStyle=grd; 
    ctx.fillRect(0,0,275,50); 
} 

var i = 1; 
while (document.getElementById("canvas_" + i)) { 
    draw(document.getElementById("canvas_" + i).getContext("2d")); 
    i ++;  
} 
+2

더 나은 DI 방법은 컨텍스트 개체 자체를 전달하는 것입니다. 그러나 그것도 작동합니다. –

+0

의견을 보내 주셔서 감사합니다. –

+0

대단히 감사합니다. 캔버스 요소에 루핑이 문제를 해결하고 매우 쉬운 방법으로 .. :) – GOK