JavaScriptで条件分岐を使ったスタイルの動的変更方法

JavaScriptは、ウェブ開発において非常に強力で柔軟なプログラミング言語です。その中でも、条件分岐を使ったスタイルの動的変更は、インタラクティブでユーザーエクスペリエンスを向上させるための重要なテクニックです。本記事では、JavaScriptの基本的な条件分岐の使い方から、実際にスタイルを動的に変更する具体的な方法まで、詳細に解説します。これにより、開発者はユーザーの操作や環境に応じてリアルタイムにウェブページの見た目を変更し、より魅力的で応答性の高いウェブサイトを作成することができます。次に、JavaScriptの条件分岐の基本的な使い方を見ていきましょう。

目次
  1. JavaScriptの基本的な条件分岐
    1. if文
    2. if…else文
    3. else if文
    4. switch文
  2. HTMLとCSSの準備
    1. 基本的なHTML構造
    2. 基本的なCSS設定
    3. スタイル変更のためのJavaScriptファイル
  3. JavaScriptでのスタイル変更の基本
    1. 要素の取得とスタイルの変更
    2. 複数のスタイルを一度に変更
    3. クラスの追加と削除
  4. 条件分岐を用いたスタイル変更
    1. ウィンドウの幅に基づくスタイル変更
    2. フォームの入力値に基づくスタイル変更
    3. 時間帯に基づくスタイル変更
  5. ユーザーアクションによるスタイル変更
    1. ボタンクリックによるスタイル変更
    2. ホバーによるスタイル変更
    3. 入力フィールドのフォーカスによるスタイル変更
    4. ダブルクリックによるスタイル変更
  6. 時間帯によるスタイル変更
    1. 時間帯に基づく背景色の変更
    2. 時間帯に基づくメッセージの表示
    3. 時間帯に基づくスタイルシートの切り替え
  7. デバイスによるスタイル変更
    1. デバイスの種類を判別する方法
    2. デバイスに応じたスタイル変更
    3. デバイスごとに異なるCSSファイルを適用
    4. メディアクエリを使用したスタイル変更
  8. 応用例:テーマの切り替え
    1. HTMLの準備
    2. CSSの準備
    3. JavaScriptでテーマ切り替えを実装
    4. ローカルストレージを使用したテーマの保存
  9. デバッグとトラブルシューティング
    1. コンソールエラーメッセージの確認
    2. 要素が正しく取得されているか確認
    3. CSSの競合を確認
    4. JavaScriptのエラーを確認
    5. 非同期処理の確認
    6. ブラウザの互換性を確認
    7. テストの実行
  10. 演習問題
    1. 演習問題1: ボタンクリックで背景色を変更
    2. 演習問題2: 入力フィールドに基づくスタイル変更
    3. 演習問題3: 時間帯に応じた挨拶メッセージ
    4. 演習問題4: デバイスによるスタイルの変更
  11. まとめ

JavaScriptの基本的な条件分岐

JavaScriptでは、条件分岐を使ってプログラムの流れを制御することができます。条件分岐を使用すると、特定の条件が満たされた場合にのみ特定のコードを実行することができます。ここでは、代表的な条件分岐であるif文とswitch文について説明します。

if文

if文は、最も基本的な条件分岐の方法です。指定した条件が真(true)である場合に、コードブロックが実行されます。以下にif文の基本的な構文を示します。

if (条件) {
    // 条件が真の場合に実行されるコード
}

例えば、変数xの値が10より大きい場合に特定のコードを実行するには、次のように書きます。

let x = 15;

if (x > 10) {
    console.log("xは10より大きいです");
}

if…else文

if文に加えて、else文を使用することで、条件が偽(false)である場合に別のコードを実行することができます。

if (条件) {
    // 条件が真の場合に実行されるコード
} else {
    // 条件が偽の場合に実行されるコード
}

例えば、xの値が10より大きい場合とそれ以外の場合で異なるメッセージを表示するには、次のように書きます。

let x = 5;

if (x > 10) {
    console.log("xは10より大きいです");
} else {
    console.log("xは10以下です");
}

else if文

複数の条件を評価する場合には、else if文を使用します。

if (条件1) {
    // 条件1が真の場合に実行されるコード
} else if (条件2) {
    // 条件2が真の場合に実行されるコード
} else {
    // すべての条件が偽の場合に実行されるコード
}

例えば、xの値に応じて異なるメッセージを表示するには、次のように書きます。

let x = 10;

if (x > 10) {
    console.log("xは10より大きいです");
} else if (x === 10) {
    console.log("xは10です");
} else {
    console.log("xは10より小さいです");
}

switch文

switch文は、特定の値に基づいて複数のケースの中から一つを選択して実行する場合に使用されます。

