|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- const music = new Audio ('music.mp3'); // BGM
- let playing = false; // 再生フラグ
- let nowPlay = true; // 再生すべきかどぅか
-
- document.getElementById ('sort').addEventListener ('change', sortChange);
-
- /*
- * BGM を再生しよぅとする.
- *
- * 戻り値は,なし.
- */
- async function
- PlayMusic ()
- {
- // 再生中でなぃ場合
- if (playing === false)
- {
- // BGM を再生しよぅとする.
- try
- {
- await music.play ();
- music.loop = true;
-
- playing = true;
- nowPlay = true;
-
- // オン/オフ・ボタン
- document.getElementById ('mute').innerHTML = 'BGM がうるさい人用';
- }
- catch (err)
- {
- playing = false;
- }
- }
- }
-
- /*
- * BGM の消音切替
- *
- * 戻り値は,なし.
- */
- function
- PauseMusic ()
- {
- // 切替
- if (nowPlay && playing) // 再生中の場合
- {
- music.muted = true;
- document.getElementById ('mute').innerHTML = 'やっぱり BGM が恋しい人用';
-
- nowPlay = false;
- }
- else // 消音中の場合
- {
- music.muted = false;
- document.getElementById ('mute').innerHTML = 'BGM がうるさい人用';
-
- nowPlay = true;
- }
- }
-
- // 1000 ms ごとに BGM 再生試行
- window.setInterval (function
- ()
- {
- PlayMusic ();
- },
- 1000);
-
- // 画面クリックで BGM 再生試行
- document.addEventListener ('click', function
- ()
- {
- PlayMusic ();
- });
-
- // 画面タッチで BGM 再生試行
- document.addEventListener ('touchstart', function
- ()
- {
- PlayMusic ();
- });
-
- const body = document.getElementsByTagName ('body')[0]; // body 要素
- const cv = document.getElementById ('work'); // 作業用 Canvas
- const g = cv.getContext ('2d'); // 作業用 Canvas のコンテクスト
-
- const list = ['magenta', 'lime', 'cyan', 'yellow', 'orange', 'pink', 'aliceblue',
- 'antiquewhite', 'aqua', 'aquamarine', 'bisque', 'lightgreen', 'linen',
- 'lightsalmon', 'darkorange', 'palegreen'];
- // 色リスト
- let nowColour = Math.floor (Math.random () * list.length);
- // 前の色番号
- let nextColour = Math.floor (Math.random () * list.length);
- // 次の色番号
- let [tempR, tempG, tempB] = getRGB (list[nowColour]);
- // 現在の RGB 値
-
- // 3000 ms ごとに次の色指定
- window.setInterval (function
- ()
- {
- nowColour = nextColour;
- nextColour = Math.floor (Math.random () * list.length);
- },
- 3000);
-
- // 20 ms ごとに,ぢょぢょに,色変更
- window.setInterval (function
- ()
- {
- let [nowR, nowG, nowB] = getRGB (list[nowColour]);
- let [nextR, nextG, nextB] = getRGB (list[nextColour]);
-
- body.style.backgroundColor = `rgb(${tempR}, ${tempG}, ${tempB})`;
-
- tempR += (nextR - nowR) / 150;
- tempG += (nextG - nowG) / 150;
- tempB += (nextB - nowB) / 150;
- },
- 20);
-
- /*
- * カラ・コゥド c を RGB 値に変換する.
- *
- * 戻り値は,RGB 値排列.
- */
- function
- getRGB (c)
- {
- g.fillStyle = c;
- g.fillRect (0, 0, 1, 1);
-
- const img = g.getImageData (0, 0, 1, 1);
- const px = img.data;
- const rgb = [px[0], px[1], px[2]];
-
- return rgb;
- }
-
- function
- sortChange (evt)
- {
- const searchParams = new URLSearchParams (window.location.search);
-
- switch (evt.currentTarget.value)
- {
- default:
- window.location.href = `./?thread=${searchParams.get ('thread')}&sort=td`;
-
- break;
-
- case 'evaluate-good':
- window.location.href = `./?thread=${searchParams.get ('thread')}&sort=eg`;
-
- break;
-
- case 'time-asc':
- window.location.href = `./?thread=${searchParams.get ('thread')}&sort=ta`;
-
- break;
-
- case 'evaluate-bad':
- window.location.href = `./?thread=${searchParams.get ('thread')}&sort=eb`;
-
- break;
- }
- }
-
|