我希望在更改元素的内容之前使用方法.delay()
等待1秒。在我的页面中,我有一个按钮,当ajax请求完成后,按钮会显示“已完成”。之后,我想等待1秒并显示“下载”。但问题是“完成”后立即显示“下载”而没有延迟。
这是我的代码:
$('#chocobo').click(function(){
$('#chocobo').html('<div id="banana" class="fa fa-refresh fa-spin"></div> Loading');
$.post("includes/modlist/pack.php",function(data){
//$('#banana').addClass("fa-spin");
$('#chocobo').addClass('done');
$('#chocobo').html('<div id="banana" class="fa fa-check"></div> Done');
$('#chocobo').delay(1000).html('<div id="banana" class="fa fa-refresh"></div> Download');
});
});
有人能帮助我吗?
答案 0 :(得分:5)
我认为在这里最好使用delay()
。你只需使用setTimeout
即可。请注意以下内容......
[...]
$('#chocobo').html('<div id="banana" class="fa fa-check"></div> Done');
setTimeout(function() {
$('#chocobo').html('<div id="banana" class="fa fa-refresh"></div> Download');
}, 1000);
[...]
.delay()方法最适合在排队的jQuery之间延迟 效果。因为它是有限的 - 例如,它没有提供一种方法 取消延迟-.delay()不是JavaScript本机的替代品 setTimeout函数,可能更适合某些用途 例。
请参阅delay()文档,了解示例用法和方案
JSFiddle Link - 简化演示
答案 1 :(得分:1)
jQuery延迟函数用于添加到队列中的事物,如动画的步骤。您可以尝试使用setTimeout来获得您正在寻找的效果:
setTimeout(function(){
$('#chocobo').html('<div id="banana" class="fa fa-refresh"></div> Download');
}, 1000); // 1000 being 1s in ms
编辑:哎呀!我太慢了。无论如何,Erlaunis也有更好的答案。
答案 2 :(得分:1)
但是,如果您不想使用setTimeout(),则可以使用fadeIn()
的回调函数以此方式使用它:
http://jsfiddle.net/ufsxaxm3/1/
$( "#chocobo" ).html('<div id="banana" class="fa fa-check"></div> Done').fadeIn('slow', function() {
$('#chocobo').html('<div id="banana" class="fa fa-refresh"></div> Download').delay(1000).fadeIn(1000);
});;
所以,你需要一些jquery效果/动画,然后delay()将按你的意愿工作......