switch (評価する値) {
    case 値1:
        // 値1と一致する場合に実行されるコード
        break;
    case 値2:
        // 値2と一致する場合に実行されるコード
        break;
    // 追加のケース
    default:
        // どのケースとも一致しない場合に実行されるコード
}

例えば、変数dayの値に応じて異なるメッセージを表示するには、次のように書きます。

let day = "月曜日";

switch (day) {
    case "月曜日":
        console.log("今日は月曜日です");
        break;
    case "火曜日":
        console.log("今日は火曜日です");
        break;
    case "水曜日":
        console.log("今日は水曜日です");
        break;
    default:
        console.log("今日は週末です");
}

これらの基本的な条件分岐を理解することで、JavaScriptで柔軟なプログラムを作成するための基礎を築くことができます。次に、スタイルを変更するためのHTMLとCSSの基本設定について説明します。

HTMLとCSSの準備

JavaScriptを使ってウェブページのスタイルを動的に変更するには、まずHTMLとCSSの基本設定が必要です。ここでは、簡単なHTMLとCSSの準備方法を説明します。

基本的なHTML構造

まず、基本的なHTMLファイルを作成します。このファイルには、スタイルを変更するための要素が含まれています。以下は、シンプルなHTMLの例です。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>スタイルの動的変更</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <h1 id="title">スタイルの動的変更デモ</h1>
    <button id="changeStyleButton">スタイルを変更</button>
    <p id="description">このテキストのスタイルを変更します。</p>
    <script src="script.js"></script>
</body>
</html>

このHTMLファイルでは、スタイルを変更するための要素として、<h1>タグ、<p>タグ、および<button>タグを用意しています。

基本的なCSS設定

次に、HTMLファイルでリンクされているCSSファイル(styles.css)を作成します。このファイルには、基本的なスタイル設定が含まれています。

body {
    font-family: Arial, sans-serif;
    background-color: white;
    color: black;
}

h1 {
    font-size: 24px;
    text-align: center;
}

p {
    font-size: 16px;
    margin: 20px;
}

button {
    display: block;
    margin: 20px auto;
    padding: 10px 20px;
    font-size: 16px;
}

このCSSでは、ページ全体のフォントや背景色、テキストの色などを設定しています。これにより、初期状態のスタイルが適用されます。

スタイル変更のためのJavaScriptファイル

最後に、スタイルを動的に変更するためのJavaScriptファイル(script.js)を作成します。このファイルは、HTMLファイルでリンクされており、ページの読み込み時に実行されます。

以下は、基本的なJavaScriptのスケルトンです。

document.addEventListener("DOMContentLoaded", function() {
    const button = document.getElementById("changeStyleButton");
    const title = document.getElementById("title");
    const description = document.getElementById("description");

    button.addEventListener("click", function() {
        // スタイルを変更するコードをここに記述します
    });
});

このスクリプトでは、ページが読み込まれた後に、ボタンにクリックイベントリスナーを追加しています。次に、このイベントリスナー内でスタイルを変更するコードを実装していきます。

次に、JavaScriptを使ってスタイルを変更する基本的な方法について説明します。

JavaScriptでのスタイル変更の基本

JavaScriptを使ってCSSスタイルを動的に変更する基本的な方法について説明します。JavaScriptでは、DOM(Document Object Model)を操作することで、ページの要素に対してスタイルの変更を行うことができます。

要素の取得とスタイルの変更

まず、HTML要素を取得し、そのスタイルを変更する方法を見てみましょう。前の例で使用したHTMLとCSSを基に、JavaScriptでスタイルを変更するコードを追加します。

document.addEventListener("DOMContentLoaded", function() {
    const button = document.getElementById("changeStyleButton");
    const title = document.getElementById("title");
    const description = document.getElementById("description");

    button.addEventListener("click", function() {
        // タイトルの色を変更
        title.style.color = "blue";
        // 説明文のフォントサイズを変更
        description.style.fontSize = "20px";
        // 説明文の背景色を変更
        description.style.backgroundColor = "lightgrey";
    });
});

このコードでは、以下の操作を行っています。

  1. document.getElementByIdを使って、特定のIDを持つ要素を取得します。
  2. element.styleプロパティを使って、CSSスタイルを変更します。

複数のスタイルを一度に変更

複数のスタイルを一度に変更する場合、以下のように記述します。

document.addEventListener("DOMContentLoaded", function() {
    const button = document.getElementById("changeStyleButton");
    const title = document.getElementById("title");
    const description = document.getElementById("description");

    button.addEventListener("click", function() {
        // 複数のスタイルを一度に変更
        title.style.cssText = "color: blue; font-size: 28px; background-color: lightyellow;";
        description.style.cssText = "font-size: 20px; background-color: lightgrey; color: darkgrey;";
    });
});

