プログラミング

【PR】を含みます。

【JavaScript】指定した日時で要素の表示・非表示を切り替える方法

JavaScript 指定した日時で要素の表示・非表示を切り替える方法

JavaScriptで指定した日時で要素の表示・非表示を切り替える方法を解説します。

以下の記事で、JavaScriptの更新のみでバナーの表示切替を行う方法解説しましたが、今回はHTML側の日時更新のみで要素の表示切替を行う方法を解説します。

あわせて読む
JavaScript 期間を指定してバナーの切り替え・表示・非表示を制御する方法
【JavaScript】期間を指定してバナーの切り替え・表示・非表示を制御する方法

もくじJavaScriptファイルの更新のみでバナーの切り替え・表示・非表示を制御実装コード使用方法1.バナーを表示させたいページにHTMLコンテナを設置する2.バナーを表示させたいページにCSSを追 ...

HTMLファイルの更新のみで要素の表示・非表示を制御

各HTMLファイルに、CSS、JavaScriptファイルを設置することで、要素の表示切替を制御することが可能です。

実装コード

以下のコードは時間制限のある表示制御が必要な場面で便利です。

HTML
Copy
  1. <div class="dateTimeSwitching js-date-time-switching" data-show="2024-09-18T12:00:00" data-hide="2024-09-20T12:00:00">サンプル1</div>
  2. <div class="dateTimeSwitching js-date-time-switching" data-show="2024-09-15T10:00:00" data-hide="2024-09-16T18:00:00">サンプル2</div>
CSS
Copy
  1. .dateTimeSwitching {
  2.   display: none;
  3. }
JavaSctipt
Copy
  1. (function () {
  2.   // 全ての js-date-time-switching クラスを持つ要素を取得
  3.   const jsDateTimeSwitching = document.querySelectorAll('.js-date-time-switching');
  4.   // 日付の妥当性を確認する関数
  5.   function isValidDate(date) {
  6.     return date instanceof Date && !isNaN(date);
  7.   }
  8.   // 要素ごとに表示・非表示を制御する
  9.   function updateDateTimeSwitchingVisibility() {
  10.     const now = new Date(); // 現在の日時を取得
  11.     jsDateTimeSwitching.forEach(element => {
  12.       // データ属性から表示/非表示の日時を取得
  13.       const showDateAttr = element.getAttribute('data-show');
  14.       const hideDateAttr = element.getAttribute('data-hide');
  15.       // 日時を変換
  16.       const showDate = showDateAttr ? new Date(showDateAttr) : null;
  17.       const hideDate = hideDateAttr ? new Date(hideDateAttr) : null;
  18.       // 日時の妥当性を確認
  19.       const isShowDateValid = !showDate || isValidDate(showDate);
  20.       const isHideDateValid = !hideDate || isValidDate(hideDate);
  21.       // 日時が無効であれば非表示に設定
  22.       if (!isShowDateValid || !isHideDateValid) {
  23.         return; // 無効な要素はスキップ
  24.       }
  25.       // 現在の日時との比較
  26.       let shouldDisplay = true; // デフォルトでは表示
  27.       if (showDate && now < showDate) {
  28.         // `data-show` が存在し、現在日時が指定日時より前なら非表示
  29.         shouldDisplay = false;
  30.       }
  31.       if (hideDate && now > hideDate) {
  32.         // `data-hide` が存在し、現在日時が指定日時を過ぎていれば非表示
  33.         shouldDisplay = false;
  34.       }
  35.       // 表示・非表示を制御
  36.       element.style.display = shouldDisplay ? 'block' : 'none';
  37.     });
  38.   }
  39.   // 初期状態で実行
  40.   updateDateTimeSwitchingVisibility();
  41.   // 1秒ごとにチェックして更新
  42.   setInterval(updateDateTimeSwitchingVisibility, 1000);
  43. })();

使用方法

1.HTMLを設置する

data-showdata-hideというカスタム属性があり、表示/非表示にしたい日時を設定します。

日付はYYYY-MM-DDTHH:MM:SS形式で設定する必要があります。

data-show
この日付・時刻から表示を開始する
data-hide
この日付・時刻で表示を終了する

2.CSSを設置する

初期状態では、dateTimeSwitchingクラスを持つ要素をdisplay: none;にして、JavaScriptで条件に基づいて表示されるように設定します。

3.JavaScriptを設置する

JavaScriptで、HTMLのカスタム属性で指定した日時に応じて要素の表示/非表示を制御します。

data-showdata-hideのいずれかに無効な文字列がある場合、その要素は無視されます(非表示のまま)。

data-showが設定されていない場合、表示の開始時刻に制限がないため、その要素は現在の時刻に関係なく「即時に表示」されます。

data-hideが設定されていない場合、その要素は「ずっと表示」されます。

両方の属性がない場合、その要素は常に表示されることになります。

以下のようなHTML構造の要素があった場合、表示の制御は以下のようになります。

HTML
Copy
  1. <div class="dateTimeSwitching js-date-time-switching" data-show="2024-09-18T12:00:00" data-hide="2024-09-20T12:00:00">
  2.   要素1: 指定日時になると表示されます
  3. </div>
  4. <div class="dateTimeSwitching js-date-time-switching" data-hide="invalid date">
  5.   要素2: 無効な日付が設定されているため表示されません
  6. </div>
  7. <div class="dateTimeSwitching js-date-time-switching" data-show="2024-09-21T09:00:00">
  8.   要素3: 指定日時に表示されますが、終了タイミングはありません
  9. </div>
  10. <div class="dateTimeSwitching js-date-time-switching" style="display: none;">
  11.   要素4: 常に表示されます
  12. </div>
  • 要素1: 2024-09-18T12:00:00 から 2024-09-20T12:00:00 まで表示。

  • 要素2: data-hide に無効な日付が設定されているため表示されません。

  • 要素3: 2024-09-21T09:00:00 以降、非表示になるタイミングがなく永続的に表示。

  • 要素4: 常に表示される。

