🔽

Vueでページを特定要素までスクロールさせるボタンを実装してみた

2024/11/06に公開

動機

LPとかでよくある押すとそのボタンに対応したセクション(要素)までスクロール移動する動作をVueで実現したかったので調べてみ見ました。しかし、検索が下手なのかもしれませんが、ちょうどいい記事が見つけられなかったので今回やってみた実装方法を書いておこうと思います。

コード

めちゃ簡単に実装できたので早速サンプルコードです。

<template>
  <div>
    <button @click="scrollToTarget">Scroll To Target</button>
    <div class="content" v-for="n in 50" :key="n">
      <p>Content {{ n }}</p>
    </div>
    <div ref="target">Target</div>
  </div>
</template>

<script setup>
import { ref } from "vue";

const target = ref(null);
const scrollToTarget = () => {
  if (target.value) {
    target.value.scrollIntoView({
      behavior: "smooth",
    });
  }
};
</script>

<style scoped>
.content {
  margin: 100px 0;
}
</style>

単にscrollIntoView()を使っているだけです。知っていれば簡単ですが、JavaScriptの関数に詳しくない自分にとってはこうやってフレームワークと一緒に使っている例があると助かるので、サンプルコードを公開することにしました。
https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

ヘッドレスCMSを使ったブログサイトのフロントエンドをNuxt.js使って開発している時なんかに参考にしていただければ幸いです!

Discussion