この記事の例では、ウォーターフォールフローレイアウトを実装するためのjsの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。 1. ウォーターフォールフローレイアウトのアイデアを実装する データを準備した後 スクロールイベントをバインドする 2. コード(画像パスを変更した後、直接実行できます) <!DOCTYPE html> <html> <ヘッド> <メタ文字セット="UTF-8"> <title>ドキュメント</title> <スタイル> .cont{マージン: 0 自動;背景: #ccc;位置: 相対;} .cont::after{content: "";display: block;clear: both;} .box{float: 左;padding: 6px;} .imgbox{境界線: 実線 1px 黒;パディング: 6px;境界線の半径: 6px;} .imgbox img{幅: 200px;表示: ブロック;} </スタイル> <script src="data/data.js"></script> <スクリプト> // W1. データを準備する // W2. スクロール イベントをバインドする // W3. ページが下部に到達したかどうかを判断します (スクロール距離 + スクロール領域の高さ == 最後の要素の上部) // W4. 新しいデータを読み込み、新しいページをレンダリングします // W5. ウォーターフォール効果を再実行します onload = function(){ 新しい滝; } クラス Waterfall{ コンストラクタ(){ // 1. 要素を選択する this.box = document.querySelectorAll(".box"); this.cont = document.querySelector(".cont"); ドキュメント要素のクライアント高さを設定します。 this.heightArr = []; // 2. レイアウトを完成させる this.init(); イベントを追加します。 } イベントを追加します(){ var that = this; onscroll = 関数(){ var scrollT = document.documentElement.scrollTop; if (that.clientH + scrollT > that.scrollH - 300) { .render() を使う } } } 与える(){ for(var i=0;i<data.length;i++){ var img = document.createElement("img") データファイル var imgbox = document.createElement("div") imgbox.className = "imgbox"; var ボックス = document.createElement("div") box.className = "ボックス"; imgbox.appendChild(画像); box.appendChild(画像ボックス); this.cont.appendChild(ボックス); } // すべてを初期化します this.box = document.querySelectorAll(".box"); this.heightArr = []; // ウォーターフォール構造を再レンダリングします this.firstLine(); this.otherLine(); } 初期化(){ // 行に収まるセルの最大数を計算し、最大幅を計算します。this.clientW = document.documentElement.clientWidth; this.boxW = this.box[0].offsetWidth; this.maxNum = parseInt(this.clientW / this.boxW) this.cont.style.width = this.boxW * this.maxNum + "px"; // 3. 最初の行を区別する this.firstLine() // 4. 他の行を区別する this.otherLine(); } 最初の行(){ // 5. すべての要素の高さを取得して保存します for(var i=0;i<this.maxNum;i++){ this.heightArr.push(this.box[i].offsetHeight); } } その他の行(){ for(var i=this.maxNum;i<this.box.length;i++){ // 6. 最初の行の高さをすべて取得する // console.log(this.heightArr) // 最小値と最小値のインデックスを計算します // var min = getMin(this.heightArr); // var min = Math.min.apply(null,this.heightArr); var min = Math.min(...this.heightArr); var minIndex = this.heightArr.indexOf(min); // コンソールログ(minIndex); // 7. 要素の位置を設定する this.box[i].style.position = "absolute"; // 8. 要素の上端と左端を設定する this.box[i].style.top = min + "px"; this.box[i].style.left = minIndex * this.boxW + "px"; // 9. 最小値を変更する this.heightArr[minIndex] += this.box[i].offsetHeight; } ドキュメントのスクロールの高さを設定します。 } } 関数 getMin(arr){ // まず配列をインターセプトします(ディープコピー用) // 次に、インターセプトした新しい配列をソートします // 0 番目の位置を検索します // 戻り値 return arr.slice(0).sort((a,b)=>ab)[0]; } </スクリプト> </head> <本文> <div class="cont"> <div class="box"> <div class="imgbox"> <img src="../imgs/4.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/2.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/3.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/5.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/1.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/6.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/7.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/8.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/9.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/10.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/4.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/2.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/3.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/5.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/1.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/6.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/7.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/8.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/9.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/10.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/4.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/2.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/3.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/5.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/1.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/6.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/7.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/8.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/9.jpg" alt=""> </div> </div> <div class="box"> <div class="imgbox"> <img src="../imgs/10.jpg" alt=""> </div> </div> </div> </本文> </html> 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Dockerfile を使用して Docker でイメージを構築する方法
>>: テーブルの作成、フィールドの追加、フィールドの変更、インデックスの追加によく使用される MySQL の SQL 文の概要
目次1. グローバル beforeEach 1. グローバル beforeEach 2. 実装2. ...
目次JSBridgeの起源JSBridgeの双方向通信原理JSはネイティブを呼び出すネイティブコール...
inputボックスを純粋な数字のみに制限する1、onkeyup = "value=valu...
Linuxファイアウォールの状態を確認する方法1. 基本操作 # ファイアウォールのステータスを表示...
序文: Vue を使用する場合、多くの場合、カスタム プラグインをいくつか使用して記述し、 Vue....
新しい Linux ディストリビューションには rc.local ファイルがなくなりました。サービス...
目次1. jQueryの紹介2. jQueryセレクター2.1 5つの基本セレクタ2.2 4種類の関...
目次HTML ページの作成js部分の機能を実装する1. 左ボタンと右ボタン2. 小さな円を動的に生成...
1. Compose の紹介Compose は、マルチコンテナ Docker アプリケーションを定義...
この記事では、ネイティブ JS で実装されたドラッグ可能な写真ウォールを紹介します。効果は次のとおり...
Google Chrome では、ログインに成功すると、パスワードを記憶するかどうかを尋ねるメッセー...
目次スイッチも複雑なコードブロックもありませんPythonからのインスピレーション辞書を使用してスイ...
この記事では、動的なパーティクル効果を実現するためのjQueryの具体的なコードを参考までに紹介しま...
ダウンロードhttp://nginx.org/en/download.html解凍ダウンロードしたn...
mysql ユーザーを作成し、承認します。形式: 「ユーザー パスワード」で識別されるユーザー@ログ...