この記事では、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 制御なし)
目次序文ローカルストレージの使用シナリオ使用上の問題解決機能性有効期限を追加データ暗号化を追加する命...
Vueにaxiosを挿入する 'axios' から axios をインポートします。...
目次ネプローダーをインストールするプラグインのインポート始める配置折りたたみディスプレイノードをクリ...
この記事では、Docker を使用して MySQL をデプロイし、データを保持する方法について簡単に...
結果: 実装コード: html <div class="buttons"&...
いわゆる 3 列適応レイアウトとは、両側の幅が固定され、中央のブロックの幅が適応されることを意味しま...
1.オーバーフローコンテンツのオーバーフロー設定(設定されたオブジェクトにスクロールバーを表示するか...
実際のプロジェクトでは、緊急事態を防ぐためにデータベースを頻繁にバックアップする必要があります。しば...
JSX を使用してコンポーネント システムを構築する前に、例を使用してコンポーネントの実装原理とロ...
ウェブサイトのレイアウトの多様化は、当社のフロントエンドの得意分野です。最近、UC ブラウザのデフォ...
1. ノーフープハングアップ信号を無視してプログラムを実行する追加メモnohup コマンドは、ハン...
序文ミニプログラムには、ユーザーを取得するための非常に便利な API があり、getPhoneNum...
tomcat が起動されるたびに、次のログ ファイルがログ ディレクトリに自動的に生成され、日付順...
ユーレカ: 1. JDKイメージを構築するEurekaコンテナを起動するjdkフォルダと必要なファイ...
次のコードを index.html などのデフォルトのホームページ ファイルとして保存し、ルート デ...