アンカーリンクでURLに「#hoge」のようなパラメータを残さずスクロールさせる方法
アンカータグをクリックしてもブラウザの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でユーザーが編集可能な文字列をページ上に表示する際にエスケープする方法
GETパラメータを取得し、その内容をページ上に表示したいケースがあった。また、A ...
-
-
YouTubeの埋め込み動画をjQuery&CSSでフローティングビデオ対応させる方法
以前にvideoタグで表示させた動画をjQuery&CSSでフローティン ...
-
-
ラジオボタンのカスタムデータ属性を取得し、特定の値の場合はチェックさせない方法
ASPを使用したサイトで特定のradioボタンは選択不可にしたいというケースがあ ...
-
-
jQueryで偶数or奇数行に任意のClassを付与する方法
tableタグの1行目を除く偶数もしくは奇数行のtrタグに任意にClassを指定 ...
-
-
八地方区分→都道府県→路線→駅名の連携したセレクトメニュー の実装方法
八地方区分(関東、近畿等)をプルダウンから選ぶと区分内の都道府県プルダウンが表示 ...