为什么jQuery show()参数在调用`complete`函数之前没有延迟?

时间:2013-02-11 17:10:59

标签: javascript jquery

jQuery API documentation for show()表示从jQuery 1.4.3开始,可以像这样调用.show()

.show( [duration ] [, easing ] [, complete ] )

参数为:

  
      
  • duration(默认值:400):确定动画运行时间的字符串或数字。
  •   
  • easing(默认值:swing):一个字符串,指示用于转换的缓动函数。
  •   
  • complete:动画完成后调用的函数。
  •   

我不需要缓和,所以我只称这个版本:

.show( [duration ] [, complete ] )

我有一个应该显示div的功能,等待5秒,然后淡出超过500ms。

我试过这个:

  $('#some_div').show( {
      duration: 5000,
      complete: function() { fadeOutHelper(500); }
  } );

而且:

$('#some_div').show(5000, function() { fadeOutHelper(500); } );

在两种情况下,show()实际上都不会在调用辅助函数之前等待5000毫秒。

我使用setTimeout()在StackOverflow上找到了解决办法:jQuery show for 5 seconds then hide

$('#some_div').show();
setTimeout(function() { fadeOutHelper(500); }, 5000);

虽然我有一个解决方法,但我想了解我是如何误解jQuery show()文档中的一些非常简单的函数参数。

1 个答案:

答案 0 :(得分:2)

  

我有一个应该显示div的功能,等待5秒,然后淡出超过500ms。

你想在5秒内显示div,或者立即显示div然后等待5秒进行回调?如果是前者,第二次尝试就可以正常工作,除了你需要删除额外的}。使用一些额外的空白区域很明显:

$('#some_div').show(5000, function() {
    fadeOutHelper(500);
}}); // oh noes, synax error

如果是后者,那么您引用的“解决方法”是正确的方式来实现您想要的。 setTimeout不是黑客。关于此,没有“解决方法”:

$('#flash_helper').show();
setTimeout(function() { fadeOutHelper(500); }, 5000);