【问题标题】:Blocking 'show then hide' after n seconds with jquery使用 jquery 在 n 秒后阻止“显示然后隐藏”
【发布时间】:2021-03-25 06:36:19
【问题描述】:

乍一看,我正在尝试执行一些非常简单的事情,但我做不到。 我有一个按钮和两个隐藏的 div。按下按钮时,我希望显示第一个 div,n 秒后隐藏,然后显示第二个 div。

html:

<button id="button">
  push
</button>
<div id="div1" style="display:none">
  firstDiv
</div>
<div id="div2" style="display:none">
  secondDiv
</div>

完整的代码和 JS 在这里:https://jsfiddle.net/439xbfe5/

我已经在这里检查了答案:jQuery show for 5 seconds then hide

此代码的问题是 #div2 在 #div1 消失之前出现:

$("#button").click(()=>{

  var timeLimit = 5000;
  $("#div1").show().delay(timeLimit).fadeOut();
  $("#div2").show();
  
});

同样的问题:

$("#button").click(()=>{

  var timeLimit = 5000;
  $("#div1").show();
  setTimeout(function() { $("#div1").hide(); }, timeLimit );
  $("#div2").show();
  
});

我还尝试创建一个阻塞睡眠功能,例如:

function sleep(ms){
  var start = new Date().getTime();
  while(true){ 
    if(new Date().getTime()-start>ms){
        return; 
     }
  }
}

$("#button").click(()=>{

  var timeLimit = 5000;
  $("#div1").show();
  sleep(timeLimit);
  $("#div2").show();
});

但这根本不起作用。

另外,显示#div2 只是我的问题的一个说明。 实际上,我不需要“编译”显示然后隐藏,但#div1 更像是按下按钮之前和之后之间的过渡步骤。我希望你能理解我的问题(对不起我的英语)。

谢谢!

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    你必须使用 complete callback 函数在 jquery 动画完成“之后”做一些事情。

    $("#button").click(()=>{
    
      var timeLimit = 5000;
      $("#div1").show().delay(timeLimit).fadeOut(function(){
        $("#div2").show();
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <button id="button">
      push
    </button>
    <div id="div1" style="display:none">
      firstDiv
    </div>
    <div id="div2" style="display:none">
      secondDiv
    </div>

    【讨论】:

    • 谢谢你这很好用。问题是我不能使用回调函数,因为实际代码完全不同。为了说明,我没有按钮单击事件,而是有一个函数 transition() 执行此显示然后隐藏动画。这个函数被调用了好几次,所以我不能使用完整的回调函数。
    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多