jquery二級ナビゲーション内容の均一化の原理と実現
1236 ワード
これは去年やったプロジェクトのアルゴリズムで、個人的な感じはまあまあなので、共有してください.
背景:ヘッドナビゲーションの2級ナビゲーションには長い内容があり、1列は見苦しいので、2列に分け、ブロックごとにできるだけ均等に分け、並べ順に制限がないようにします.
原理:
1.各2次ナビゲーションを1つの独立したものとし、内部を複数のブロックにし、各ブロックの高さを算出し、昇順に配列する.
2.各ブロックの総高さ和を求め、2を除いて平均最高の高さを得る.
3.ブロックの高さが一番高いところから始め、高さが平均高さより大きい場合、これはA辺に入れ、他はB辺に分けます.
4.この高さより小さい場合、平均高さは最高高さを減算した値になります.
5.残りの最高の高さと平均の高さの比をとり、高さが平均の高さより大きい場合は、これをA辺に入れ、その他はB辺に分けます.
6.すべてのブロックが終了するまで3〜5サイクルする.
これはこのコードの主な考え方であり,1つのナビゲーションの内容を平均的な2列に分けた.
実装:
ブロックが1つしかない場合は、比較する必要はありません.
総高さが限界値を超えない場合は、2つの列に分ける必要はありません.
原理の実装コード:
oldArrs,newArrsはA,Bを表す
demoダウンロード
背景:ヘッドナビゲーションの2級ナビゲーションには長い内容があり、1列は見苦しいので、2列に分け、ブロックごとにできるだけ均等に分け、並べ順に制限がないようにします.
原理:
1.各2次ナビゲーションを1つの独立したものとし、内部を複数のブロックにし、各ブロックの高さを算出し、昇順に配列する.
2.各ブロックの総高さ和を求め、2を除いて平均最高の高さを得る.
3.ブロックの高さが一番高いところから始め、高さが平均高さより大きい場合、これはA辺に入れ、他はB辺に分けます.
4.この高さより小さい場合、平均高さは最高高さを減算した値になります.
5.残りの最高の高さと平均の高さの比をとり、高さが平均の高さより大きい場合は、これをA辺に入れ、その他はB辺に分けます.
6.すべてのブロックが終了するまで3〜5サイクルする.
これはこのコードの主な考え方であり,1つのナビゲーションの内容を平均的な2列に分けた.
実装:
ブロックが1つしかない場合は、比較する必要はありません.
if (arrs.length <= 1) {
$(obj).css({
width : "150px"
});
return;
}
総高さが限界値を超えない場合は、2つの列に分ける必要はありません.
if (sum < limitHeight) {
$(obj).css({
width : "150px"
});
return;
}
原理の実装コード:
for (var i = arrs.length - 1; i > -1; i--) {
var _h = $(arrs[i]).height();
if (_h < gap) {
gap = gap - _h;
oldArrs.push(arrs[i]);
} else {
newArrs.push(arrs[i]);
}
}
oldArrs,newArrsはA,Bを表す
demoダウンロード