要件
- ページ全体が読み込まれるまでボックスは非表示になります
- ボックスはブラウザのビューポートの周りのランダムな位置に設定されます
- ボックスは適切な位置にアニメートする必要があります
元の位置を保存し、ランダムに配置した後、アニメーションを開始して開始位置に戻すことができます。また、コードの実行を高速化するために繰り返されたDOM参照もキャッシュしました(ほとんどの場合、目立たないかもしれませんが、それは良い習慣です)
デモ-ボックスがランダムに配置され、適切な位置にアニメーション化されます。
2つのアクションを分離し、元のコードを使用してボックスをランダムな場所に配置しましたが、 jQueryのデータを使用して関連データに元の位置を保存し、適切な位置にアニメーション化するために使用します。
次のいずれかのメソッドを呼び出すことにより、オンデマンドでボックスをランダム化して再設定できるようになりました。
$(document).ready(function() {
var h = $(window).height();
var w = $(window).width();
var $allBoxes = $('#intro .box');
placeBoxesRandomly($allBoxes, h, w);
placeBoxesToDataStorePositions($allBoxes);
});
placeBoxesRandomly
元の開始位置データを要素に関連付けることを除いて、以前と同じように実行します。
function placeBoxesRandomly($boxes, h, w) {
$boxes.each(function() {
var $box = $(this);
var position = $box.position();
tLeft = w - Math.floor(Math.random() * 900), tTop = h - Math.floor(Math.random() * 900);
$box.css({
"left": tLeft,
"top": tTop
});
$box.data("start-position-left", position.left);
$box.data("start-position-top", position.top);
});
}
placeBoxesToDataStorePositions
関連するデータに保存されている位置にボックスを配置します。
function placeBoxesToDataStorePositions($boxes) {
$boxes.each(function() {
var $box = $(this);
$box.animate({
"left": $box.data("start-position-left"),
"top": $box.data("start-position-top")
}, 3000);
});
}