style.cssTextプロパティを使用することで、複数のスタイルを一度に設定することができます。

クラスの追加と削除

スタイルを変更するもう一つの方法として、クラスを追加または削除する方法があります。これにより、事前に定義したCSSクラスを適用することで、スタイルを変更できます。

/* styles.css */
.highlight {
    color: red;
    background-color: yellow;
    font-weight: bold;
}
document.addEventListener("DOMContentLoaded", function() {
    const button = document.getElementById("changeStyleButton");
    const description = document.getElementById("description");

    button.addEventListener("click", function() {
        // クラスをトグル(追加または削除)する
        description.classList.toggle("highlight");
    });
});

この例では、ボタンをクリックするたびに、description要素にhighlightクラスが追加または削除されます。classList.toggleメソッドを使用することで、クラスの有無に応じて自動的に追加または削除が行われます。

これらの基本的な方法を使用することで、JavaScriptでウェブページのスタイルを動的に変更することができます。次に、条件分岐を用いたスタイル変更の具体的な方法について説明します。

条件分岐を用いたスタイル変更

JavaScriptの条件分岐を使うことで、特定の条件に応じて異なるスタイルを適用することができます。これにより、動的なスタイル変更を実現し、ユーザーの操作や状況に応じた柔軟なデザインが可能となります。ここでは、いくつかの具体例を見ていきましょう。

ウィンドウの幅に基づくスタイル変更

ブラウザのウィンドウ幅に応じて、スタイルを変更する方法を示します。この方法は、レスポンシブデザインの一環として使用されます。

document.addEventListener("DOMContentLoaded", function() {
    const title = document.getElementById("title");

    function updateStyleBasedOnWidth() {
        if (window.innerWidth > 800) {
            title.style.color = "green";
            title.style.fontSize = "36px";
        } else {
            title.style.color = "red";
            title.style.fontSize = "24px";
        }
    }

    // 初期スタイルの適用
    updateStyleBasedOnWidth();

    // ウィンドウリサイズ時にスタイルを更新
    window.addEventListener("resize", updateStyleBasedOnWidth);
});

このコードでは、ウィンドウの幅が800ピクセル以上の場合と未満の場合で、title要素のスタイルを変更しています。また、ウィンドウがリサイズされるたびにスタイルを更新します。

フォームの入力値に基づくスタイル変更

ユーザーがフォームに入力した値に基づいてスタイルを変更する方法を示します。

<!-- HTML -->
<input type="number" id="ageInput" placeholder="年齢を入力">
<p id="ageMessage">年齢によってメッセージが変わります。</p>
document.addEventListener("DOMContentLoaded", function() {
    const ageInput = document.getElementById("ageInput");
    const ageMessage = document.getElementById("ageMessage");

    ageInput.addEventListener("input", function() {
        const age = parseInt(ageInput.value);

        if (isNaN(age)) {
            ageMessage.textContent = "有効な年齢を入力してください。";
            ageMessage.style.color = "black";
        } else if (age < 18) {
            ageMessage.textContent = "未成年です。";
            ageMessage.style.color = "red";
        } else {
            ageMessage.textContent = "成年です。";
            ageMessage.style.color = "green";
        }
    });
});

この例では、ユーザーが年齢を入力すると、入力値に基づいてメッセージの内容と色が動的に変更されます。

時間帯に基づくスタイル変更

現在の時間帯に基づいて、異なるスタイルを適用する方法を示します。

document.addEventListener("DOMContentLoaded", function() {
    const body = document.body;
    const currentHour = new Date().getHours();

    if (currentHour < 12) {
        body.style.backgroundColor = "lightyellow";
    } else if (currentHour < 18) {
        body.style.backgroundColor = "lightblue";
    } else {
        body.style.backgroundColor = "darkblue";
        body.style.color = "white";
    }
});

このコードでは、現在の時間帯に応じて、ページ全体の背景色とテキスト色を変更しています。

これらの例を通じて、JavaScriptの条件分岐を用いて動的にスタイルを変更する方法が理解できたと思います。次に、ユーザーアクションに応じたスタイル変更の方法について説明します。

ユーザーアクションによるスタイル変更

ユーザーの操作に応じてウェブページのスタイルを変更することで、インタラクティブで魅力的なユーザー体験を提供することができます。ここでは、クリックやホバーなどのユーザーアクションに応じたスタイル変更の具体例を紹介します。

ボタンクリックによるスタイル変更

ボタンをクリックしたときに、特定の要素のスタイルを変更する方法を示します。

