このようにVue.jsルーターにスクロール動作を設定できます。
const router = new Router({
mode: 'history',
routes: [
{
path: '/',
name: 'index',
component: Main
},
{
path: '/some-path',
name: 'some-path',
component: SomePath
}
],
scrollBehavior() {
return {x: 0, y: 0}
}
})
これは、最新ではないページのリンクをクリックすると完全に機能します。すでにレンダリングされているリンク、つまりフッター内をクリックしても、何も起こりません。 Vueルーターは、状態遷移がないと想定します。この場合にスクロールアップするための好ましい方法は何ですか?
このトラフvue-routerはできません。ただし、すべてのルーターリンクにscroll to topメソッドを追加できます。
メソッドを作成するだけです
methods: {
scrollToTop() {
window.scrollTo(0,0);
}
}
そして、リンクに追加します
<router-link @click.native="$scrollToTop">
フッターの外側でも使用したい場合は、Vueプロトタイプに追加することをお勧めします
Vue.prototype.$scrollToTop = () => window.scrollTo(0,0)
100%のソリューションではありませんが、最もシンプルなソリューションです
スクロールの動作がまったく機能しないこの質問に来ている人々にさらに追加するために、この質問に答えたいと思いました。
上記のソリューションのどれも動作させることができず、本当にイライラしていました。
私のために働いたのは以下でした:
const router = new Router({
mode: 'history',
routes: [...],
scrollBehavior() {
document.getElementById('app').scrollIntoView();
}
})
VueJsアプリを#appにマウントして、アプリが存在し、選択できるようにします。
必要に応じて、behavior: smooth
を使用できます。
moveTo () {
let to = this.moveToDown
? this.$refs.description.offsetTop - 60
: 0
window.scroll({
top: to,
left: 0,
behavior: 'smooth'
})
this.moveToDown = !this.moveToDown
}
このNiceコンポーネントを使用してください: https://www.npmjs.com/package/vue-backtotop
<back-to-top text="Back to top"></back-to-top>