この記事では、参考までに、無限ロードウォーターフォールフローを実現するためのVueの具体的なコードを紹介します。具体的な内容は次のとおりです。 私が作成したウォーターフォールフローは、管理背景のメインコンテンツに似たネストされたページに配置されています。フルスクリーンに変更したい場合にも非常に便利です。実際、要素でonScrollを使用する際の落とし穴を回避できるため、より簡単です。 このウォーターフォールフローを通じて、次の知識ポイントを習得できます。 1. 要素のスクロール イベントをリッスンするのは、ウィンドウで直接リッスンするよりも少し面倒です。 ここでは、mockjs を使用して画像データをシミュレートし、その後、axios を通じて画像データを呼び出します。他のデータ ソースも使用できます。 画像の高さを計算して、画像を読み込む列を決定します。 コードを直接貼り付けてください。質問がある場合は、お気軽にご相談ください。 <テンプレート> <div class="waterfall wf-wrap" ref="waterfall" @scroll="onScroll"> <ul> <トランジショングループ名="リスト" タグ="li"> <li v-for="waterfallList 内の (item,index)" :key="インデックス" クラス="wf-item" :style="{top:item.top+ 'px',left:item.left+'px', width:item.width+'px', height:item.height + 'px'}" > <img :src="item.src" /> </li> </トランジショングループ> </ul> </div> </テンプレート> <スクリプト> "@/api/demo" から { getList } をインポートします。 エクスポートデフォルト{ 名前:「滝」 データ() { 戻る { 滝リスト: [], 滝Col: 5, 列幅: 236, マージン右: 10, マージン下: 10, 高さ: [], リストクエリ: { ページ: 1, 制限: 5, 並べ替え: "+id" }, 読み込み中: false、 表示: 真 }; }, マウント() { これを初期化します。 }, メソッド: { 初期化() { // 初期化されると、各列の高さは 0 になります this.colHeights = 新しい配列(this.waterfallCol); (i = 0 とします; i < this.colHeights.length; i++) { this.colHeights[i] = 0; } this.colWidth = (this.$refs.waterfall.clientWidth - (this.waterfallCol - 1) * this.marginRight) / this.waterfallCol; this.loadImgs(); }, 画像を読み込む() { this.loading = true; // API からデータを取得する getList(this.listQuery).then(res => { 画像を res.data.items とします。 promiseAll = [] とします。 画像 = [], 合計 = 画像の長さ; (i = 0 とします; i < 合計; i++) { promiseAll[i] = 新しいPromise(resolve => { imgs[i] = 新しい画像(); 画像URIをコピーする imgs[i].onload = () => { imgData = {} とします。 imgData.height = (imgs[i].height * this.colWidth) / imgs[i].width; imgData.width = this.colWidth; 画像URIをコピーします。 this.waterfallList.push(画像データ); this.rankImgs(画像データ); imgs[i]を解決します。 }; }); } Promise.all(promiseAll).then(() => { this.loading = false; これをさらに読み込む(); }); }); }, ロードモア() { もし ( this.$refs.waterfall.clientHeight + this.$refs.waterfall.scrollTop > this.filterMin().minHeight && this.loading == false ){ this.loading = true; タイムアウトを設定する(() => { this.loadImgs(); }, 200); } }, ランク画像(画像データ) { min = this.filterMin() とします。 imgData.top = min.minHeight; imgData.left = min.minIndex * (this.colWidth + this.marginRight); this.colHeights[min.minIndex] += imgData.height + this.marginBottom; }, フィルター最小値() { minHeight = Math.min.apply(null, this.colHeights); とします。 戻る { 最小高さ: 最小高さ、 最小インデックス: this.colHeights.indexOf(minHeight) }; }, スクロール() { これをさらに読み込む(); } } }; </スクリプト> <style lang="scss" スコープ> ul li { リストスタイル: なし; } .wf-wrap { 位置: 相対的; 幅: 100%; 高さ: 100%; オーバーフロー: スクロール; } .wf-item { 位置: 絶対; } .wf-item画像{ 幅: 100%; 高さ: 100%; } .list-enter-active、 .list-leave-active { 遷移: すべて 1; } .list-enter、.list-leave-to /* バージョン 2.1.8 未満では .list-leave-active */ { 不透明度: 0; 変換: translateY(30px); } </スタイル> 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL UPDATE ステートメントの非標準実装コード
超初心者の私は、MySQL を学び始めたばかりで、インストール プロセス中に多くの問題に遭遇しました...
効果画像:実装コード: <テンプレート> <div id="map&qu...
1.1 ストレージエンジンの概要 1.1.1 ファイルシステムストレージファイル システム: オペ...
何ですかまず、Docker の概念を見てみましょう。アプリケーションと実行環境をコンテナにパッケージ...
目次成し遂げる:要約:言うことはあまりありませんが、まずは効果を見てみましょう。 カードホバー、レス...
ダウンロード参考:ダウンロードするコアパッケージを選択してくださいダウンロード後、ファイルをサーバー...
httpとhttpsの違いは一部のウェブサイトでは、http を開くと、安全ではないというメッセージ...
Dockerはmysqlをインストールします docker search mysql 検索 dock...
方法は2つあります: 1. サービス方法ファイアウォールのステータスを確認します。 [root@ce...
目次1. 基本概念と基本コマンド1) 基本的な概念2) 基本コマンド2. SQL文の記述順序と実行順...
次のように、Win10 での 2 つの MySQL5.6.35 データベースのインストールを記録しま...
FFMPEG 3.4.1 バージョンパラメータの詳細使用方法: ffmpeg [オプション] [[入...
プロジェクトドキュメントディレクトリDiv+CSS 命名規則 - 4 - Div+css 命名規則 ...
Kubernetes を学習するときは、Kubernetes 環境で練習する必要があります。ただし、...
前回の記事では、nginx がリクエスト ラインのデータを読み取って、リクエスト ラインを解析する方...