<!-- HTML -->
<button id="changeColorButton">色を変更</button>
<p id="colorText">このテキストの色を変更します。</p>
document.addEventListener("DOMContentLoaded", function() {
    const button = document.getElementById("changeColorButton");
    const text = document.getElementById("colorText");

    button.addEventListener("click", function() {
        // テキストの色をランダムに変更
        const randomColor = '#' + Math.floor(Math.random()*16777215).toString(16);
        text.style.color = randomColor;
    });
});

このコードでは、ボタンをクリックすると、colorText要素のテキストカラーがランダムに変更されます。

ホバーによるスタイル変更

ユーザーがマウスを要素の上に乗せたときにスタイルを変更する方法を示します。

<!-- HTML -->
<div id="hoverBox" style="width: 200px; height: 200px; background-color: lightgrey;">
    ホバーしてみてください
</div>
document.addEventListener("DOMContentLoaded", function() {
    const hoverBox = document.getElementById("hoverBox");

    hoverBox.addEventListener("mouseover", function() {
        hoverBox.style.backgroundColor = "lightcoral";
    });

    hoverBox.addEventListener("mouseout", function() {
        hoverBox.style.backgroundColor = "lightgrey";
    });
});

このコードでは、ユーザーがhoverBox要素にマウスを乗せると背景色が変わり、マウスを離すと元の色に戻ります。

入力フィールドのフォーカスによるスタイル変更

入力フィールドにフォーカスが当たったときにスタイルを変更する方法を示します。

<!-- HTML -->
<input type="text" id="focusInput" placeholder="ここに入力">
document.addEventListener("DOMContentLoaded", function() {
    const focusInput = document.getElementById("focusInput");

    focusInput.addEventListener("focus", function() {
        focusInput.style.borderColor = "blue";
        focusInput.style.backgroundColor = "lightblue";
    });

    focusInput.addEventListener("blur", function() {
        focusInput.style.borderColor = "initial";
        focusInput.style.backgroundColor = "initial";
    });
});

このコードでは、入力フィールドにフォーカスが当たると境界線の色と背景色が変わり、フォーカスが外れると元のスタイルに戻ります。

ダブルクリックによるスタイル変更

要素をダブルクリックしたときにスタイルを変更する方法を示します。

<!-- HTML -->
<p id="doubleClickText">このテキストをダブルクリックしてスタイルを変更します。</p>
document.addEventListener("DOMContentLoaded", function() {
    const doubleClickText = document.getElementById("doubleClickText");

    doubleClickText.addEventListener("dblclick", function() {
        doubleClickText.style.fontSize = "24px";
        doubleClickText.style.fontWeight = "bold";
        doubleClickText.style.color = "purple";
    });
});

このコードでは、ユーザーがdoubleClickText要素をダブルクリックすると、テキストのフォントサイズ、フォントウェイト、色が変更されます。

これらの例を通じて、ユーザーのアクションに応じてスタイルを変更する方法が理解できたと思います。次に、時間帯によるスタイル変更について説明します。

時間帯によるスタイル変更

時間帯に応じてウェブページのスタイルを変更することで、よりダイナミックでユーザーに優しいインターフェースを提供することができます。ここでは、JavaScriptを使用して現在の時間に基づいてスタイルを動的に変更する方法を紹介します。

時間帯に基づく背景色の変更

現在の時間帯に応じてウェブページの背景色を変更する方法を示します。

document.addEventListener("DOMContentLoaded", function() {
    const body = document.body;
    const currentHour = new Date().getHours();

    if (currentHour >= 6 && currentHour < 12) {
        // 朝
        body.style.backgroundColor = "lightyellow";
        body.style.color = "black";
    } else if (currentHour >= 12 && currentHour < 18) {
        // 昼
        body.style.backgroundColor = "lightblue";
        body.style.color = "black";
    } else if (currentHour >= 18 && currentHour < 21) {
        // 夕方
        body.style.backgroundColor = "orange";
        body.style.color = "black";
    } else {
        // 夜
        body.style.backgroundColor = "darkblue";
        body.style.color = "white";
    }
});

このコードでは、以下の時間帯に応じてスタイルを変更しています。

  • 朝(6時から12時):背景色を淡い黄色に変更
  • 昼(12時から18時):背景色を淡い青色に変更
  • 夕方(18時から21時):背景色をオレンジ色に変更
  • 夜(21時から翌朝6時):背景色を濃い青色に変更し、文字色を白に変更

時間帯に基づくメッセージの表示

時間帯に応じて異なるメッセージを表示する方法を示します。

