我怎样才能把它变成一个循环,而不是一个递归函数
How can I change this into a loop instead of a recursive function?
所以我有一段类似的代码
var barlen = $('#SSWEprogressbar').width(),
$elems = $('[data-srcurl]'),
k = 0,
n = $elems.length;
LoadImage();
function LoadImage()
{
var $elem = $($elems[k]);
var img = new Image(),
url = $elem.attr('data-srcurl');
$(img).load(function(){
$('#SSWEloaderfront').attr('src',url);
$('#SSWEloadprogress').width((k+1)/n*barlen + "px");
var srctgt = $elem.attr('data-srctgt');
// change url to src attribute or background image of element
if ( srctgt == "srcattr" ){ $elem.attr('src',url); }
else if ( srctgt == "bgimg" ) { $elem.css('background-image',"url("+url+")"); }
// decide whether to exit the
if ( ++k == n ) { AllyticsSSWEPlayerShow(); }
else { LoadImage(); }
});
img.src = url;
}
我之所以这样写,是因为在函数中的内容可以再次执行之前,需要调用load
回调。如果可能的话,我想把它从递归函数改为循环,但我不知道如何做到这一点,因为在进行下一次迭代之前,没有办法让for
或while
循环"等待"。还是有?
正如我在评论中提到的,您可以通过在else
中使用setTimeout(LoadImage, 100);
而不是直接调用函数来轻松解决问题。第二个参数是以毫秒为单位的延迟。
如果你理解为什么setTimeout(LoadImage, 0);
并不愚蠢,也不等同于直接调用函数,那么你就理解了setTimeout
。它将函数调用放入队列中,这意味着在再次调用函数之前,可以处理其他事件,如点击或按键,并且屏幕不会冻结。像这样也不可能达到最大递归,深度是1。
相关文章:
- 创建一个循环来简化HTML和CSS代码
- 如何使用“;getElementById”;在一个循环中
- jQuery触发器事件在一个循环中多次出现
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- 每第n个图像具有下一个循环的余数偏移
- CasperJS-如何治疗'单击'在一个循环中
- 我怎样才能把它变成一个循环,而不是一个递归函数
- 在一个循环中读取xml文件的所有节点
- ajax 返回带有循环的图像长度,检查最后一个循环
- JQuery Slider动画只发生一个循环
- JQuery 滑动一个表格形成,另一个循环滑动
- 如何跟踪有序列表中的顺序,该列表具有一个循环列表项,提供不同的参数
- Node.js:如何在一个循环中使用回调调用方法
- 我将如何批量添加大量 jquery 脚本,在一个循环中只有一个细微的差异
- 循环遍历 Angular HTTP 请求中的对象,等到响应后再运行下一个循环
- 从嵌套循环 Javascript 中的一个循环访问参数
- jQuery点击函数在for循环中只在最后一个循环中工作
- 我可以为 4 个不同的下拉列表创建一个循环吗?
- 翡翠模板在一个循环中有多个数组
- 仅使用一个循环生成嵌套数组