PORTFOLIO & WEB DESIGN MEMORANDOM BLOG   
PORTFOLIO & WEB DESIGN MEMORANDOM BLOG   

【JAVASCRIPT】10秒ごとに背景色をランダムに変化させるJavascriptの書き方

コード全体の書き方

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>ランダム背景色変更</title>
  7.     <style>
  8.         body {
  9.             transition: background-color 1s ease;
  10.         }
  11.     </style>
  12. </head>
  13. <body>
  14.     <script>
  15.         function getRandomColor() {
  16.             let color;
  17.             do {
  18.                 color = `rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`;
  19.             } while (isNearWhiteOrBlack(color));
  20.             return color;
  21.         }
  22.         function isNearWhiteOrBlack(rgb) {
  23.             // RGBを解析
  24.             const rgbValues = rgb.match(/\d+/g).map(Number);
  25.             const [r, g, b] = rgbValues;
  26.             // 色が白に近いか黒に近いかを判断する
  27.             const distanceToWhite = Math.sqrt((255 - r) ** 2 + (255 - g) ** 2 + (255 - b) ** 2);
  28.             const distanceToBlack = Math.sqrt(r ** 2 + g ** 2 + b ** 2);
  29.             return distanceToWhite < 100 || distanceToBlack < 100; // 距離が100未満の場合は白や黒に近いとみなす
  30.         }
  31.         function changeBackgroundColor() {
  32.             document.body.style.backgroundColor = getRandomColor();
  33.         }
  34.         // 初回即時実行
  35.         changeBackgroundColor();
  36.         // 10秒ごとに背景色を変更
  37.         setInterval(changeBackgroundColor, 10000);
  38.     </script>
  39. </body>
  40. </html>

getRandomColor関数がランダムなRGB値を生成し、それが白や黒に近い場合は再生成するようにしています。

白や黒に近いかどうかは、各色の距離を計算して判断しています。

そして、changeBackgroundColor関数が背景色を変更します。setIntervalを使って10秒ごとにこの関数を呼び出します。

styleでbodyにtransitionを適用させる

  1. body {
  2.  transition: background-color 1s ease;
  3.  }

背景色の変更が1秒間かけて滑らかに変化するように指定しています。

JavaScriptコード部分の解説

  1. function getRandomColor() {
  2. let color;
  3. do {
  4. color = `rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`;
  5. } while (isNearWhiteOrBlack(color));
  6. return color;
  7. }

getRandomColor 関数:

ランダムなRGB値を生成し、それを rgb(r, g, b) 形式の文字列として返す関数です。
do…while ループを使って、生成された色が白または黒に近いかどうかを確認し、近い場合は新しい色を生成し直します。

  1. function isNearWhiteOrBlack(rgb) {
  2. // RGBを解析
  3. const rgbValues = rgb.match(/\d+/g).map(Number);
  4. const [r, g, b] = rgbValues;
  5. // 色が白に近いか黒に近いかを判断する
  6. const distanceToWhite = Math.sqrt((255 - r) ** 2 + (255 - g) ** 2 + (255 - b) ** 2);
  7. const distanceToBlack = Math.sqrt(r ** 2 + g ** 2 + b ** 2);
  8. return distanceToWhite < 100 || distanceToBlack < 100; // 距離が100未満の場合は白や黒に近いとみなす
  9. }

isNearWhiteOrBlack 関数:

rgb(r, g, b) 形式の文字列を受け取り、その色が白または黒に近いかどうかを判断します。
rgb 値を解析し、各成分(r, g, b)を取得します。
色が白に近いか黒に近いかを、ユークリッド距離を使って計算します。
白または黒に近い場合は true を返し、そうでない場合は false を返します。

  1. function changeBackgroundColor() {
  2. document.body.style.backgroundColor = getRandomColor();
  3. }

changeBackgroundColor 関数:

getRandomColor 関数を呼び出してランダムな色を取得し、その色を document.body.style.backgroundColor に設定します。

  1. // 初回即時実行
  2. changeBackgroundColor();

初回の背景色変更:

changeBackgroundColor 関数を呼び出して、ページ読み込み時に背景色を即時に変更します。

  1. // 10秒ごとに背景色を変更
  2. setInterval(changeBackgroundColor, 10000);

10秒ごとに背景色を変更:

setInterval(changeBackgroundColor, 10000) を使って、10秒ごとに changeBackgroundColor 関数を呼び出し、背景色を変更します。

ランダムに背景色変化サンプル

http://kobaya.s370.xrea.com/sample_js2.html

MILMONA   MILMONA   MILMONA   MILMONA   MILMONA   
MILMONA   MILMONA   MILMONA   MILMONA   MILMONA