<!-- HTML -->
<h1 id="greeting">こんにちは!</h1>
document.addEventListener("DOMContentLoaded", function() {
    const greeting = document.getElementById("greeting");
    const currentHour = new Date().getHours();

    if (currentHour >= 6 && currentHour < 12) {
        greeting.textContent = "おはようございます!";
        greeting.style.color = "green";
    } else if (currentHour >= 12 && currentHour < 18) {
        greeting.textContent = "こんにちは!";
        greeting.style.color = "blue";
    } else if (currentHour >= 18 && currentHour < 21) {
        greeting.textContent = "こんばんは!";
        greeting.style.color = "orange";
    } else {
        greeting.textContent = "おやすみなさい!";
        greeting.style.color = "white";
    }
});

このコードでは、時間帯に応じて異なるメッセージと色を設定しています。

  • 朝(6時から12時):”おはようございます!”、色は緑
  • 昼(12時から18時):”こんにちは!”、色は青
  • 夕方(18時から21時):”こんばんは!”、色はオレンジ
  • 夜(21時から翌朝6時):”おやすみなさい!”、色は白

時間帯に基づくスタイルシートの切り替え

特定の時間帯に応じて異なるCSSスタイルシートを適用する方法を示します。

<!-- HTML -->
<link id="themeStylesheet" rel="stylesheet" href="day.css">
document.addEventListener("DOMContentLoaded", function() {
    const themeStylesheet = document.getElementById("themeStylesheet");
    const currentHour = new Date().getHours();

    if (currentHour >= 6 && currentHour < 18) {
        // 昼間用スタイルシート
        themeStylesheet.href = "day.css";
    } else {
        // 夜間用スタイルシート
        themeStylesheet.href = "night.css";
    }
});

このコードでは、昼間と夜間で異なるCSSファイルを適用することにより、スタイルを切り替えています。これにより、時間帯に応じてウェブサイト全体のデザインを動的に変更できます。

これらの例を通じて、JavaScriptを使って時間帯に基づいてスタイルを変更する方法が理解できたと思います。次に、デバイスによるスタイル変更について説明します。

デバイスによるスタイル変更

ユーザーが使用しているデバイスに応じてウェブページのスタイルを変更することで、より最適化された表示と操作性を提供することができます。ここでは、JavaScriptを使用してデバイスの種類に基づいてスタイルを動的に変更する方法を紹介します。

デバイスの種類を判別する方法

JavaScriptを使ってデバイスの種類(デスクトップ、タブレット、スマートフォン)を判別するには、window.navigator.userAgentwindow.innerWidthを利用します。

function detectDevice() {
    const userAgent = window.navigator.userAgent.toLowerCase();
    const width = window.innerWidth;

    if (userAgent.includes('mobile') || width < 768) {
        return 'mobile';
    } else if (userAgent.includes('tablet') || (width >= 768 && width < 1024)) {
        return 'tablet';
    } else {
        return 'desktop';
    }
}

この関数は、ユーザーエージェントと画面幅を基にデバイスの種類を判別します。

デバイスに応じたスタイル変更

判別されたデバイスの種類に応じて、異なるスタイルを適用する方法を示します。

document.addEventListener("DOMContentLoaded", function() {
    const device = detectDevice();
    const body = document.body;

    if (device === 'mobile') {
        body.style.backgroundColor = 'lightgreen';
        body.style.fontSize = '14px';
    } else if (device === 'tablet') {
        body.style.backgroundColor = 'lightcoral';
        body.style.fontSize = '16px';
    } else {
        body.style.backgroundColor = 'lightblue';
        body.style.fontSize = '18px';
    }
});

このコードでは、デバイスの種類に応じて背景色とフォントサイズを変更しています。

デバイスごとに異なるCSSファイルを適用

デバイスの種類に応じて異なるCSSファイルを適用する方法も有効です。

<!-- HTML -->
<link id="deviceStylesheet" rel="stylesheet" href="desktop.css">
document.addEventListener("DOMContentLoaded", function() {
    const device = detectDevice();
    const deviceStylesheet = document.getElementById("deviceStylesheet");

    if (device === 'mobile') {
        deviceStylesheet.href = 'mobile.css';
    } else if (device === 'tablet') {
        deviceStylesheet.href = 'tablet.css';
    } else {
        deviceStylesheet.href = 'desktop.css';
    }
});

このコードでは、デバイスの種類に応じて適切なCSSファイルを動的に読み込んでいます。これにより、デバイスごとに最適化されたスタイルが適用されます。

メディアクエリを使用したスタイル変更

JavaScriptを使わずに、CSSのメディアクエリを利用してデバイスごとにスタイルを変更することも可能です。以下は、メディアクエリの例です。

/* styles.css */

/* デスクトップ用スタイル */
body {
    background-color: lightblue;
    font-size: 18px;
}

/* タブレット用スタイル */
@media (max-width: 1024px) {
    body {
        background-color: lightcoral;
        font-size: 16px;
    }
}

