質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

571閲覧

forの処理を中断してある条件下で再開させる方法

masayukikun

総合スコア33

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/10/26 03:16

編集2021/10/26 03:26

forで画像を生成し、生成した画像のロードが終わるまで処理を待機し、再開することはできますか

<script> window.onload=function(){ for(i=0;i<100;i++){ img=document.createElement("img"); img.src=""//かなり重い画像を読み込む 画像は毎度別と仮定する //↓読込が終わるまでループを停止 img.addEventListener('load', function() { //ループを再開する }); document.body.appendChild(img); } } </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2021/10/26 03:30 編集

質問内容をガラッと変えましたね・・・ 1枚読むごとに表示したいのでしょうか? それとも全部読んだ後に表示したいのでしょうか? img.srcはfor文の中でどうやってユニークに指定するつもりでしょうか?
guest

回答2

0

ベストアンサー

昔は重い画像はImageオブジェクトで先読みするのが流行っていましたが
こういうのではだめなのでしょうか?

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 const tmp=new Image(); 4 tmp.src="重い画像"; 5 const img=document.createElement("img"); 6 img.setAttribute('alt','loading'); 7 document.body.appendChild(img); 8 tmp.addEventListener('load', function() { 9 img.src=tmp.src; 10 img.setAttribute('alt',''); 11 }); 12}); 13</script>

※そもそもそんなに重い画像を表示させることが良いかどうかが疑問ですが

forでの処理

配列に設定してある画像を1枚ずつ順番に表示する。

javascript

1window.addEventListener('DOMContentLoaded', async()=>{ 2 const imgs=["1.jpg","2.jpg","3.jpg"]; 3 for(src of imgs){ 4 const tmp=new Image(); 5 tmp.src=src; 6 const img=document.createElement("img"); 7 img.setAttribute('alt','loading'); 8 document.body.appendChild(img); 9 await new Promise(resolve=>{ 10 tmp.addEventListener('load', function() { 11 img.src=tmp.src; 12 resolve(); 13 }); 14 }); 15 } 16});

投稿2021/10/26 03:25

編集2021/10/26 03:42
yambejp

総合スコア115012

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masayukikun

2021/10/26 03:28

勝手ながらより具現性の高い訂正をしました もしおわかりでしたらお答えいただけると幸いです
yambejp

2021/10/26 03:31

質問への追記修正希望に書いちゃいましたが 1枚読むごとに表示したいのでしょうか? それとも全部読んだ後に表示したいのでしょうか? img.srcはfor文の中でどうやってユニークに指定するつもりでしょうか?
masayukikun

2021/10/26 03:34

1枚読むごとに表示したいのでしょうか? その通りでございます 1つ目読込完了までループ待機→2つ目生成→2つ目読込完了までループ待機→以降100まで という形にしたいです
masayukikun

2021/10/26 03:36

img.srcはfor文の中でどうやってユニークに指定するつもりでしょうか? 連番でもいいですし、配列でもいいと考えています
yambejp

2021/10/26 03:36

srcの指定は? 同じ画像を指定する場合はキャッシュで1で読んだ画像が一気に表示可能です
masayukikun

2021/10/26 03:38 編集

画像は1枚ごとに違う重い画像を指定しますのでキャッシュは効きません
yambejp

2021/10/26 03:43

追記しておきました
guest

0

async/awaitを利用するのはいかがでしょうか。

html

1<script> 2window.onload = async function (event) { 3 for (let index = 0; index < 100; index++) { 4 const img = document.createElement("img"); 5 6 img.src = `image.jpg`; 7 8 document.body.appendChild(img); 9 10 await new Promise((resolve) => { img.onload = resolve; }); 11 12 console.log("loaded!"); 13 } 14}; 15</script>

投稿2021/10/26 03:37

KAOsaka

総合スコア531

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問