Vue scrollBehaviorのスクロール挙動は、前回のブラウズ位置に後退ページを表示することを実現します。
2844 ワード
前提:
前にkeep-Aliveコンポーネントについて書きましたが、現在リストページが詳細ページに入った後、バックリストに戻り、前回訪問した位置(原理はキャッシュリストページのデータで実現されます)を表示します。キャッシュの方法は、データの更新が間に合わなくなり、ページエラーが発生します。例えば、商品の質問に対して、バックグラウンドで答えた後、内容を修正してはいけません。フロントの更新が間に合わないと、編集できますが、実際の状態は編集できません。
プロフィール:
先端ルートを使って、新しいルートに切り替えた時、ページを上に転がしたり、元のスクロール位置を維持したりして、ページを再読み込みするようにします。vue-routerは、より良いことができますが、それはあなたが自分で指定したルートを切り替える時のページをどのようにスクロールできますか?
注意:この機能は
公式文書の概要:スクロールの挙動
使用方法:
utils.js
この方法では、ルーティングto,fromの2つのオブジェクトを判断することにより、必要な判断を行うことができる。
savedPositionパラメータは最後のスクロール位置を記録します。
すべてのルートナビゲータに対して、ページを上にスクロールさせます。
ページデータがロードを要求して遅延がある場合、ページが直接スクロールされると、ページデータ要求が戻り、DOMが再レンダリングされ、スクロールが無効になる場合。
したがって、公式文書は非同期スクロールの方法を追加しました。
注:私のプロジェクトのmobile端末のデータローディングは
締め括りをつける
上记は小编で绍介したVue scrollBehaviorのロールバックを実现しました。前回ご覧になった位置に表示されます。皆さんに助けてほしいです。もし何かご质问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。
前にkeep-Aliveコンポーネントについて書きましたが、現在リストページが詳細ページに入った後、バックリストに戻り、前回訪問した位置(原理はキャッシュリストページのデータで実現されます)を表示します。キャッシュの方法は、データの更新が間に合わなくなり、ページエラーが発生します。例えば、商品の質問に対して、バックグラウンドで答えた後、内容を修正してはいけません。フロントの更新が間に合わないと、編集できますが、実際の状態は編集できません。
プロフィール:
先端ルートを使って、新しいルートに切り替えた時、ページを上に転がしたり、元のスクロール位置を維持したりして、ページを再読み込みするようにします。vue-routerは、より良いことができますが、それはあなたが自分で指定したルートを切り替える時のページをどのようにスクロールできますか?
注意:この機能は
history.pushState
をサポートするブラウザでのみ使用できます。公式文書の概要:スクロールの挙動
使用方法:
const router = new VueRouter({
routes: [...],
scrollBehavior (to, from, savedPosition) {
// return
}
})
または統合モードの書き方:utils.js
export function scrollBehavior (to, from, savedPosition) {
// return
}
index.js
import Vue from 'vue'
import Router from 'vue-router'
import { scrollBehavior } from './utils'
Vue.use(Router)
const router = new Router({
mode: 'history',
scrollBehavior,
routes: [
...routesPC,
...routesMO
]
})
export default router
scrollBehavior
方法でtoとfromルーティングオブジェクトを受信する。第3のパラメータsavedPositionは、popstateナビゲーション(ブラウザの前進/後退ボタンでトリガする)の場合にのみ使用できます。この方法では、ルーティングto,fromの2つのオブジェクトを判断することにより、必要な判断を行うことができる。
savedPositionパラメータは最後のスクロール位置を記録します。
return {x:number,y:number}
を通じてページのスクロールの位置を制御する。すべてのルートナビゲータに対して、ページを上にスクロールさせます。
scrollBehavior (to, from, savedPosition) {
return { x: 0, y: 0 }
}
後退時に前回のスクロール位置にスクロールしたいです。条件を満たすと、savedPositionに値がある場合:
scrollBehavior (to, from, savedPosition) {
if (savedPosition) {
return savedPosition
} else {
return { x: 0, y: 0 }
}
}
追加状況:非同期スクロールページデータがロードを要求して遅延がある場合、ページが直接スクロールされると、ページデータ要求が戻り、DOMが再レンダリングされ、スクロールが無効になる場合。
したがって、公式文書は非同期スクロールの方法を追加しました。
scrollBehavior (to, from, savedPosition) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({ x: 0, y: 0 })
}, 500)
})
}
これは帰った後、一定の遅延があって、また転がります。自分のプロジェクトの具体的な状況によって、一定の修正ができます。互換性があります。注:私のプロジェクトのmobile端末のデータローディングは
vue-mugen-scroll
スライドローディングデータセットを使っていますが、ネット上ではローディングをトリガする方法が見つかりませんでした。だから、リストページに戻ってから、データの更新は一ページだけです。最後までスクロールしても、前回のデータが見つけられません。使用状況によっては、制限がありますので、記録して準備してください。締め括りをつける
上记は小编で绍介したVue scrollBehaviorのロールバックを実现しました。前回ご覧になった位置に表示されます。皆さんに助けてほしいです。もし何かご质问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。