我有一个函数可以从数据库中获取个体,然后在jquery中运行它们,为它们设置动画。我看到的问题很常见的是,javascript在瞬间完成所有项目,并且延迟将应用于所有项目。 我有搜索stackoverflow并找到了一些参考,但没有一个与我的代码下面的代码。任何想法都将不胜感激。
$individuals = $wpdb->get_results("SELECT * FROM wp_sisanda_individualsponsors");
?>
<script type="text/javascript">
function individual_sponsors() {
var individuals = <?php echo json_encode($individuals) ?>;
individuals.sort(function() { return 0.5 - Math.random() });
jQuery.each(individuals, function (i, elem) {
var topRand = Math.floor(Math.random()*301);
var leftRand = Math.floor(Math.random()*301);
var startLeftRand = Math.floor(Math.random()*301);
jQuery('.individuals').append('<div id="'+ elem.id + '" class="indiv" style="position: absolute; bottom: -70px; left:' + startLeftRand +'px;">' + elem.name + '</div>');
jQuery('#' + elem.id).animate({
top: -100,
left: Math.floor(Math.random()*301)
},20000 + Math.floor(Math.random()*50000));
});
}
</script>
正如你所看到的,这些项目得到一个随机的水平起始位置和结束位置以及一个随机速度,这很有效,除了仍有大量项目。
我已经尝试过限制最初请求的数量 - 随机选择一些,然后重复调用该函数,并在两者之间等待,但是,我认为这导致了一个无限循环...不确定...页面没有' t loading。
我希望有人能指出我正确的方向。
理想情况下,它会激活一些......等待......然后再做一些......
提前致谢
答案 0 :(得分:1)
PHP等待不会帮助您,因为PHP会在将任何内容发送到客户端(JavaScript执行的位置)之前在服务器上执行。如果你想动画一些,等一下,然后动画一些,直到你完成,然后你可以使用setTimeout
:
var current = 0;
function animateSome() {
// Animate a few (starting at individuals[current]) and
// update current with the array index where you stopped.
// ...
// If there's anything left to do, start a timer to animate
// the next chunk of individuals.
if(current < individuals.length)
setTimeout(animateSome, 250);
}
animateSome();