ホームページ ウェブフロントエンド jsチュートリアル Jquery ウォーターフォール フロー plug-in_jquery の使用の概要

Jquery ウォーターフォール フロー plug-in_jquery の使用の概要

May 16, 2016 pm 05:48 PM
滝の流れ

滝の流れのレイアウトの簡単な分析

ウォーターフォール フロー Web ページの実装で個人が遭遇する問題と解決策についての簡単な説明

Toss: ウォーターフォール フロー レイアウト (複数列リストの流体レイアウトに基づいて実装)

JavaScript ウォーターフォール フロー主要なウォーターフォール フローの簡単な分析と提案

私はjqueryをよく使うので、滝の流れをプラグイン化することを思いつきました。Xunlei UEDから美しい写真を拝借しましょう。

まず見てみましょうデモ

コードを公開します

コードをコピーします コードは次のとおりです:

;(function($){
var
//参数
setting={
column_width:204,//列宽
column_className:'waterfall_column',//列的类名
column_space:10,//列间距
cell_selector:'.cell',//要排列的砖块的选择器,限定在瀑布流的容器内
img_selector:'img',//要加载的图片的选择器
auto_imgHeight:true,//是否需要自动计算图片的高度
fadein:true,//是否渐显载入
fadein_speed:600,//渐显速率,单位毫秒
insert_type:1, //砖块插入方式,1为插入最短那列,2为按序轮流插入
getResource:function(index){ } //获取动态资源函数,必须返回一个砖块元素集合,传入参数为加载的次数
},
//
waterfall=$.waterfall={},
$container=null;//容器
waterfall.load_index=0, //加载次数
$.fn.extend({
waterfall:function(opt){
opt=opt||{};
setting=$.extend(setting,opt);
$container=waterfall.$container=$(this);
waterfall.$columns=creatColumn();
render($(this).find(setting.cell_selector).detach(),false); //重排已存在元素时强制不渐显
waterfall._scrollTimer2=null;
$(window).bind('scroll',function(){
clearTimeout(waterfall._scrollTimer2);
waterfall._scrollTimer2=setTimeout(onScroll,300);
});
waterfall._scrollTimer3=null;
$(window).bind('resize',function(){
clearTimeout(waterfall._scrollTimer3);
waterfall._scrollTimer3=setTimeout(onResize,300);
});
}
});
function creatColumn(){//创建列
waterfall.column_num=calculateColumns();//列数
//循环创建列
var html='';
for(var i=0;ihtml+='
';
}
$container.prepend(html);//列を挿入
return $('.' settings.column_className,$container);//列コレクション
}
function CalculateColumns(){//必要な列数を計算します
var num=Math.floor(($container.innerWidth())/(setting.column_width settings.column_space)); ) { num=1; } // 少なくとも 1 つの列を確保します
return num;
}
function render(elements,fadein){// 要素をレンダリングします
if(!$(elements). length) return;//要素なし
var $columns = Waterfall.$columns
$(elements).each(function(i){
if(!setting.auto_imgHeight||setting.insert_type= =2 ){//画像の高さが指定されている場合、または順番に挿入されている場合、画像がロードされるのを待たずに列の高さを計算できます
if(setting.insert_type==1){
insert($( elements).eq(i),setting.fadein&&fadein);//要素を挿入
}else if(setting.insert_type==2){
insert2($(elements).eq(i) ,i,setting .fadein&&fadein);//要素を挿入
}
return true;//続行
}
if($(this)[0].nodeName.toLowerCase()==' img'|| $(this).find(setting.img_selector).length>0){//それ自体が画像であるか、画像が含まれています
var image=new Image; [0].nodeName.toLowerCase()=='img'?$(this).attr('src'):$(this).find(setting.img_selector).attr('src'); .onload=function() {//画像のロード後にサイズを自動的に計算できます
image.onreadystatechange=null;
if(setting.insert_type==1){
insert($(elements) ).eq(i),setting.fadein&&fadein);//要素を挿入
}else if(setting.insert_type==2){
insert2($(elements).eq(i),i,setting. fadein&&fadein);//要素を挿入
}
image=null;
}
image.onreadystatechange=function(){//IE などのブラウザのキャッシュ問題を処理します。onload イベントは無効になります。画像がキャッシュされた後にトリガーされるようになりました
if(image .readyState == "complete"){
image.onload=null;
if(setting.insert_type==1){
insert( $(elements).eq(i),setting.fadein&&fadein) ;//要素を挿入
}else if(setting.insert_type==2){
insert2($(elements).eq(i),i ,setting.fadein&&fadein);//要素を挿入
}
image=null;
}
image.src=src; //考慮する必要はありません画像読み込み
if(setting.insert_type==1){
insert($(elements).eq(i),setting.fadein&&fadein);//要素を挿入
}else if(setting.insert_type= =2){
insert2($(elements).eq( i),i,setting.fadein&&fadein);//要素を挿入
}
}
}
function public_render(elem){//非同期データ レンダリング インターフェース function
render(elem,true);
}
function insert($element,fadein){//要素を最も短い列に挿入します
if(fadein){//フェードイン
$element.css ('opacity',0).appendTo(waterfall.$columns.eq(calculateLowest())).fadeTo(setting.fadein_speed,1);
}else{//フェードインしない
$element.appendTo (waterfall.$columns.eq(calculateLower()));
}
}
function insert2($element, i,fadein){//要素を順番に挿入します。
if(fadein) {//Fade
$element.css('opacity',0).appendTo(waterfall.$columns.eq(i%waterfall. column_num)).fadeTo(setting.fadein_speed,1);
} else{//フェードインしない
$element.appendTo(waterfall.$columns.eq(i%waterfall.column_num)); >}
}
function CalculateLower(){// その列のインデックスを最短で計算します
var min=waterfall.$columns.eq(0).outerHeight(),min_key=0; >waterfall.$columns.each(function(i){
if($ (this).outerHeight()min=$(this).outerHeight();
min_key= i;
}
});
return
}
関数 getElements(){//
$.waterfall.load_index; ($.waterfall.load_index,public_render);
}
waterfall. _scrollTimer=null;//遅延スクロール読み込みタイマー
関数 onScroll(){//スクロール読み込み
clearTimeout(waterfall._scrollTimer) ;
waterfall._scrollTimer=setTimeout(function(){
var $lowest_column=waterfall.$columns.eq(calculateLowest());//最も短い列
varbottom=$lowest_column.offset() .top $lowest_column.outerHeight();//最も短い列の下部とブラウザ ウィンドウの上部の間の距離 距離
varscrollTop=document.documentElement.scrollTop||document.body.scrollTop||0 ;//スクロール バーの距離
var windowHeight=document.documentElement.clientHeight||document.body.clientHeight||0 ;//ウィンドウの高さ
if(scrollTop>=bottom-windowHeight){
render( getElements(),true);
}
},100);
}
関数 onResize(){//ウィンドウがズームされたときに再配置します
if(calculateColumns()==waterfall .column_num) return; //列の数は変更されていないため、再配置する必要はありません
var $cells=waterfall.$container. find(setting.cell_selector);
waterfall.$columns=creatColumn();
render($cells,false) // 既存の要素を強制的にフェードアウトしないようにします
}
})(jQuery);

コードを貼り付ける形式が少し汚いようなので、今回は気にしません。上記のコードがはっきりと見えない場合は、デモ ページでソース ファイルを直接表示できます。
プラグインの使用方法:




コードをコピーします


コードは次のとおりです:
$(selector).waterfall(opt); //selector はウォーターフォール フロー コンテナーのセレクター、opt は構成パラメーター オブジェクトです

必要な HTML 構造: HTML 構造は空にすることができます
などのコンテナ要素、内部のブリック要素は動的にロードされます。もちろん、デモページに

などのブロックを事前に配置することもできます。コード をコピーします。コードは次のとおりです。


;

00


01


02

div class="cell">

03


< img src="P_004.jpg" / >

04


;

05


06


07

div class="cell">

08


< img src="P_009.jpg" / >

09


;

10


11


12

div class="cell">

13


< img src="P_014.jpg" / >

14


;

15


16


17


< div class="cell">

18


< img src="P_019.jpg" / >

19


以下は、設定パラメータオブジェクトoptの各属性の機能とデフォルト値の詳細な説明です。

column_width:204 //ウォーターフォール フローは列で構成されます。このパラメーターは、ウォーターフォール フローの列の数に直接影響します。

column_className:'waterfall_column' //列のクラス名。スタイルを簡単にカスタマイズできます

column_space:10 //列間の間隔

cell_selector:'.cell' //配置されるレンガのセレクターは滝の流れのコンテナに限定されます。つまり、プラグインはこのセレクターを通じてレンガ要素を取得します。ウォーターフォール コンテナ内でこのセレクターに一致する要素を検索します。

img_selector:'img' // ロードする画像のセレクター。ウォーターフォール フローによって読み込まれるブリック要素のテーマ コンテンツがさまざまなサイズの画像である場合、このパラメーターはこれらの画像のセレクターとなり、プラグインは計算のためにこれらの画像を取得する必要があります。

auto_imgHeight:true //画像の高さを自動的に計算する必要がありますか? 画像のサイズが固定されている場合は、このパラメータを false に設定します

fadein:true // フェードインしてロードするかどうか

fadein_speed:600 //フェードイン速度 (ミリ秒)

insert_type:1 //ブリック挿入方法、1 は最短の列を挿入することを意味し、2 は順番に挿入することを意味します

getResource:function(index,render){ } // 渡される最初のパラメータのインデックスは、ブリック要素のコレクションを返す必要がある動的リソース関数を取得します。 2 番目のパラメータはロードされた回数です。最初のパラメータはレンダリング関数で、ajax を使用してデータをロードする場合は、この関数を手動で呼び出す必要があります。データを取得したらレンダリングします。この関数は、ウォーターフォールの底に到達するたびに自動的にトリガーされ、より多くのリソースが読み込まれます。
コメント時間:

ウォーターフォール フローによってロードされるコンテンツは、通常、同じ幅で異なる高さの画像です。画像の高さが事前にわかっていれば、画像がロードされるまで待つ必要があります。画像の高さを計算する前に、これがウォーターフォール フローで最も厄介な部分です。このため、画像の高さが不明な場合は、挿入順序が少し混乱する可能性があります。各画像がロードされる順序は同じではないため、更新順序は毎回異なります。おそらく今回は速くなり、次回は速くなります。したがって、画像の高さが事前に不明な場合は、レンガ内の画像が読み込まれた後にレンガ全体の高さも不明になります。このような場合でも、ブリックの挿入順序を確実にしたい場合は、ブリックを順番に挿入すること、つまり

insert_type パラメーターを 2 に設定することをお勧めします。プラグインなので使いやすさを考慮しなければなりませんが、使いやすくなればなるほどプラグイン内部は複雑になり、抜け穴やバグも増えますので、今後も改善していきますこのプラグイン。

このプラグインは、IE6、Chrome、Firefox、Opera、Safari、およびその他の主流ブラウザをサポートしています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

javascriptの分解:それが何をするのか、なぜそれが重要なのか javascriptの分解:それが何をするのか、なぜそれが重要なのか Apr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? Apr 04, 2025 pm 05:09 PM

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は?
または:
Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は? または: Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Apr 04, 2025 pm 05:36 PM

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptは学ぶのが難しいですか? JavaScriptは学ぶのが難しいですか? Apr 03, 2025 am 12:20 AM

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

フロントエンド開発でVSCodeと同様に、パネルドラッグアンドドロップ調整機能を実装する方法は? フロントエンド開発でVSCodeと同様に、パネルドラッグアンドドロップ調整機能を実装する方法は? Apr 04, 2025 pm 02:06 PM

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...

See all articles