2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

元の画面位置にスクロールさせる実装について

Last updated at Posted at 2023-06-06

はじめに

前回画面スクロールの処理について書いてみましたが、ページ遷移前の画面のスクロール場所を保持し、
元のページに戻った際に先ほどの画面位置にスクロールする実装を行ったので備忘録として残しておきます。
(コメントで教えていただいたソースコードを使用させていただき、若干修正しております。
ありがとうございます!)

環境
OS Windows10 22H2
エディター Visual Studio Code

やりたいこと

編集ボタンを押下し、修正が完了した後、
一覧画面で先ほど押下した時点での画面位置にスクロールさせたい。

①編集ボタンを押下
image.png

②編集画面にページ遷移するので、修正して修正ボタンを押下
image.png

③一覧画面に戻るときに、先ほどの画面位置までスクロールさせたい
image.png

実装方法

編集ボタンのidを "modify_btn" としています。
クリックされた要素のidがmodify_btnのとき、
スクロール位置をsessionStorageに保存しています。

index.ejs
<form action="/modify" method="GET">
    <input type="hidden" name="default_taskid" value="<%= result.id %>" />
    <input type="hidden" name="default_task" value="<%= result.content %>" />
    <input type="hidden" name="default_date" value="<%= result.date %>" />
    <input type="hidden" name="default_time" value="<%= result.time %>" />
    <input class="btn btn-primary" type="submit" value="編集" id="modify_btn" />
</form>

<script>
window.addEventListener('load', loadFinished);
function loadFinished() {
    var OffsetTop = sessionStorage.getItem("OffsetTop");
    window.scroll({
        top: OffsetTop,
        behavior: 'smooth',

    // sessionStorage削除
    sessionStorage.removeItem("OffsetTop");
}

document.addEventListener('click', event => {
    if (event.target.id === 'modify_btn') {
        //スクロール位置取得
        var location = window.pageYOffset;
        // sessionStorageに保存する
        sessionStorage.setItem('OffsetTop', location);
    }
});
</script>

最後に

この実装方法だと、JavaScriptだけで完結するので、実装しやすかったです。

参考文献

この記事は以下の情報を参考にさせていただきました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?