/* モバイル用スタイル */
@media (max-width: 768px) {
    body {
        background-color: lightgreen;
        font-size: 14px;
    }
}

このCSSでは、デバイスの画面幅に基づいて異なるスタイルを適用しています。

これらの方法を通じて、デバイスの種類に応じてスタイルを変更する方法が理解できたと思います。次に、テーマの切り替え機能の具体的な実装例を紹介します。

応用例:テーマの切り替え

テーマの切り替え機能を実装することで、ユーザーが好みに応じてウェブページの外観をカスタマイズできるようになります。ここでは、JavaScriptを使ってダークモードとライトモードを切り替える具体的な方法を紹介します。

HTMLの準備

まず、テーマ切り替えボタンをHTMLに追加します。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>テーマ切り替えデモ</title>
    <link id="themeStylesheet" rel="stylesheet" href="light.css">
</head>
<body>
    <h1>テーマ切り替えデモ</h1>
    <button id="toggleThemeButton">ダークモードに切り替え</button>
    <p>このページのテーマを切り替えることができます。</p>
    <script src="script.js"></script>
</body>
</html>

CSSの準備

次に、ライトモードとダークモードのスタイルシートを用意します。

/* light.css */
body {
    background-color: white;
    color: black;
}
button {
    background-color: black;
    color: white;
    padding: 10px;
    border: none;
    cursor: pointer;
}
/* dark.css */
body {
    background-color: black;
    color: white;
}
button {
    background-color: white;
    color: black;
    padding: 10px;
    border: none;
    cursor: pointer;
}

JavaScriptでテーマ切り替えを実装

最後に、テーマを切り替えるためのJavaScriptコードを記述します。

document.addEventListener("DOMContentLoaded", function() {
    const toggleThemeButton = document.getElementById("toggleThemeButton");
    const themeStylesheet = document.getElementById("themeStylesheet");

    toggleThemeButton.addEventListener("click", function() {
        if (themeStylesheet.getAttribute("href") === "light.css") {
            themeStylesheet.setAttribute("href", "dark.css");
            toggleThemeButton.textContent = "ライトモードに切り替え";
        } else {
            themeStylesheet.setAttribute("href", "light.css");
            toggleThemeButton.textContent = "ダークモードに切り替え";
        }
    });
});

このJavaScriptコードでは、次の操作を行います:

  1. ページの読み込みが完了した後に、ボタンとテーマスタイルシートの要素を取得します。
  2. ボタンがクリックされたときに、現在適用されているスタイルシートをチェックします。
  3. ライトモードが適用されている場合はダークモードに、ダークモードが適用されている場合はライトモードに切り替えます。
  4. ボタンのテキストも、それに応じて変更します。

ローカルストレージを使用したテーマの保存

ユーザーがページを再訪問したときに、最後に選択したテーマを保持するために、ローカルストレージを使用する方法を示します。

document.addEventListener("DOMContentLoaded", function() {
    const toggleThemeButton = document.getElementById("toggleThemeButton");
    const themeStylesheet = document.getElementById("themeStylesheet");
    const savedTheme = localStorage.getItem("theme");

    if (savedTheme) {
        themeStylesheet.setAttribute("href", savedTheme);
        toggleThemeButton.textContent = savedTheme === "light.css" ? "ダークモードに切り替え" : "ライトモードに切り替え";
    }

    toggleThemeButton.addEventListener("click", function() {
        if (themeStylesheet.getAttribute("href") === "light.css") {
            themeStylesheet.setAttribute("href", "dark.css");
            toggleThemeButton.textContent = "ライトモードに切り替え";
            localStorage.setItem("theme", "dark.css");
        } else {
            themeStylesheet.setAttribute("href", "light.css");
            toggleThemeButton.textContent = "ダークモードに切り替え";
            localStorage.setItem("theme", "light.css");
        }
    });
});

このコードでは、ユーザーが選択したテーマをローカルストレージに保存し、ページの読み込み時にそのテーマを適用します。これにより、ユーザーのテーマ選択が次回の訪問時にも保持されます。

これで、テーマの切り替え機能の実装が完了しました。次に、デバッグとトラブルシューティングの方法について説明します。

デバッグとトラブルシューティング

JavaScriptでスタイルを動的に変更する際には、さまざまな問題が発生する可能性があります。ここでは、一般的な問題とその解決方法について説明します。

コンソールエラーメッセージの確認

JavaScriptのデバッグで最初に行うべきことは、ブラウザの開発者ツールを使用してコンソールエラーメッセージを確認することです。コンソールにエラーメッセージが表示されていないかチェックし、問題の特定に役立てます。

