スケルトンスクリーンの使用
Vueアーキテクチャスケルトンスクリーンアイデアの概要
抽象コンポーネントの定義抽象コンポーネントとは何ですか? レンダリング中にスキップされ、実行時操作のみを実行するコンポーネントです。 エクスポートデフォルト{ 名前: 'GmSkeleton'、 abstract: true // 抽象コンポーネントのプロパティ} スロットを取得し、操作スケルトン画面を初期化するレンダリング(h) { const スロット = this.$slots.default || [h('')] this.$nextTick().then(() => { this.handlerPrefix(スロット、this.showSpin ? this.addSkeletPrefix : this.removeSkeletPrefix) }) スロットの長さが1より大きい場合、h('div', { 静的クラス: this.showSpin ? 'g-spinner' : '' }, スロット) : スロット } ここでは、handlerPrefix が実際の DOM を取得する必要があるため、スロット処理メソッドを nextTick に配置します。NextTick は、ソートされた更新キュー内のすべてのメソッドを実行するために使用されます。レンダリングを実行する前に、GMSkeleton コンポーネントの renderWatcher が更新キューに収集されています。そのため、nextTick CallBack 関数は、レンダリング後に対応するスロット内のすべての実際の DOM を取得できます。nextTick の原理がわからない場合は、nextTick についてわからないことを参照してください。 サイクルスロット操作クラス名handlerComponent(スロット、handler/* addSkeletPrefix | removeSkeletPrefix */、init) { const originchildren = (((slot.componentInstance || {})._vnode || {}).componentOptions || {}).children const compchildren = ((slot.componentInstance || {})._vnode || {}).children !init && ハンドラ(スロット) if (compchildren) this.handlerPrefix(compchildren, handler, false) if (originchildren) this.handlerPrefix(originchildren, handler, false) }, handlerPrefix(スロット、ハンドラー、init = true) { スロット.forEach(スロット => { var children = slot.children || (slot.componentOptions || {}).children || ((slot.componentInstance || {})._vnode || {}).children if (スロットデータ) { スロットコンポーネントオプションの場合 !init && ハンドラ(スロット) } そうでない場合 (!this.$hoc_utils.getAbstractComponent(スロット)) { ;(関数(スロット) { const handlerComponent = this.handlerComponent.bind(this, slot, handler, init) const 挿入 = (slot.data.hook || {}).挿入 ;(slot.data.hook || {}).insert = () => { // 関数のリファクタリング、元のコンポーネントフックを変更し、挿入が 1 回だけ実行されるようにします insert(slot) ハンドラコンポーネント() } ;(slot.data.hook || {}).postpatch = handlerComponent }).call(this, スロット) } } (スロット&& slot.elm && slot.elm.nodeType === 3)の場合{ if (this.showSpin) { slot.memorizedtextContent = slot.elm.textContent slot.elm.textContent = '' } それ以外 { slot.elm.textContent = slot.memorizedtextContent || slot.elm.textContent || slot.text } } children && this.handlerPrefix(children, handler, false) }) }, ステップバイステップの分析:
vnodeを操作するための静的クラス名addSkeletPrefix(スロット) { const rootVnode = slot.componentOptions ? (slot.componentInstance || {})._vnode || {} : スロット; (ルートノード.elm)の場合{ rootVnode.elm.classList.add(this.skeletPrefix) } それ以外 { ;(rootVnode.data || {}).staticClass += ` ${this.skeletPrefix}` } }, スケルトンプレフィックスを削除します(スロット) { const rootVnode = slot.componentOptions ? (slot.componentInstance || {})._vnode || {} : スロット; (ルートノード.elm)の場合{ rootVnode.elm.classList && rootVnode.elm.classList.remove(this.skeletPrefix) } そうでない場合 (rootVnode.data.staticClass) { rootVnode.data.staticClass = rootVnode.data.staticClass.replace(` ${this.skeletPrefix}`, '') } } addSkeletePrefixはgm-skeletonクラス名を追加するために使用され、removeSkeletonPrefixはgm-skeletonクラス名を削除するために使用されます。 使い方'vue' から Vue をインポートします 'path/to/GMSkeleton' から GMSkeleton をインポートします Vue.use(GMSkeleton) <gm-スケルトン> <コンポーネント /> <div></div> <div><span>フロントエンド マーティン</span></div> </gm-スケルトン> 値の受け渡し
効果は以下のとおりです特定のスタイルは、開発者が書いたスタイルに従って生成され、上記のようにgm-skeletonでラップされます。以下は簡単な例です。 完全な住所Vue スケルトン スクリーンを実装するための 80 行のコード 以上がvueでスケルトン画面を実装した例の詳細です。vueでスケルトン画面を実装する方法の詳細については、123WORDPRESS.COMの他の関連記事にも注目してください! 以下もご興味があるかもしれません:
|
<<: MySQL 5.7.20 の解凍バージョンをインストールするための詳細な手順 (2 つの方法)
>>: Linux で Scala 環境を構築し、簡単な Scala プログラムを書く
目次1. デカルト積現象2. 接続クエリの知識ポイントのまとめ1) 結合クエリとは何ですか? 2) ...
NULL が頻繁に使用されるのはなぜですか? (1)Javaのnull Java の NullPoi...
最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...
Linux に PHP7 をインストールするにはどうすればいいですか? 1. 依存パッケージをインス...
絶対、相対、固定位置の位置決めabsolue: 絶対配置。上、下、左、右を使用して、配置先の親要素に...
1. MySQL 5.6をインストールした後、正常に有効化できないMySQL の圧縮バージョンは、解...
この記事では、ネイティブ JS で実装された共有サイドバーを紹介します。効果は次のとおりです。 以下...
進捗バーがスムーズではないフロントエンドを学ぶ学生のほとんどは、オーディオプレーヤーやビデオプレーヤ...
序文前回はLinearLayoutについて説明しました。今回はFrameLayoutの使い方を説明し...
目次質問分析する解決するAlert() 関数を置き換えるsetTimeOut関数まとめ質問数日前、J...
初めてのブログです。データベースの勉強を始めた頃のことを書いています。自分でダウンロードしたのですが...
DOMContentLoaded イベント文字通り、DOM がロードされた後に実行されます。 win...
前回の Docker に関する記事では、MAC システムでの構築について説明しました。この記事では、...
Windows 64 ビット版 MySQL 5.7 以降の解凍パッケージにデータディレクトリ、my-...
目次序文インストールと使用方法モジュラー管理Vuex の状態永続性要約する序文Vue 開発では、ユー...