キャンバスでの複数描画の順番の説明
2022-01-31 01:21:32
開発において、canvasを使って複数の絵を同時に描く必要がある場合、絵のサイズが異なるため、配列の前にある絵を先に読み込んでから描くと、描いた絵の順番が期待通りにならないことがあります(特にクロスドメイン・リダイレクトの絵のため)、私の解決策は:最初に全部描いてから並べ替えて 私の解決策は、全部描いてから、目的のノードに追記する前に並び替えることです。
<div id="myContent"></div>
let imgArray = ['img1.png', 'img2.png'];
let receiveArray = new Array();
let $myContent = document.getELmentById("myContent");
let {imgW, imgH} = {300, 300};
let Canvas = document.createElement('canvas');
let ctx = Canvas.getContext("2d");
let scaleBy = 2;
Canvas.width = imgW * scaleBy;
Canvas.height = imgH * scaleBy;
imgArray.forEach((e, idx) => {
let img = new Image();
img.src = e;
e.addEventListener('load', () => {
ctx.drawImage(img, 0, 0, imgW * scaleBy, imgH * scaleBy);
let imgCont = new Image();
imgCont.src = Canvas.toDataURL();
imgCont.id = 'img' + idx;
receiveArray.push(imgCont); // collect the drawn img nodes into the array, the order here may be different from the order of imgArray
if (receiveArray.length === imgArray.length) { // all images loaded and drawn
let sortArr = new Array();
receiveArray.forEach(ex => { // sort all drawn images by imgArray order
sortArr[ex.id.split('img')[1]] = ex;
})
sortArr.forEach(ex2 => {
$myContent.appendChild(ex2)
})
}
})
})
実際には、これは少し無力なアプローチは、それがロードされた画像の実際のサイズを決定することは不可能であるため、小さな画像がロードされ、最初に描画される、リダイレクトされたドメインは、この現象を増加させる場合は、図面とその後のソートの練習の使用です。誰もがより良い方法を考えている場合は、批判を歓迎します。
以上が今回の記事の全てです、勉強になれば幸いです、そしてスクリプトハウスを応援していただければ幸いです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン