この記事では、jsネイティブウォーターフォールフロープラグインの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。 まずは効果を確認 通常のウォーターフォールフローと同じです。呼び出す際にコンテナ、画像、画像幅を渡すことでウォーターフォールフローを直接生成します。 では、早速コードを見て、アイデアについて話していきましょう。 1.htmlを呼び出します。HTMLには1行だけ必要です。 <本文> <div class="main"></div> <script src="index.js"></script> <スクリプト> // 最初のパラメーター、ウォーターフォール コンテナー var dom = document.getElementsByClassName("main")[0]; // 2 番目のパラメータである画像リンクは配列に書き込まれます var imgArr = ["img/0.jpg","img/45.jpg","img/225.jpg","img/3.png","img/7729.png","img/a.jpg","img/ama.jpg","img/c.png","img/0.jpg","img/3.png","img/45.jpg","img/225.jpg","img/7729.png","img/a.jpg","img/ama.jpg","img/c.png",]; // プラグインを呼び出してパラメータを渡します。3 番目は画像 width.waterFallFlow(dom,imgArr,220); です。 </スクリプト> </本文> 2. CSSに対応するHTML .main は渡されるコンテナであり、position: relative; が必要です。 .main img{transition: all 0.5s;}はアニメーションコードで、コンテナ内のすべての画像に追加されます。 。主要{ 境界線: 1px 実線 #ccc; 幅: 90%; マージン: 0 自動; 位置: 相対的; } .メイン画像{ 遷移: すべて 0.5 秒; } それからjs /** * @param {*} dom はウォーターフォールコンテナを表します* @param {*} imgArr 画像配列* @param {*} wid 画像の幅*/ 関数 waterFallFlow(dom, imgArr, wid) { var gap; //ギャップ var colNumber; //列数 imgDom(); 画像の位置を設定します。 //ウィンドウが変更されたとき window.onresize = function(){ 画像の位置を設定します。 } /**var タイマー = null; * 上に書いたようにスムーズですが、パフォーマンスに影響しすぎます。ウィンドウをドラッグすると、* 写真を撮り直して配置するために関数が頻繁に呼び出されます * * 手ぶれ補正はこれでもできる* * window.onresize = 関数(){ * if(タイマー){ * clearIntval(タイマー); * } * タイマー = setTimeout(関数(){ * setImgPos(); * },300); * } * */ // DOM要素を生成する function imgDom() { (i = 0 とします; i < imgArr.length; i++) { const url = imgArr[i]; img = document.createElement("img"); とします。 url = 画像ファイル img.style.width = wid + "px"; img.style.position = "絶対"; // すべての画像は絶対配置を使用します img.style.left = ""; スタイルトップ = ""; img.onload = 関数(){ setImgPos(); //画像の非同期読み込み} dom.appendChild(画像); } } // 各画像の座標を設定する function setImgPos() { cal(); var colY = new Array(colNumber); //各列に次の画像のY座標を格納する colY.fill(0); //配列を0にする (i = 0 とします; i < dom.children.length; i++) { var imgM = dom.children[i]; var y = Math.min(...colY); // 最小値を見つける var index = colY.indexOf(y); // 列 var x = (index + 1) * gap + index * wid; imgM.style.left = x + "px"; imgM.style.top = y + "px"; //配列を更新 colY[index] += parseInt(imgM.height)+gap; } // 配列内の最大数を見つけて、親 div の折りたたみ問題を解決します var h = Math.max(...colY); コンソールログ(h); dom.style.height = h + "px"; } // 関連データを計算する function cal() { var コンテナの幅 = parseInt(dom.clientWidth); colNumber = Math.floor(containerWidth / wid); //列数 var space = containerWidth - colNumber * wid; gap = space / (colNumber + 1); //ギャップを計算する} } 基本的にコメントを書いてあるので、理解できると思います アイデアを見てみましょう 1. 渡されたパラメータ、コンテナ、画像配列、画像幅を受け入れる 2. 画像要素を作成し、対応するコンテナに追加します。 3. 各画像の幅と高さを設定し、列数と間隔を計算します 4. 絶対位置を使用して画像を配置し、対応する左と上の値、つまり対応するxとy座標を計算します。 最初の3つのステップは問題ありません。4番目のステップを見てみましょう。 アイデアはこうだ 主なアイデアは、次の画像を配置するための最短の列を見つけることです。これで、最短の列が 2 番目の列に表示されます。 この時点で、画像は 2 番目に短い列に追加されます。次に、最も短い列を探し続けて、画像を追加し続けます。 こうして滝の流れの配置は完成しました。具体的な工程を見てみましょう まず、画像の列数を計算し、列数と同じ長さの配列を作成し、すべてを 0 で埋めて、後で y 座標を格納するために使用します。 コンテナ内のサブ要素を走査し、ループ内の現在の配列の最小値を見つけます。最小値の位置(列番号)がy座標です。 これでx座標を見つけることができます。 x = (列数 + 1) * 間隔 + 現在の列 * 幅 (渡された実際のパラメータ) だから、場所がある 毎回配列を更新する必要があることに注意してください。つまり、追加された画像の位置の y 座標を変更し、画像を非同期で読み込む必要があります。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: HTML タグ マーキーはさまざまなスクロール効果を実現します (JS 制御なし)
目次序文成果を達成するコードCSSコードJSコードHTMLコードデモンストレーションのプロセス序文ク...
MySQL 5.7.20 zipインストール、具体的な内容は次のとおりです(1)圧縮パッケージを解凍...
アクセス数が増えると、MySQL データベースへの負荷が増大します。MySQL アーキテクチャを使用...
目次1. カスタム指示とは何ですか? 2. 指示をカスタマイズする方法フック機能3. 応用シナリオ入...
Zabbix は Linux システムのサービス ユニットを監視するためのルールを自動的に検出します...
目次イベントループブラウザ環境イベントループノード環境イベントループ6つのステージ(1)setTim...
コードをコピーコードは次のとおりです。 <html> <本文> <?p...
序文この記事では、CSS3アニメーションを使用して、円が小さいものから大きく拡大し、外側に広がる効果...
チームは新しいフレームを交換しました。すべての新しいビジネスでは、新しいフレームワークと新しいデータ...
目次1. 接続管理2. オプティマイザレベルでの改善3. 機能の改善4. パフォーマンススキーマの最...
元記事:究極の IE6 チートシート: 25 以上の Internet Explorer 6 のバグ...
前回の記事で、MySQL ステートメントの最適化には限界があると述べました。MySQL ステートメン...
01. コマンドの概要md5sum - MD5検証コードを計算して検証するmd5sum コマンドは、...
Linux システムでは、ユーザーが手動で作成したさまざまなアカウントに加えて、システムまたはプログ...
目次1. NodeがHTTPサーバーを構築する2. HTTPサーバーがリクエストを取得する1. Po...