1

我正在尝试构建一个进度条,在延迟 0.1 秒后完成,隐藏带有剪辑效果的栏,然后在延迟 0.2 秒后再次加载 google.com。

我的代码:

<!doctype html>

<html lang="en">
<head>
  <meta charset="utf-8" />
  <title>jQuery UI Progressbar - Custom Label</title>
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css" />
  <style>
  .ui-progressbar {
    position: relative;
  }
  .progress-label {
    position: absolute;
    left: 50%;
    top: 4px;
    font-weight: bold;
    text-shadow: 1px 1px 0 #fff;
  }
  </style>
  <script>
  $(function() {
    var progressbar = $( "#progressbar" ),
      progressLabel = $( ".progress-label" );

    progressbar.progressbar({
      value: false,
      change: function() {
        progressLabel.text( progressbar.progressbar( "value" ) + "%" );
      },
      complete: function() {
        progressLabel.text( "Complete!" );
        $( "#progressbar" ).delay(100).hide("clip").delay(200);
        window.location = "http://www.google.com";
      }
    });

    function progress() {
      var val = progressbar.progressbar( "value" ) || 0;

      progressbar.progressbar( "value", val + 3 );

      if ( val < 99 ) {
        setTimeout( progress, 100 );
      }

    }

    setTimeout( progress, 3000 );

  });
  </script>
</head>
<body>

<div id="progressbar"><div class="progress-label">Loading...</div></div>


</body>
</html>

问题是,即使在效果发生之前,页面也会加载http://www.google.com。是否有某种我可以使用的时间延迟。

谢谢。

4

2 回答 2

1

尝试setTimeout

complete: function() {
        progressLabel.text( "Complete!" );
        $( "#progressbar" ).delay(100).hide("clip").delay(200);
       setTimeout(function() {

       window.location.href = "http://www.google.com" 

         }, 2000);
      }

所以它等待2秒。

了解有关 SetTimeOut 的更多信息

于 2013-08-31T12:48:23.783 回答
1

JAvascript 是高度并发的语言......所有的东西基本上是同时发生的......

因此,使事情发生的正确方法是将后续代码包装到匿名函数中。

(function(){
    //code executed first here
 })();

 (function(){
    //code executed second here
 })();

或者您可以制作自定义包装器方法并调用它们,在一切结束时执行位置更改作为回调。

于 2013-08-31T12:52:17.993 回答