この記事では、参考までに、無限ロードウォーターフォールフローを実現するための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 ステートメントの非標準実装コード
<html> <ヘッド> <meta http-equiv="...
目次序文1. 準備 - サーバーとnginxの使用1. サーバーを準備する2. nginxをインスト...
ここ数年、ウェブサイト開発では DIV+CSS が非常に人気があり、当時は大きな騒動を引き起こしまし...
最近、Bootstrap を使って Web サイトを開発しています。表を処理していたところ、PC で...
序文今日、Xianyuを閲覧していたとき、各行の高さが同じではないことに気付きました。調べてみると、...
数日前、ある要件に取り組んでいたとき、MySQL で重複レコードをクリーンアップする必要がありました...
iframe を使用すると、他の Web サイトのページを簡単に呼び出すことができますが、注意して使...
Ubuntu ではデフォルトで root ログインが許可されていないため、初期の root アカウン...
タイトルXML/HTML コードコンテンツをクリップボードにコピー< h1 >第 1 レ...
主要な Web サイトと個人的な習慣に従って、Docker ソースを追加するには次の方法を使用します...
みなさんこんにちは。今日は12連休ですが、何かお買い物はしましたか?今日は「Linux View S...
この記事では、例を使用して、MySQL でスケジュールされたタスクを設定する方法について説明します。...
Anaconda は、大規模なデータ処理、予測分析、科学計算のための最も人気のある Python デ...
私は最近新しい会社に入社したのですが、データベース設計にいくつか小さな問題があることに気付きました。...
目次1. ウィザードに従って仮想マシンを作成します2. オペレーティングシステムをインストールします...