勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

モーダルウィンドウ表示時にウィンドウのスクロール位置をリセットする方法

  jQuery JavaScript

モーダルウィンドウ内で「縦にスクロール→ウィンドウを閉じる→改めてモーダルウィンドウを開く」とスクロール位置はそのままの状態でウィンドウが開く。これをウィンドウを開く度にスクロール位置を一番上に戻したい(リセットしたい)。以下にサンプルと対応方法をメモ。

 

サンプル

https://taitan916.info/sample/modal_scroll/

通常版のモーダルウィンドウだとスクロール位置はそのままになるが、改良版の方はウィンドウを開く度にスクロール位置がリセットされる筈。

 

対応方法

ソースコード

<button class="modal_btn" data-id="1">通常版</button>
<button class="modal_btn" data-id="2">改良版</button>

<div id="modal_1" class="modal js-modal">
    <div class="modal-container">
        <div class="modal-close js-modal-close">×</div>
        <div class="modal-content">
            <p>通常版</p>
            <p>通常版</p>
            <p>通常版</p>
            <p>通常版</p>
            <p>通常版</p>
            <p>通常版</p>
            <p>通常版</p>
        </div>
    </div>
</div>

<div id="modal_2" class="modal js-modal">
    <div class="modal-container">
        <div class="modal-close js-modal-close">×</div>
        <div class="modal-content">
            <p>改良版</p>
            <p>改良版</p>
            <p>改良版</p>
            <p>改良版</p>
            <p>改良版</p>
            <p>改良版</p>
            <p>改良版</p>
        </div>
    </div>
</div>

<script type="text/javascript" src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script>
$(function(){
    $(`.modal_btn`).on(`click`, function(){
        const data_id = $(this).data(`id`);
        $(`#modal_${data_id}`).addClass('is-active');

        //改良版の場合
        if( data_id == 2 ){

            //スクロール位置をリセットする
            $(`#modal_${data_id}`).find(`.modal-content`).scrollTop(0);
        }
    });
    $(`.modal-close`).on(`click`, function(){
        $(`.modal`).removeClass('is-active');
    });
})
</script>

解説等

以下でスクロール位置をリセットしている。

$(モーダルウィンドウ内のスクロールが発生する部分のセレクタ).scrollTop(0);

 

リファレンス

.scrollTop()

https://api.jquery.com/scrollTop/

 

その他

モーダルウィンドウ自体についてはこちらのページを参考にさせていただいた。

 - jQuery JavaScript

  関連記事

CodeIgniter4 & jQueryを用いて同一サイト内でajax通信する方法
CodeIgniter4 & jQueryを用いて同一サイト内でajax通信する方法

CodeIgniter4.4.4 & jQueryを用いて同一サイト内で ...

jQuery.uploadでリアルタイムプレビュー
jQuery.uploadでリアルタイムプレビュー

やりたい事は、 ・<input type="file">で画像を選択 ...

「slick」でarrows(次に進む・前に戻るボタン)を設定しても表示されない場合の対応方法
「slick」でarrows(次に進む・前に戻るボタン)を設定しても表示されない場合の対応方法

「slick」で画像スライダーを表示する際にarrows(次に進む・前に戻るボタ ...

jQueryで後から追加された要素にイベントを設定
jQueryで後から追加された要素にイベントを設定

jQueryで.html()等を使って追加した要素に対してイベントを設定したかっ ...

jquery.cookie.jsで「$.cookie is not a function」エラー
jquery.cookie.jsで「$.cookie is not a function」エラー

フロントエンド側でCookieを利用したい場合jquery-cookieを用いる ...