勉強したことのメモ

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

アンカーリンクでURLに「#hoge」のようなパラメータを残さずスクロールさせる方法

  jQuery JavaScript

アンカータグをクリックしてもブラウザのURL欄に「#hoge」のようなハッシュを残さずに指定の要素までスクロールできるというコーディングデータがあった。しかも他ページからハッシュ付きのURLで遷移してきてもスクロール後にハッシュが消えるような挙動を取っており、どういう手段なのか気になったのでメモ。

 

サンプル

https://taitan916.info/sample/anchor_link/

 

ソースコード

<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>アンカータグでスクロールテスト</title>
</head>
<body>
    <a href="#test1">test1</a>
    <a href="#test2">test2</a>
    <a href="#test3">test3</a>
    <div style="background-color: #f00; height: 1000px;" id="test1"></div>
    <div style="background-color: #0f0; height: 1000px;" id="test2"></div>
    <div style="background-color: #00f; height: 1000px;" id="test3"></div>
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
    <script type="text/javascript">
    $(function(){

        const hash = decodeURI(location.hash);
        if(hash){
            $("html, body").animate({scrollTop:$(hash).offset().top});
            window.history.replaceState(null, '', window.location.pathname + window.location.search);
        }

        $('a[href^="#"]').click(function(){
            const href= $(this).attr("href");
            const target = $(href == "#" || href == "" ? 'html' : href);
            $("html, body").animate({scrollTop:target.offset().top});
            window.history.replaceState(null, '', window.location.pathname + window.location.search);
            return false;
        });
    });
    </script>
</body>
</html>

他ページから遷移してきた際は「if(hash){」のところで、リンクをクリックした際は「$('a[href^="#"]').click(function(){」で検知しスクロールした後にpushStateでハッシュを削除している。尚、ハッシュは特に削除しなくてもいい場合は以下の形でOK。

$(function(){
    $('a[href^="#"]').click(function(){
        const href= $(this).attr("href");
        const target = $(href == "#" || href == "" ? 'html' : href);
        $("html, body").animate({scrollTop:target.offset().top});
        return false;
    });
});

 

所感

URLはできるだけシンプルな方が良い派なので今後も使っていきたいところ。

 - jQuery JavaScript

  関連記事

jQueryでユーザーが編集可能な文字列をページ上に表示する際にエスケープする方法

GETパラメータを取得し、その内容をページ上に表示したいケースがあった。また、A ...

jQueryのloadメソッドでファイル(ページ)を呼び出す

サイト内でヘッダーやフッター等共通のパーツはそれぞれ別ファイルに分けてPHPのi ...

tableのフィルター機能

jQueryのプラグインで簡単にフィルター機能が つけられたのでメモ。 ■必要な ...

jQueryにて特定のIDが存在するかチェックし分岐処理する方法

jQueryにて特定のIDが存在するかチェックし分岐処理したいというケースがあっ ...

オリジナルのjQueryプラグインを作成する方法

オリジナルのjQueryプラグインを作ってみたかった。というのも大抵のものはググ ...