Je peux définir le comportement de défilement sur Vue.js Router comme ceci:
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}
}
})
Cela fonctionne parfaitement lorsque vous cliquez sur le lien avec une page non actuelle. Lorsque je clique sur le lien déjà affiché, c’est-à-dire dans le pied de page, rien ne se passe. Vue Le routeur suppose qu'il n'y a pas de transition d'état. Quel est le moyen préféré de faire défiler vers le haut dans ce cas?
Vous ne pouvez pas faire cette vue-routeur. Mais vous pouvez ajouter la méthode de défilement vers le haut à chaque lien de routeur.
Il suffit de créer une méthode
methods: {
scrollToTop() {
window.scrollTo(0,0);
}
}
Et l'ajouter au lien
<router-link @click.native="$scrollToTop">
si vous voulez aussi l’utiliser en dehors de votre pied de page, il est préférable de l’ajouter au prototype Vue prototype
Vue.prototype.$scrollToTop = () => window.scrollTo(0,0)
Ce n'est pas une solution à 100% mais c'est la plus simple
Je voulais répondre à cette question pour en ajouter plus aux gens qui viennent à cette question où le comportement de défilement ne fonctionne pas du tout.
Je ne pouvais obtenir aucune des solutions ci-dessus, et c'était vraiment frustrant.
Ce qui a fini par travailler pour moi était le suivant:
const router = new Router({
mode: 'history',
routes: [...],
scrollBehavior() {
document.getElementById('app').scrollIntoView();
}
})
Je monte mon application VueJs sur #app afin que je puisse être certain qu'elle est présente et disponible pour la sélection.
Vous pouvez soit utiliser behavior: smooth
si tu veux.
moveTo () {
let to = this.moveToDown
? this.$refs.description.offsetTop - 60
: 0
window.scroll({
top: to,
left: 0,
behavior: 'smooth'
})
this.moveToDown = !this.moveToDown
}
Utilisez ce composant Nice: https://www.npmjs.com/package/vue-backtotop
<back-to-top text="Back to top"></back-to-top>