window.location令人不安的JQuery代码

时间:2013-08-31 12:46:13

标签: javascript jquery progress-bar

我正在尝试建立一个进度条,在延迟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。我可以使用某种时间延迟。

感谢。

2 个答案:

答案 0 :(得分: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秒。

Learn more about SetTimeOut

答案 1 :(得分:1)

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

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

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

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

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