上毛印刷株式会社

【JavaScript】バニラjsでページ内リンクを貼る

【JavaScript】バニラjsでページ内リンクを貼る

2026年11月05日
WEBサイト制作
  • #HTML
  • #css
  • #JavaScript
  • #tips

こんにちは!
上毛印刷WEB制作担当のソーヤです。

今回は、当たり前すぎてど忘れしていたページ内リンクを紹介します!
何を今更と思われるかもしれませんが、
WEBサイトには必須のtipsなのでリマンドしておきましょう!

実装例

HTML例

<div class="link-button">
	<div><a href="#link5">link5</a></div>
	<div><a href="#link4">link4</a></div>
	<div><a href="#link3">link3</a></div>
	<div><a href="#link2">link2</a></div>
	<div><a href="#link1">link1</a></div>
</div>
<div class="link-target" id="link5">link5</div>
<div class="link-target" id="link4">link4</div>
<div class="link-target" id="link3">link3</div>
<div class="link-target" id="link2">link2</div>
<div class="link-target" id="link1">link1</div>

CSS例

  .link-button{
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    margin: 0 0 60px;
  }
  .link-button div{
    margin: 5px;
  }
  .link-button div a{
    display: flex;
    padding: 10px 30px 10px 15px;
    justify-content: center;
    align-items: center;
    background-color: #01b546;
    color: #fff;
    border-radius: 20px;
    transition: .4s;
    position: relative;
  }
  .link-button div a::after{
    content: '';
    position: absolute;
    top: 17px;
    right: 10px;
    width: 7px;
    height: 7px;
    border-top: 2px solid #fff;
    border-right: 2px solid #fff;
    transform: rotate(135deg);
    transition: .4s;
  }
  .link-button div a:hover{
    opacity: 0.7;
  }
  .link-button div a:hover::after{
    top: 20px;
  }
  .link-target{
	font-size: 24px;
	margin: 0 0 1000px;
  }

JavaScript例

document.addEventListener('click', function(e) {
  const link = e.target.closest('a[href^="#"]');
  if (!link) return;
  const href = link.getAttribute('href');
  const target = document.querySelector(
    href === '#' || href === '' ? 'html' : href
  );
  if (!target) return;
  e.preventDefault();
  const position = target.getBoundingClientRect().top + window.pageYOffset;
  window.scrollTo({
    top: position,
    behavior: 'smooth'
  });
});

まとめ

今回もjQueryではなく、Vanilla.jsで実装してみました。

コピペしてガンガン使ってください!

WEB制作担当ソーヤ

ソーヤ

上毛印刷WEB制作担当
東証プライム企業の本社WEB受託チームにてフロントエンドエンジニアの経験あり。


この記事に対するご意見・ご感想・ご質問等ありましたら、
ぜひ下記フォームにてお送りください。

    お名前必須
    メールアドレス必須
    お問い合わせ内容必須
    PAGE TOP