ここで行ったように、要素をアニメーション化するjavascriptライブラリを見つけようとしました。イントロを確認してから、トップメニューからいくつかのフィルターを適用し、ブラウザーウィンドウのサイズを変更してみてください。
このような流動的なレイアウトを実現するものは見つかりませんでした。そこで使われているアニメーションの種類には名前がありますか?それがどのようにコーディングされたのか知っていますか?
ここで行ったように、要素をアニメーション化するjavascriptライブラリを見つけようとしました。イントロを確認してから、トップメニューからいくつかのフィルターを適用し、ブラウザーウィンドウのサイズを変更してみてください。
このような流動的なレイアウトを実現するものは見つかりませんでした。そこで使われているアニメーションの種類には名前がありますか?それがどのようにコーディングされたのか知っていますか?
私はMountain Dew サイトの主任開発者でした。フィルター処理とグリッド ロジック全体をゼロからコーディングしましたが、Isotopeは、目的を達成する非常に優れた汎用ライブラリです。多くの特定のニーズがあったため、使用しませんでした (主な理由は、アイテムをクリックした後にグリッドを分割する必要があったためです)。以下は、Mountain Dew サイトのグリッドがどのように機能し、どのように並べ替えが行われるかを簡単に説明したものです。
すべてのアイテムのサイズが同じである場合、ロジックは非常に簡単です。1 行に収まるアイテムの数を数え、それに応じて配置するだけです。
var nCols = Math.floor( lineSize / itemWidth );
アイテムのサイズが異なる場合は、パッキング アルゴリズムが必要になる場合がありますが、この場合は可能なサイズがわかっているため、それらはすべて同じグリッド (1x1、1x2、2x2、3x2) に収まり、それらの間にランダムな間隔があります (オーバーラップなし)。 )、また、独自のアルゴリズムをコーディングする必要があった、製品とプロモーションの配置に関するいくつかの非常に具体的なルールもあります. 私が何をしているのかを簡単に説明します (大まかに言うと、最初に適合するアルゴリズムをパッキングするビン):
Mountain Dew グリッドに関する注意事項:
ソートは安定したソートで行われます - Array#sort
v8 では安定していないため、安定したマージソートを実装しました。配列のすべての項目をループして、次の操作を行うだけです。
//native array sort isn't stable on chrome so we use amd-utils instead
grid.items = sort(grid.items, function(item, next){
// move inactive items to the end of list
// if return zero it keeps items at the same relative position
if (next.active) {
return (item.active)? 0 : 1;
} else {
return (item.active)? 0 : -1;
}
});
アイテムをどのように並べるかを決定した後は、アイテムの適切な場所を見つけて and を設定するだけelement.style.top
ですelement.style.left
。
// positioning can be calculated based on item index if all items have
// same size. not same logic used on mdew since on mdew we have a
// random gutter between items and they shouldn't overlap each other
var colIndex = itemIndex % (nCols - 1);
var rowIndex = Math.floor(itemIndex / nCols);
var destX = colIndex * colWidth;
var destY = rowIndex * rowHeight;
ブラウザーが CSS トランジションをサポートし、すべての項目の遅延/継続時間が同じである場合、スタイルシートでアニメーションを設定できます。
.grid-item {
-webkit-transition: all 500ms ease;
-moz-transition: all 500ms ease;
transition: all 500ms ease;
}
しかし、Mountain Dew のサイトでは、アイテムごとにランダムな遅延と期間が必要なため (見栄えが良いため)、JavaScript を使用してトランジションを設定しました。
function randomizeSpeed(){
var delayProp = vendorPrefix.style('transitionDelay');
var durationProp = vendorPrefix.style('transitionDuration');
$('.grid-item').each(function(i, el){
var duration = rand(SLOWEST_TRANSITION, FASTEST_TRANSITION);
var delay = map(duration, FASTEST_TRANSITION, SLOWEST_TRANSITION, MIN_DELAY, MAX_DELAY);
if (delayProp) {
el.style[delayProp] = delay +'s';
el.style[durationProp] = duration +'s';
} else {
// store delay/duration for JS fallback
$(el).data({ delay: delay, duration: duration });
}
});
}
上記のコードでは、メソッドmath/map
とamd-utilsrandom/rand
を使用しています。また、機能検出に基づいて、ベンダー プレフィックス付きのスタイル プロパティ ( 、、 ) を取得するために使用するコードもいくつかあります。ブラウザーが CSS トランジションをサポートしていない場合は、JavaScript にフォールバックしてアニメーションを実行します。mozTransitionDelay
webkitTransitionDelay
transitionDelay
if (USE_TRANSFORM && USE_TRANSITION) {
el.css({translateY: destY, translateX: destX});
} else if (USE_TRANSITION) {
el.css({top: destY, left: destX});
} else {
TweenLite.to(el, el.data('duration'), {
css : { top : destY, left: destX },
delay : el.data('delay'),
ease : Expo.easeOut
});
}
IE 7 ~ 8 のトランジション アニメーションをパフォーマンスのために削除しました。グリッド要素が複雑すぎて、項目が多すぎます。
いいえ、mt。露コードの方が優れています。同位体は、グリッドの真ん中に穴を残します。特に、mt のようにセルがランダムに配置されている場合はなおさらです。露。
いいえ、ブラウザのサイズ変更時にタッチデバイスでも機能する自動レイアウト機能を持たせるには、このプラグインをここで使用します。次に、そのMTNのことは簡単です。このプラグインは、アニメーション化、ランダム化、シズルを行うだけでなく、並べ替え、並べ替え、フィルター処理も行うことができます.