console.log("デバッグメッセージ");
console.error("エラーメッセージ");

これらのメソッドを使用して、コードの実行状況を確認し、エラーの原因を特定します。

要素が正しく取得されているか確認

DOM要素を正しく取得できていない場合、スタイルの変更が反映されません。要素が正しく取得されているか確認するために、以下のコードを使用します。

const element = document.getElementById("elementId");
if (!element) {
    console.error("要素が見つかりません: #elementId");
} else {
    console.log("要素が正しく取得されました:", element);
}

CSSの競合を確認

複数のCSSルールが競合している場合、意図したスタイルが適用されないことがあります。ブラウザの開発者ツールを使用して、適用されているCSSルールを確認し、競合がないかチェックします。

JavaScriptのエラーを確認

JavaScriptのコードにエラーがあると、スタイルの変更が行われません。以下の例では、try…catch構文を使用してエラーをキャッチし、コンソールにエラーメッセージを表示します。

try {
    const button = document.getElementById("buttonId");
    button.addEventListener("click", function() {
        // スタイル変更のコード
    });
} catch (error) {
    console.error("エラーが発生しました:", error);
}

非同期処理の確認

非同期処理が原因でスタイル変更が正しく行われないことがあります。非同期処理が完了するまで待機するために、setTimeoutPromiseを使用します。

setTimeout(function() {
    const element = document.getElementById("elementId");
    element.style.color = "red";
}, 1000);

または、Promiseを使用して非同期処理の完了を待ちます。

fetch("data.json")
    .then(response => response.json())
    .then(data => {
        const element = document.getElementById("elementId");
        element.style.color = "red";
    })
    .catch(error => {
        console.error("データの取得中にエラーが発生しました:", error);
    });

ブラウザの互換性を確認

すべてのブラウザが同じ方法でJavaScriptやCSSを解釈するわけではありません。スタイルの変更が特定のブラウザで正しく動作しない場合、他のブラウザでの動作を確認し、必要に応じてポリフィルを使用します。

if (!Element.prototype.classList) {
    // 古いブラウザ向けのポリフィルを追加
}

テストの実行

テストを実行して、スタイル変更が意図通りに行われているか確認します。テストフレームワークを使用して自動テストを行うことで、バグを早期に発見できます。

describe("スタイル変更", function() {
    it("should change the element color to red", function() {
        const element = document.getElementById("elementId");
        element.style.color = "red";
        expect(element.style.color).toBe("red");
    });
});

これらのデバッグとトラブルシューティングの方法を使用して、JavaScriptでスタイル変更を行う際の問題を解決することができます。次に、学んだ内容を確認するための演習問題を提供します。

演習問題

ここでは、これまでに学んだJavaScriptによるスタイル変更の知識を確認するための演習問題をいくつか提供します。実際にコードを書いてみることで、理解を深めましょう。

演習問題1: ボタンクリックで背景色を変更

目標: ボタンをクリックすると、ページ全体の背景色が赤から青に交互に変わる機能を実装してください。

ヒント:

  • ボタンのクリックイベントをリッスンする
  • 背景色を変更するためにdocument.body.style.backgroundColorを使用する

解答例:

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>背景色変更演習</title>
</head>
<body>
    <button id="toggleBackgroundButton">背景色を変更</button>
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            const button = document.getElementById("toggleBackgroundButton");
            let isRed = true;

            button.addEventListener("click", function() {
                if (isRed) {
                    document.body.style.backgroundColor = "blue";
                } else {
                    document.body.style.backgroundColor = "red";
                }
                isRed = !isRed;
            });
        });
    </script>
</body>
</html>

演習問題2: 入力フィールドに基づくスタイル変更

目標: テキスト入力フィールドに文字が入力された場合、その文字数に応じて背景色を変える機能を実装してください。10文字以上の場合は緑、10文字未満の場合は黄色。

ヒント:

  • 入力フィールドのinputイベントをリッスンする
  • 入力フィールドのvalueプロパティをチェックする

解答例:

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>入力フィールドのスタイル変更</title>
</head>
<body>
    <input type="text" id="textInput" placeholder="ここに入力">
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            const textInput = document.getElementById("textInput");

            textInput.addEventListener("input", function() {
                if (textInput.value.length >= 10) {
                    textInput.style.backgroundColor = "green";
                } else {
                    textInput.style.backgroundColor = "yellow";
                }
            });
        });
    </script>
</body>
</html>

演習問題3: 時間帯に応じた挨拶メッセージ

目標: 現在の時間に基づいて異なる挨拶メッセージを表示する機能を実装してください。午前中は「おはようございます」、午後は「こんにちは」、夜は「こんばんは」。