動作しないときに確認すること

data-show・data-hideで指定する日付文字列について

YYYY-MM-DD HH:MM:SSのような一般的な日付と時刻の表記形式で記述すると、一部ブラウザ(古いバージョンのsafari等)で日付と認識されない場合があります。

日付文字列が原因で動作しない場合、ISO 8601という国際標準の日時表記形式(YYYY-MM-DDTHH:MM:SS)に基づいて記述してみてください。

ISO 8601では、日付と時刻の間にT入れることで、日付と時刻が一緒に書かれているということを示しています。

udemyでJavaScriptを学ぶ

学習時間
24.5時間
学習内容
  • 本格的なWEBサイトを作成する方法について学びます。
  • Sass(※以下CSSと記載)、JavaScriptの基礎について深く学びます。
  • CSS、JavaScriptの実践的な記述について深く学びます。
  • CSS、JavaScriptアニメーションの実装について学びます。
  • 最新の実践的なWEB画面の作成方法について深く学びます。
  • CSS、JavaScriptのコードの最適化、安定化について学びます。
  • 維持管理、持続可能なコードの記述方法について学びます。
対象受講者
  • ドットインストールでCSS、JavaScriptの入門編を終えたレベルの方
  • 他の先生のフロントエンドの入門編を終えたレベルの方
  • 自分で本格的なWEBサイトを作ってみたい方
  • CSS、JavaScriptの実践的な基礎を効率的に学びたい方
  • CSS、JavaScriptを今後仕事で使う予定の方
  • CSS、JavaScriptのコードの整理方法について学びたい方
  • CSS、JavaScriptのアニメーションを学びたい方
  • CSS、JavaScriptのレベルアップしたいWeb開発初級者の方
  • CSS、JavaScriptでどのようにすればレベルアップできるのか悩んでいる方
アイコン画像

もみじ

HTML・CSS・JavaScripの基礎的なことを理解しており、Webのフロントエンジニアを目指している方にオススメの講座です。

講座内容は実践で使用するものが多く、実務でも役立つ内容でした。

学習時間
20.5時間
学習内容
  • JavaScriptの動作原理について深く学びます。
  • JavaScriptがどのように実行されるのかについて深く学びます。
  • ES6+の最新のJavaScriptの記法について幅広く学びます。
  • 変数や参照の仕組みについて深く学びます。
  • オブジェクトのメカニズムについて深く学びます。
  • 関数のメカニズムについて深く学びます。
  • スコープの仕組みについて深く学びます。
  • プロトタイプのメカニズムについて深く学びます。
  • 反復処理のメカニズムについて深く学びます。
  • ジェネレーターやイテレーターについて深く学びます。
  • コールバック関数について深く学びます。
  • 非同期処理のメカニズムについて深く学びます。
  • モジュールの仕組みについて深く学びます。
  • クロージャーの仕組みについて深く学びます。
  • レキシカルスコープの仕組みについて深く学びます。
  • アロー関数の特徴について深く学びます。
  • レキシカルスコープの仕組みについて深く学びます。
  • アロー関数の特徴について深く学びます。
  • thisの仕組みについて深く学びます。
  • bind、apply、callの動作原理について深く学びます。
  • クラスと継承の仕組みについて深く学びます。
  • ReflectやProxyなどの強力なオブジェクトへの理解を深めます。
  • Map,Setなどの強力なコレクションについて実践を交えて学びます。
  • よく使用される強力な実装パターンを演習を交えて学びます。
  • 独自のフレームワークを構築していく中でJavaScriptのメカニズムについて理解を深めます。
対象受講者
  • JavaScriptをコアの動作原理からキチンと理解したい方。
  • 自分の思った通りコードが動かずに悩んでいる方。
  • 自分の思った通りに動かず、気付いたら解決するのに1日経ってしまっていた経験のある方。
  • React, Vue, Angularが使いこなせず悩んでいる方。
  • JavaScriptの不可解な動きが理解できず、苦しんでいる方。
  • 少し複雑なコードを書こうとすると、ぐちゃぐちゃになって整理しきれず、悩んでいる方。
  • JavaScriptを本気で勉強したいと思っている方。
  • JavaScriptの変態仕様に苦しんでいる方。
  • JavaScriptが苦手なプログラマーの方。
アイコン画像

もみじ

JavaScripの基礎的なことを理解しており、より深くJavaScriptについて理解したいという方にオススメの講座です。

初心者の方が一度の受講で全てを吸収するのは難しいですが、繰り返し受講することでフロントエンドの業務で役立つ知識を身に付けることができます。

HTMLとCSSの知識がありJavaScriptを学びたいという方におすすめの1冊

アイコン画像

もみじ

HTMLとCSSの知識がありJavaScriptを学びたいという方に入門書としておすすめの書籍です。

実務で役立つサンプルを手を動かしながら学ぶことができ、実践的なスキルを身に付けることができます。

JavaScriptのフロントエンドエンジニアを目指している方におすすめの1冊

アイコン画像

もみじ

この本はJavaScript初心者からフロントエンドエンジニアを目指す方にぴったりの1冊です。

非同期処理やAJAXなど、現代の開発で必要なスキルがわかりやすく解説されており、実務で役立つスキルを学ぶことができます。

-プログラミング
-