url#以降を非表示

ページ内リンクで遷移した時、urlのハッシュ(#)以降を表示させない方法

JavaScript

event.preventDefault() でaタグの動作(#xxxを追加)を防ぐ
history.replaceState()でURLからハッシュを削除

HTML

<div class="oh">
  <ul id="oh_top">
    <li><a href="#link1" onclick="scrollToAnchor(event, 'link1')">リンク1</a></li>
    <li><a href="#link2" onclick="scrollToAnchor(event, 'link2')">リンク2</a></li>
    <li><a href="#link3" onclick="scrollToAnchor(event, 'link3')">リンク3</a></li>
    <li><a href="#link4" onclick="scrollToAnchor(event, 'link4')">リンク4</a></li>
  </ul>

    <div id="link1">
      <p>リンク1 エリア</p>
    </div>
    <div id="link2">
      <p>リンク2 エリア</p>
    </div>
    <div id="link3">
      <p>リンク3 エリア</p>
    </div>
    <div id="link4">
      <p>リンク4 エリア</p>
    </div>
  </div>

JavaScript

<script>
 function scrollToAnchor(event, id) {
   event.preventDefault();
   const element = document.getElementById(id);
   if (element) {
element.scrollIntoView({ behavior: "smooth" });
history.replaceState(null, null, location.pathname);
   }
 }
</script>

jQuery版

aタグではなく他のタグ(liなど)を使ってaタグの動作(#xxxを追加)を防ぐ

  • リンク1
  • リンク2
  • リンク3
  • リンク4

HTML

<div class="oh">
 <ul id="oh2_top">
   <li id="link1p">リンク1</li>
   <li id="link2p">リンク2</li>
   <li id="link3p">リンク3</li>
   <li id="link4p">リンク4</li>
 </ul>

 <div class="link_wrap">
   <div id="link1point">
<p>リンク1 エリア</p>
   </div>
   <div id="link2point">
<p>リンク2 エリア</p>
   </div>
   <div id="link3point">
<p>リンク3 エリア</p>
   </div>
   <div id="link4point">
<p>リンク4 エリア</p>
   </div>
 </div>
</div>

JavaScript

<script>
  function linkscroll(target) {
    $("html, body").animate({ scrollTop: $(target).offset().top }, "swing");
  }
  $("#link1p").click(function () {
    linkscroll("#link1point");
  });
  $("#link2p").click(function () {
    linkscroll("#link2point");
  });
  $("#link3p").click(function () {
    linkscroll("#link3point");
  });
  $("#link4p").click(function () {
    linkscroll("#link4point");
  });
</script>

ページ読み込み時に自動で消す

リンク先にjsを追加


  history.replaceState(null, "", window.location.pathname + window.location.search);

同一っページ内での#以降を消す

jsを追加


document.querySelectorAll('a[href^="#"]').forEach((anchor) => {
  anchor.addEventListener("click", function (e) {
    setTimeout(() => {
      history.replaceState(null, "", window.location.pathname + window.location.search);
    }); // 100などの数字を追加 }, 100); 移動が完了するのを少し待ってから実行
  });
});
CSS

前の記事

Tableレイアウト
CSS

次の記事

width単位