【JavaScript】ブラウザの戻るボタンを押したときに、モーダルウィンドウを出すには

2021年7月15日

ブラウザで戻るボタンを押したときにモーダルウィンドウで確認画面を出したいときはありませんか?期間限定のお得な情報を戻る前に告知したい、新商品の紹介をしたいときなどに活用できます。JavaScriptでブラウザの戻るボタンを制御することが可能です。サンプルコードを紹介します。

なおモーダルウィンドウはこちらを参照してください。

JavaScript

$(function () {
    let hash = location.hash;
    if (hash != '#site') {
        // pushStateで現在のURLを履歴に保存
        history.pushState(null, null, location.href);
        // URLに#tagを設置する
        location.hash = '#site';
    }

    // URLが変更されるのを監視
    $(window).on('popstate', function (event) {
        if (location.hash != '#site') {
            // モーダルを表示
            $("#modal_trigger").prop('checked', true);
        }
    });
    
});

// モーダル表示
$(function () {
    $("#modal_label").on('click', function () {
        $("#modal_trigger").prop('checked', false);
    });
    
});

HTML

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- CSS only -->
    <link rel="stylesheet" href="css/style.css">
    <title></title>
</head>

<body>
    <!-- modal -->
    
    <div class="modal_wrap">
        <input id="modal_trigger" type="checkbox" >
          <div class="modal_overlay">
            <label id="modal_label" for="trigger" class="modal_trigger"></label>
            <div id="modal_content" class="modal_content">
            コンテンツ
            </div>
        </div>
    </div>
    
    <!-- end modal -->

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script type="text/javascript" src="js/main.js"></script>
</body>

</html>

CSS

.modal_wrap input {
    display: none;
}

.modal_overlay {
    display: flex;
    justify-content: center;
    overflow: auto;
    position: fixed;
    top: 0;
    left: 0;
    z-index: 9999;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 22, 72, 0.6);
    opacity: 0;
    transition: opacity 0.2s, transform 0s 0.2s;
    transform: scale(0);
}

.modal_trigger {
    position: absolute;
    width: 100%;
    height: 100%;
}

.modal_content {
    align-self: flex-start;
    width: 80%;
    max-width: 600px;
    padding: 30px 30px 15px;
    box-sizing: border-box;
    background: rgb(255, 254, 237);
    line-height: 1.4em;
    transform: translateY(-100%);
    transition: 0.5s;
    line-height: 1.4;
    font-weight: 100;
    box-shadow: rgba(0, 0, 0, 0.4) 0px 12px 27px 2px;
    
}


.modal_wrap input:checked~.modal_overlay {
    opacity: 1;
    transform: scale(1);
    transition: opacity 0.2s;
}

/* .modal_wrap input:checked~.modal_overlay .modal_content {
    transform: translateY(10%);
} */




注意しなければならないこと

PC版chromeはページ内クリックなどのイベントを起こさないとブラウザバック時の処理が行われず、普通に前のページに戻ってしまいます。また、iOS版chromeはそもそも動きません。

いろいろな対策がされて使用できなくなることもあると思いますので、そのときはまた別の方法を探します。



Javascript

Posted by Next-k