【问题标题】:JQuery: Fading Out, Performing an Action, then Fading Back InJQuery:淡出,执行动作,然后淡入
【发布时间】:2010-01-29 21:46:35
【问题描述】:

所以我有一个 html 表单,但不是实际的<form>,本身。我有一个“清除”按钮,我目前正在使用它来将所有字段重置为默认值。

从美学的角度来看,我希望表单淡出,在它“消失”时重置,然后完全重置淡入。到目前为止,我已经获得了这段代码来尝试实现这一目标:

function Reset() {

    $formDiv.fadeOut(function() {

        // perform reset actions here
        $(this).fadeIn()
    });
}

但是,当 div 淡出时,会发生的情况是,字段会被重置,因此用户会在淡出时看到它们全部恢复为默认值。然后它在完成淡出后立即淡入。关闭,但我不希望用户看到这些字段被重置。我尝试了以下方法,所以它会等到 fadeOut 完成来重置字段,但是我得到了一个无限循环或其他东西(浏览器说脚本运行缓慢并询问我是否要停止它):

function Reset() {

    $formDiv.fadeOut(function() {

        while (!$(this).is(':animated')) {
            // perform reset actions here
        }

        $(this).fadeIn()
    });
}

所以我不确定从这里去哪里。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 在传入回调之前不应该给个速度参数吗?

标签: jquery reset fadein fadeout


【解决方案1】:

我最近遇到了同样的问题,fadeOut 似乎工作不正常,我找到了解决方案:

$(this).animate({opacity:'0'},function(){

   //here changes to this element

   $(this).animate({opacity:'1'});
})

看起来和fadeIn/fadeOut一样,但是效果和预期一样(在元素不可见时进行更改)

我希望你们中的一些人会觉得它有用。

【讨论】:

    【解决方案2】:

    使用

    jQuery.stop().fadeOut() 
    

    防止将淡出动画排队。

    .stop() can be used to prevent queueing any jQuery Animation 
    

    http://api.jquery.com/stop/

    【讨论】:

      【解决方案3】:

      在动画完成之前回调真的不应该触发。您是否尝试过在 fadeOut 上设置速度 - 文档(并不总是准确)将其显示为必需参数,如果您指定回调,它可能是 - 即它可能正在评估函数作为速度如果您没有明确提供。

      $formDiv.fadeOut('fast', function() {
          // perform reset
          $(this).fadeIn();
      });
      

      编辑:查看代码后,看起来(至少在 1.3.2 中)如果您提供一个函数作为第一个参数,它将评估它并将返回值用作速度。如果您指定了速度,那么您的回调函数应该可以按预期工作。元素应该淡出,然后回调将触发,您的重置和淡入代码将被执行。

      【讨论】:

      • 我曾希望它会这么简单,但是将“正常”作为第一个参数添加到 fadeOut() 仍然会产生相同的结果。随着它的淡出,这些字段被重置。我同意你的观点,回调代码应该等到淡入淡出完成(我一直认为是这样),但这并没有发生。
      【解决方案4】:

      查看.delay

      更多细节:为fadeOut() 设置动画所花费的时间,并为fadeIn() 动画使用比fadeOut 动画时间更长的延迟。在此示例中,重置操作将在 fadeOut 动画期间发生,大概不会超过 600 毫秒。

      $formDiv.fadeOut(600,function() {
      
          // perform reset actions here
          $(this).delay(650).fadeIn()
      });
      

      编辑:糟糕,稍微误解了问题。您希望在fadeIn() 调用上触发重置表单逻辑,而不是在fadeOut 上触发。但我认为同步动画事件还是不错的。尝试类似:

      $formDiv.fadeOut(600,function() {
          $(this).delay(650).fadeIn(function() {
              // perform reset actions here
          });
      });
      

      【讨论】:

      • @ghoppe,您的编辑还有些偏离。将重置代码放在fadeIn() 回调中会使它重新淡入,然后 执行重置代码,这与我需要的相反。我需要它淡出,在没有用户看到它被重置的情况下重置,然后在所有重置中淡出。我认为延迟可能会起作用,因为其他答案中建议的速度参数不起作用。也许如果我将重置代码放在比淡出持续时间稍长的延迟上?但是我不确定我会将延迟()分配给...
      • 是的,这就是为什么我将延迟设置为 650 并将淡出设置为 600,我认为您的重置操作会很快执行。你可能不得不摆弄数字。或者,您可能需要查看 setTimeout() 来触发重置操作并同步事物。我自己没有做过任何实验……
      猜你喜欢
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 2018-11-10
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多