ヒント:

  • 現在の時間を取得するためにnew Date().getHours()を使用する
  • 条件分岐を使ってメッセージを変更する

解答例:

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>挨拶メッセージ</title>
</head>
<body>
    <h1 id="greetingMessage"></h1>
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            const greetingMessage = document.getElementById("greetingMessage");
            const currentHour = new Date().getHours();

            if (currentHour < 12) {
                greetingMessage.textContent = "おはようございます";
            } else if (currentHour < 18) {
                greetingMessage.textContent = "こんにちは";
            } else {
                greetingMessage.textContent = "こんばんは";
            }
        });
    </script>
</body>
</html>

演習問題4: デバイスによるスタイルの変更

目標: デバイスの種類(デスクトップ、タブレット、モバイル)に応じて、異なるフォントサイズを適用する機能を実装してください。

ヒント:

  • デバイスの種類を判別するために、window.innerWidthを使用する
  • document.body.style.fontSizeを使用してフォントサイズを変更する

解答例:

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>デバイスによるスタイル変更</title>
</head>
<body>
    <p>このテキストのフォントサイズはデバイスによって異なります。</p>
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            const width = window.innerWidth;

            if (width < 768) {
                document.body.style.fontSize = "12px"; // モバイル
            } else if (width < 1024) {
                document.body.style.fontSize = "16px"; // タブレット
            } else {
                document.body.style.fontSize = "20px"; // デスクトップ
            }
        });
    </script>
</body>
</html>

これらの演習問題を通じて、JavaScriptを使った動的なスタイル変更の理解を深めてください。次に、本記事のまとめを行います。

まとめ

本記事では、JavaScriptを使用してウェブページのスタイルを動的に変更する方法について、基本的な条件分岐から具体的な応用例までを詳しく解説しました。まず、if文やswitch文を使用した基本的な条件分岐の使い方を学びました。次に、HTMLとCSSの準備を行い、JavaScriptを使ってスタイルを変更する基本的な方法を紹介しました。さらに、条件分岐を用いたスタイル変更や、ユーザーアクション、時間帯、デバイスによるスタイル変更の具体例を通じて、動的なスタイル変更の実装方法を学びました。

また、テーマの切り替え機能の実装方法や、デバッグとトラブルシューティングの方法についても詳しく説明し、最後に学んだ内容を確認するための演習問題を提供しました。

これらの知識とテクニックを活用することで、よりインタラクティブでユーザーエクスペリエンスの高いウェブページを作成することができます。今後も継続して実践し、さらなるスキル向上を目指してください。

コメント

コメントする

目次
  1. JavaScriptの基本的な条件分岐
    1. if文
    2. if…else文
    3. else if文
    4. switch文
  2. HTMLとCSSの準備
    1. 基本的なHTML構造
    2. 基本的なCSS設定
    3. スタイル変更のためのJavaScriptファイル
  3. JavaScriptでのスタイル変更の基本
    1. 要素の取得とスタイルの変更
    2. 複数のスタイルを一度に変更
    3. クラスの追加と削除
  4. 条件分岐を用いたスタイル変更
    1. ウィンドウの幅に基づくスタイル変更
    2. フォームの入力値に基づくスタイル変更
    3. 時間帯に基づくスタイル変更
  5. ユーザーアクションによるスタイル変更
    1. ボタンクリックによるスタイル変更
    2. ホバーによるスタイル変更
    3. 入力フィールドのフォーカスによるスタイル変更
    4. ダブルクリックによるスタイル変更
  6. 時間帯によるスタイル変更
    1. 時間帯に基づく背景色の変更
    2. 時間帯に基づくメッセージの表示
    3. 時間帯に基づくスタイルシートの切り替え
  7. デバイスによるスタイル変更
    1. デバイスの種類を判別する方法
    2. デバイスに応じたスタイル変更
    3. デバイスごとに異なるCSSファイルを適用
    4. メディアクエリを使用したスタイル変更
  8. 応用例:テーマの切り替え
    1. HTMLの準備
    2. CSSの準備
    3. JavaScriptでテーマ切り替えを実装
    4. ローカルストレージを使用したテーマの保存
  9. デバッグとトラブルシューティング
    1. コンソールエラーメッセージの確認
    2. 要素が正しく取得されているか確認
    3. CSSの競合を確認
    4. JavaScriptのエラーを確認
    5. 非同期処理の確認
    6. ブラウザの互換性を確認
    7. テストの実行
  10. 演習問題
    1. 演習問題1: ボタンクリックで背景色を変更
    2. 演習問題2: 入力フィールドに基づくスタイル変更
    3. 演習問題3: 時間帯に応じた挨拶メッセージ
    4. 演習問題4: デバイスによるスタイルの変更
  11. まとめ