要求
- 在整个页面加载之前隐藏框
- 框设置为浏览器视口周围的随机位置
- 盒子需要动画到它们的正确位置
您可以存储原始位置,并在随机放置后开始为它们设置动画以返回其起始位置。我还缓存了任何重复的 DOM 引用以加快代码执行速度(很可能不明显,但这是一个好习惯)
演示- 随机放置的盒子,然后动画回到它们的正确位置。
我已经分离了这两个动作,使用原始代码将框放置在随机位置,但现在还使用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);
});
}