前置き
vue-scrolltoとは
ページ内リンク(アンカーリンク)で
スクロールしながら
指定場所に飛べるもの🌟
ですが、
ページ遷移をして
遷移先の特定の指定場所に
スクロールしたい場合は
どうすれば良いのでしょうか❓
ということで今回は
それを実装していきます💫
⬇️vue-scrolltoの基本的な使い方と
同じページ内での遷移は
こちらをご覧ください✨👀
【Nuxt.js】plugin実践編:vue-scrolltoでスムーズにスクロール
参考:
vue-scrolltoの使い方(基本と別ページ遷移のケース)
Nuxt.jsでハッシュ値を含むURLのリクエストがあった時の処理
コード
index.vueから
sample.vueのid
, main
まで遷移します✈️
index.vue
nuxt-link
の属性v-scroll-to
でid
指定to
で遷移先のページとid
指定
1 2 3 4 5 6 7 |
<template> <div class="page"> <nuxt-link v-scroll-to="'#anchor'" to="/sample/#main"> sampleのanchorに飛ぶ </nuxt-link> </div> </template> |
sample.vue
id
, main
にmargin-top
を多めにつけて
スクロールを分かりやすくしています。
mounted()
部分は後述します✍️
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<template> <div class="page"> <div id="main"> とべた! </div> </div> </template> <script> export default { mounted() { const hash = this.$route.hash if (hash && hash.match(/^#.+$/)) { this.$scrollTo(hash) } } } </script> <style lang="scss" scoped> .page { font-size: 36px; > #main { margin-top: 1500px; } } </style> |
ハッシュ値がある場合
ハッシュ値とは
nuxt-link
でto="/sample/#main"
このように
遷移先を指定したので
urlに#mainが入ります。
この#より後ろがハッシュ値と
言われる部分です。
ハッシュ値があるとvue-scrolltoは機能しない
通常は機能しませんが
機能させるためにmounted()
で
処理を追加しています💫☝️
mounted()で機能させる
DOM操作のできるmounted()
これを使用することで
vue-scrolltoを機能させます✨
⬇️mountedの解説記事はこちら
【Nuxt.js】Nuxt文法編:mounted
route
はurlですね。
urlにhash
が含まれている場合に
scrolltoを使うようにしています。
1 2 3 4 5 6 7 8 9 10 |
<script> export default { mounted() { const hash = this.$route.hash if (hash && hash.match(/^#.+$/)) { this.$scrollTo(hash) } } } </script> |
まとめ
コード自体はいたってシンプルですね🌱
index.vueにmounted()を書くのでは?
と一瞬思いましたが、
ハッシュ値について理解すれば
遷移先に書くべきということが
分かりました💫