簡體   English   中英

我可以使用數組來引用分層畫布的上下文嗎?

[英]Can I use an array to reference the context of layered canvases?

我已經編寫了一個能夠創建多層畫布的函數,並且我想用一個數組(ctx [n])引用每個畫布的上下文,但是我真的很難理解我做錯了什么。 我對javascript還是相當陌生,所以希望能對您有所幫助。

我已經將我的代碼分離到一個測試文檔中(見下文)。 我正在使用[0]作為測試基礎。 如果我將ctx [0]替換為任何其他變量名稱,則該代碼有效。 我在做些很愚蠢的事情嗎? 還是無法為此目的使用數組?

var ctx = [];
var canv = [];
txt.innerHTML = "Paragraph text has been changed";
createCanv(0, 0, 0, 250, 100, 2);
textFade(1, "Hello!");

function textFade(ctx, text){
    ctx[0].clearRect(0, 0, canv[0].width, canv[0].height);
    ctx[0].font = "bold 25px verdana";
    ctx[0].fillStyle = "rgba(255, 0, 0, 0.9)";
    ctx[0].fillText(text,canv[0].width/2,canv[0].height/2);
}

function createCanv(c, x, y, w, h, z) {
    canv[0] = document.createElement("canvas");
    canv[0].id = "canv" + c;
    document.body.appendChild(canv[0]);
    canv[0].style.background = "rgba(196, 196, 255, 0.8)";
    canv[0].style.position = "absolute";
    canv[0].style.top = y + "px";
    canv[0].style.left = x + "px";
    canv[0].style.zIndex = z;
    canv[0].width = w;
    canv[0].height = h;
}

您致電:

textFade(1,"Hello!");

但是簽名是:

function textFade(ctx,text)

因此,您傳遞的索引不是對象或數組。

您應該這樣更改代碼:

function textFade(ctx,text){
    canv[ctx].clearRect(0,0,canv[0].width,canv[0].height);
    canv[ctx].font="bold 25px verdana";
    canv[ctx].fillStyle="rgba(255,0,0,0.9)";
    canv[ctx].fillText(text,canv[0].width/2,canv[0].height/2);
}

我不知道您是否只是沒有提供相關代碼,或者您尚未實現它,但是我想像它應該像這樣。

var ctx=[];
var canv=[];
txt.innerHTML="Paragraph text has been changed";
var canvas = createCanv(0, 0, 0, 250, 100, canv.length); // this assumes each new canvas will sit on top of the previous
canv.push(canvas);
ctx.push(canvas.getContext("2d"));
textFade(ctx.length - 1,"Hello!");

function textFade(ctxInd,text){
   ctx[ctxInd].clearRect(0,0,canv[ctxInd].width,canv[ctxInd].height);
   ctx[ctxInd].font="bold 25px verdana";
   ctx[ctxInd].fillStyle="rgba(255,0,0,0.9)";
   ctx[ctxInd].fillText(text,canv[ctxInd].width/2,canv[ctxInd].height/2);
}

function createCanv(c, x, y, w, h, z) {
   var can = document.createElement("canvas");
   can.id = "canv" + c;
   document.body.appendChild(can);
   can.style.background = "rgba(196,196,255,0.8)";
   can.style.position = "absolute";
   can].style.top = y + "px";
   can.style.left = x + "px";
   can.style.zIndex = z;
   can.width = w;
   can.height = h;
   return can;
}

我也不會以這種方式設置所有這些CSS屬性。 使用樣式類使用通用設置修改所有畫布,然后手動設置z索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM