| asyncとawaitによる同期処理 |
| javascriptで順番を守って実行したい場合は asyncとawaitを使って実装する方法があります。 |
const b1 = document.getElementById("btn1");
const b2 = document.getElementById("btn2");
let pageIndex=0;
let pageMax=8;
displayScreen();
//戻る
b1.addEventListener("click", () =>
{
//画像を表示する
//ストーリーを表示する
//ボタンの表示有無
pageIndex--;
if(pageIndex < 0) pageIndex = 0;
displayScreen(pageIndex, 0);
});
//進む
b2.addEventListener("click", () =>
{
pageIndex++;
if(pageIndex >= pageMax)pageIndex = pageMax - 1;
displayScreen(pageIndex, 1);
});
async function displayScreen()
{
await task1();//画像
await task2();//ストーリー
await task3();//ページ番号
await task4();//ボタン表示切り替え
}
//画像
async function task1()
{
return new Promise(resolve =>
{
let path = "";// ex.)img/
let file = "";
switch(pageIndex)
{
case 0:
file ="nawmin_sample2.png";//くま
break;
case 1:
file ="nawmin_sample4.png";//農家の人
break;
case 2:
file ="nawmin_sample2.png";//くま
break;
case 3:
file ="nawmin_sample5.png";//野菜セット
break;
case 4:
file ="nawmin_sample2.png";//くま
break;
case 5:
file ="nawmin_sample3.png";//どんぐり
break;
case 6:
file ="nawmin_sample2.png";//くま
break;
case 7:
file ="nawmin_sample4.png";//農家の人
break;
}
const d1 = document.getElementById("screen");
d1.src=path+file;
resolve();
});
}
//ストーリー
async function task2()
{
return new Promise(resolve =>
{
let story = "";
switch(pageIndex)
{
case 0:
story = "こんにちは";
break;
case 1:
story = "おや、どうしたんだい?";
break;
case 2:
story = "お腹へっちゃって";
break;
case 3:
story = "野菜はどう?";
break;
case 4:
story = "それは、ちょっと";
break;
case 5:
story = "あぁ、そういえばこれ拾ったんだった。\n(どんぐりを差し出す)";
break;
case 6:
story = "いいの?\nありがとう";
break;
case 7:
story = "どういたしまして\n(こうしてくまさん森へ帰っていきました。)";
break;
}
const d1 = document.getElementById("story");
d1.innerText = story;
resolve();
});
}
//ページ番号
async function task3()
{
return new Promise(resolve =>
{
const d1 = document.getElementById("pageNo");
d1.textContent = (pageIndex + 1) + "/" + pageMax;
resolve();
});
}
//ボタン表示切り替え
async function task4()
{
return new Promise(resolve =>
{
const b1 = document.getElementById("btn1");
const b2 = document.getElementById("btn2");
b1.style.visibility="visible";
b2.style.visibility="visible";
if(pageIndex==0)
{
b1.style.visibility="hidden";
}
if(pageIndex + 1 == pageMax)
{
b2.style.visibility="hidden";
}
resolve();
});
}
| [URL]イラスト:農民イラスト | |
| URL[https://nawmin.stores.jp][クリックすると開きます]) |
| Synchronous processing with async and await |
| if you wanto to execute things in order unsing JavaScript, you can implement it using async and await. |
const b1 = document.getElementById("btn1");
const b2 = document.getElementById("btn2");
let pageIndex=0;
let pageMax=8;
displayScreen();
//back
b1.addEventListener("click", () =>
{
//Displaying images
//View the story
//Display of button
pageIndex--;
if(pageIndex < 0) pageIndex = 0;
displayScreen(pageIndex, 0);
});
//forward
b2.addEventListener("click", () =>
{
pageIndex++;
if(pageIndex >= pageMax)pageIndex = pageMax - 1;
displayScreen(pageIndex, 1);
});
async function displayScreen()
{
await task1();//image
await task2();//story
await task3();//page no
await task4();//Button display switching
}
//image
async function task1()
{
return new Promise(resolve =>
{
let path = "";// ex.)img/
let file = "";
switch(pageIndex)
{
case 0:
file ="nawmin_sample2.png";//bear
break;
case 1:
file ="nawmin_sample4.png";//Farmer
break;
case 2:
file ="nawmin_sample2.png";//bear
break;
case 3:
file ="nawmin_sample5.png";//Vegetable set
break;
case 4:
file ="nawmin_sample2.png";//bear
break;
case 5:
file ="nawmin_sample3.png";//Acorns
break;
case 6:
file ="nawmin_sample2.png";//bear
break;
case 7:
file ="nawmin_sample4.png";//Farmer
break;
}
const d1 = document.getElementById("screen");
d1.src=path+file;
resolve();
});
}
//story
async function task2()
{
return new Promise(resolve =>
{
let story = "";
switch(pageIndex)
{
case 0:
story = "Hello";
break;
case 1:
story = "Hey, what's wrong?";
break;
case 2:
story = "I'm hungry";
break;
case 3:
story = "What about vegetables?";
break;
case 4:
story = "That's a bit";
break;
case 5:
story = "Ah, that reminds me, I picked this up. \n (Hands over the acorn)";
break;
case 6:
story = "Is that okay?\nThank you";
break;
case 7:
story = "You're welcome.\n(And so the bear returned to the forest.)";
break;
}
const d1 = document.getElementById("story");
d1.innerText = story;
resolve();
});
}
//page no
async function task3()
{
return new Promise(resolve =>
{
const d1 = document.getElementById("pageNo");
d1.textContent = (pageIndex + 1) + "/" + pageMax;
resolve();
});
}
//Button display switching
async function task4()
{
return new Promise(resolve =>
{
const b1 = document.getElementById("btn1");
const b2 = document.getElementById("btn2");
b1.style.visibility="visible";
b2.style.visibility="visible";
if(pageIndex==0)
{
b1.style.visibility="hidden";
}
if(pageIndex + 1 == pageMax)
{
b2.style.visibility="hidden";
}
resolve();
});
}
| [URL]illustration by nawmin.com | |
| URL[https://nawmin.stores.jp][click to open the homepage]) |
| ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。 ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、 または公開したりすることはできません。 当方は、ホームペーよびアプリ利用したいかなる理由によっての障害等が発生しても、 その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について 一切の責任を負わないものとします。 |