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>
CSS

前の記事

Tableレイアウト
CSS

次の記事

width単位