ゲーム系のHPを作成したときにこんな要件相談が…
昼と夜でページのスタイルを変更することはできますか?昼は背景色を明るく夜は暗く、昼はKVに焚火無しで夜は焚火あり、のような感じで…
こういう実装は初めてでしたが、jsで時間取得すればできそう、ということで実装してみたので備忘録です。
では早速行ってみましょう!
まずはコードから。
$(function(){
//時間判定処理
var getH = new Date().getHours();
if((getH >= 6) && (getH < 18)) {
$('body').removeClass('is-nightwrap');
} else if( (getH >= 18) || (getH < 6) ) {
$('body').addClass('is-nightwrap');
}
});
.is-night {
display: none;
}
.is-nightwrap {
background-color: #000;
color: #fff;
}
.is-nightwrap .is-day {
display: none;
}
.is-nightwrap .is-night {
display: block;
}
昼のスタイルをベースに作成して、夜になったらbody
にis-nightwrap
クラスがついて、.is-night
を表示・.is-day
を非表示、のような感じで実装しました。
直接jsで画像の切り替えとかをしても良かったのですが、クラスで制御した方がcssとhtmlが書きやすいかな、と思ったので。
解説
js
$(function(){
//時間判定処理
var getH = new Date().getHours();
if((getH >= 6) && (getH < 18)) {
$('body').removeClass('is-nightwrap');
} else if( (getH >= 18) || (getH < 6) ) {
$('body').addClass('is-nightwrap');
}
});
ブラウザの時刻をもとに自動で昼夜を判定します。new Date().getHours()
は現在の時間(0〜23の範囲)を取得します。
- 6時から18時未満の場合は昼と判断して
is-nightwrap
クラスを削除。 - それ以外の時間帯(18時から翌6時まで)は夜と判断して
is-nightwrap
クラスを追加。
6と18の数字部分をいじれば昼と夜の時間を変更することも可能です。
css
.is-night {
display: none;
}
.is-nightwrap {
background-color: #000;
color: #fff;
}
.is-nightwrap .is-day {
display: none;
}
.is-nightwrap .is-night {
display: block;
}
昼のスタイルをベースに作成したので、.is-night
クラスを持つ要素は、デフォルトでは非表示にしました。
.is-nightwrap
クラスが適用された要素は、背景色が黒 (#000
) でテキスト色が白 (#fff
) にします。
.is-nightwrap
クラスを持つ要素内で、.is-day
クラスを持つ要素は非表示にします。昼間用のコンテンツを夜のテーマ時には表示しない設定です。
.is-nightwrap
クラスを持つ要素内で、.is-night
クラスを持つ要素は表示されます。これにより、夜間用のコンテンツが表示されます。
全体の流れ
昼間(is-nightwrap
クラスなし):
.is-night
要素は非表示のまま。.is-day
要素は表示される。
夜間(is-nightwrap
クラスあり):
.is-day
要素は非表示。.is-night
要素が表示される。- 背景色が黒になり、テキスト色が白くなる。
という感じですね。結構簡単に実装できました。
まとめ
jsを使用して時間判定をし、昼と夜のスタイルを変える実装をしました。
ぜひ使ってみてください。
もしわからないことあれば質問ください!
記事にしてほしい・解説してほしい内容のリクエストもお待ちしています。