この記事では、参考までに、無限ロードウォーターフォールフローを実現するための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 ステートメントの非標準実装コード
1. 事前に準備する便宜上、ここで 2 つのテーブルを作成し、そこにいくつかのデータを追加します。果...
プロジェクトをリリースするときに、キャッシュをクリーンアップする必要があるという問題に遭遇することが...
目次概要Gulp.jsをインストールするGulp.jsを使用してプロジェクトを作成するgulpfil...
目次結合アルゴリズム駆動テーブルと非駆動テーブルの違い1. 単純なネストループ結合、単純なネスト、イ...
目次1. 画像のバイナリデータを表示する方法2. 絵の種類の見分け方3. 画像の種類を検出する方法3...
この記事は、JS レッドブックの第 8 章に記載されているオブジェクトに関する 2 番目の記事です。...
この記事では主に、MySQL バイナリ パッケージのインストール/起動/シャットダウンのプロセスを紹...
Vueのシンプルなタイマーを参考にしてください。具体的な内容は以下のとおりです原理: setInte...
目次序文文章1. グローバル登録2. 部分登録3. フック機能とパラメータ設定4. 柔軟な使い方(1...
1.Mysqlイメージを取得するdocker pull mysql:5.7 2. MySQLイメージ...
この記事では、Docker を使用して MySQL をデプロイし、データを保持する方法について簡単に...
この記事は、「24 Days of Linux Desktop」の特別シリーズの一部です。 Open...
目次圧縮ファイルをダウンロードするアドレス: https://dev.mysql.com/downl...
Sublime Text 2 は、軽量でシンプル、効率的なクロスプラットフォーム エディターです。ブ...
1. データを準備するこのテーブルでは次の操作が実行されます 学生テーブルを作成 ( id int ...