この記事では、参考までに、無限ロードウォーターフォールフローを実現するための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. DockerはローカルディレクトリをマウントしますDocker は、ホスト上のディレクトリをイ...
序文Linux カーネルでは、netfilter は、パケット フィルタリング、ネットワーク アドレ...
説明: テキストエリアの値の改行を新しい行に変更しますコードをコピーコードは次のとおりです。 <...
この記事の例では、JavaScriptで等速アニメーションを実装するための具体的なコードを参考までに...
実はこれもクリックベイトのタイトルであり、「派手」とは言えません。ただ私が無知で、こうしたラベルを見...
同僚から、MySQL データ型 DECIMAL(N,M) の N と M の意味を尋ねられました。言...
前回の記事では、MySQL の置換関数 (Replace) とセグメンテーション関数 (SubStr...
MySQL はネストされたトランザクションをサポートしていますが、それを実行する人は多くありません....
目次前面に書かれた要件分析 v1アイデア1: インターセプションメソッドを使用して入力ボックスの入力...
この記事では、React Native ScrollViewのプルダウンリフレッシュ効果の具体的なコ...
Linux が NFS サーバーを構築異なるオペレーティング システム間でデータを共有するために、通...
序文名前付きスロットは、スロット内の「name」属性を使用して要素にバインドされます。知らせ: 1....
目次MySQL 複数インスタンスマルチインスタンスの概要マルチインスタンスとは何ですか?複数のインス...
具体的なコードは次のとおりです。 <div id="ボックス"> &...
MySQL データベースがエラー 1045 (28000): ユーザー 'ODBC'...