EventTarget.addEventListener('click', listener)
のように簡単に処理を追加できるわけではない。そこで当記事では、「Canvas上にある四角と丸のオブジェクトをクリックしたら色がかわる」というサンプルを元に、オブジェクトのクリック判定やクリックされたときに処理を実行する方法について解説する。
EventTarget.addEventListener('click', listener)
のように簡単に処理を追加できるわけではない。Property $logger does not exist on type 'Store<RootState>'
のようなエラーが発生する。this.$xxx
にアクセスするための型定義の作り方について紹介する。const pickN = (min, max, n) => {
const list = new Array(max-min+1).fill().map((_, i) => i + min);
const ret = [];
while(n--) {
const rand = Math.floor(Math.random() * (list.length + 1)) - 1;
ret.push(...list.splice(rand, 1))
}
return ret;
}
const list1 = pickN(1, 100, 30);
console.log(list1);
// [47, 69, 19, 73, 27, 35, 68, 21, 88, 41, 86, 14, 50, 42, 94, 26, 2, 43, 83, 76, 57, 31, 97, 45, 84, 99, 46, 22, 9, 81]
const list2 = pickN(500, 800, 10);
console.log(list2);
// [714, 557, 523, 760, 750, 677, 632, 566, 798, 587]
new Array(max - min + 1).fill().map((_, i) => i + min)
は、min〜mixまでの値が入った配列を生成している。そして、ret.push(...list.splice(rand, 1))
でさきほどの配列からランダムな位置の1つの値を取得し、結果用の配列に追加している。<video id="camera"></video>
async function main() {
const video = document.querySelector("video#camera");
// MediaStreamを取得する(Promiseが返る)
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
video.srcObject = stream;
// MediaStreamが取得できたら再生する
video.onloadedmetadata = () => video.play();
}
main();
今回は映像だけを使いたいので、mediaDevices.getUserMedia
に{video: true}
を指定したが、音声も使いたい場合は{video: true, audio: true}
のように指定する。npm run dev
でそのまま実行するとhttp://localhost:3000
でサーバーが起動する。Nuxt.js単体で開発する分にはこれで問題ないのだが、他サービスが関わってくるとできればhttpsでアクセスできるようにしたい。requestAnimationFrame
とsetInterval
setTimeout
には明確な違いがある。requestAnimationFrame
はブラウザの状態により実行間隔を自動で調整してくれるのに対し、setInterval
setTimeout
は時間どおりに実行するため、処理がすべて終わる前に次の処理が実行されてしまう。fs.readdirSync(path, { recursive: true })
なんてオプションがあったら便利なのに。