スマホやPCのCTAでは、電話をかけるボタン(バナー)があります。

基本的にWebサイトは、バナーを出しっぱなしにしているところが多いです。
しかし、電話対応の時間が9時〜18時のように限られた事業の場合、対応時間外にユーザーが電話ボタンをクリックすることができてしまいます。
結局繋がらないのであれば、対応時間外は非表示にしておきたいものです。

このようなサイトで、

  • 対応時間内→バナーを出す
  • 対応時間外→バナーを出さない

とする設定の方法を解説します。

スポンサーリンク

時間帯でバナーを出し分ける設定方法

以下のようなコードを、<head>の中に挿入します。

<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function() {
var elem = document.getElementById("#バナーのID")
var nt = new Date(); // 現在時刻を取得
var hr = nt.getHours(); // 「時」の値を取得
if(( hr >= 18 ) || ( hr <= 9 )) {
// 18時以降または9時以前の場合
elem.style.display = "none";
}
})
</script>

コードの意味

各コードの意味や目的を解説します。

ロード完了後に設定の反映

window.addEventListener('DOMContentLoaded', function() { 処理 })

こちらのコードですが、ページのロードが完了してから処理を実行するという意味があります。
処理全体をこのコードで囲わない場合、ページの表示よりも処理が先に走ってしまいます。

ボタンの表示がまだされていない状態で
document.getElementById("#バナーのID")

のような、要素を特定する処理を実行すると
Uncaught TypeError: Cannot read properties of null (reading ‘style’)
というエラーがコンソールに表示され、要素が正しく取得できません。
(nullの値を参照した時に出るエラーです。)

要素の取得

var elem = document.getElementById("#バナーのID")

例えば、バナーのIDが
<div id="footer_sticky_menu">バナー画像</div>
だった場合、getElementById("#footer_sticky_menu")と指定します。

ID名なので、先頭に#が入ります。

要素の指定がうまくできない時や、IDの中でさらに細かく分かれた要素だけを指定したい場合、JSパスを利用すると便利です。

  1. Chromeのデベロッパーモードから、変更を加えたい要素をクリック
  2. 右クリック
  3. コピー→JS パスをコピー

    こちらで、JSパスを取得することができます。

    document.querySelector("#footer_sticky_menu > tbody > tr > td:nth-child(3)")
    といったJSパスがコピーされています。

    var elem = document.querySelector("#footer_sticky_menu > tbody > tr > td:nth-child(3)")

    のように変数elemに代入することで、指定した要素の取得ができます。

    時間の取得と条件分岐

    var nt = new Date(); // 現在時刻を取得
    var hr = nt.getHours(); // 「時」の値を取得
    if(( hr >= 18 ) || ( hr <= 9 )) {
    // 18時以降または9時以前の場合
    elem.style.display = "none";
    }

    var nt = new Date();
    で現在時刻を取得すると、以下のような形式でデータが取得できます。
    Wed Feb 14 2024 19:54:39 GMT+0900 (日本標準時)

    この中から、var hr = nt.getHours()で時間にあたる部分(19)を抽出します。

    あとは、条件分岐と、時間外、時間内で実行したい処理を記載します。

    Javascriptを使ったCSSの変更の記載方法

    なお、CSSの変更は

    elem.style.display = "none";

    と記載しても

    elem.style = "display:none;";

    と記載しても、どちらでもOKです。

    非表示ならdisplay:none;だけですが、色や形を細かく変えたい場合は

    elem.style = "border:2px; background-color:blue; dotted:red;";

    のように1行で指定することができるので、こちらの書き方の方が便利ですね。

    おすすめの記事