この記事では、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 制御なし)
WeChatミニプログラムはますます人気が高まっています。多くの大学生が独学で学んでいるのも見てきま...
この記事では、雨滴効果を実現するためのJavaScriptキャンバスの具体的なコードを参考までに紹介...
Hyper-V を展開するためのハードウェア要件は次のとおりです。 64 ビット プロセッサ、具体...
more は、最もよく使用されるツールの 1 つです。最も一般的な使用方法は、出力コンテンツを表示し...
目次vuex 永続性要約するvuex 永続性vuex: ブラウザを更新すると、vuexの状態は初期状...
li はブロックレベル要素であり、デフォルトで 1 行を占めるため、水平方向の配置を実現する場合は、...
序文この記事は主にMySQL起動エラー2002の分析と解決方法を紹介しています。参考と勉強のために共...
HTML5 で contentEditable 属性が導入されて以来、div は textarea ...
この記事の例では、Appleの電卓を実装するためのJSの具体的なコードを参考までに共有しています。具...
最近、プロジェクトに取り組んでいるときに、Web ページ上のキーワードを強調表示する機能に遭遇しまし...
質問1 解決するサービスを開始します: service mysqld start; /sbin/ip...
目次全体的な効果コンテナのスクロールイベントをリッスンするストア内の構成ページが戻るときのスクロール...
序文注: テストデータベースのバージョンはMySQL 8.0ですテーブルを作成し、ユーザー scot...
静的ファイルNginx は高いパフォーマンスで知られており、フロントエンドのリバース プロキシ サー...
目次序文1. カスタムフォーカスコマンド1. 方法1 2. 方法2 3. 方法3 2. 入力ボックス...