【问题标题】:'spinner' does not appear right after call it'spinner' 在调用后没有立即出现
【发布时间】:2013-05-10 06:37:53
【问题描述】:

我正在使用 js 在加载数据时显示等待状态的“微调器”。数据加载完成时调用showWaiting() 显示“微调器”和hideWaiting() 隐藏“微调器”。 'Spinner' 在调用showWaiting() 后没有按预期出现,它仅在数据加载完成后出现(loadData1())。请帮我。谢谢

以下是源代码:

js源码:

this.showWaiting();
this.loadData1();
this.hideWaiting();
this.function1();

showWaiting: function () {
          $("#progressbar").css("display", "block");
          $("#waiting_popup").show();
          $("#progressbar").progressbar({
              value: false
          });
      }

微调器的html:

<div id="waiting_popup" style="z-index: 999999; position: relative;">
        <div class="ui-widget-overlay ui-front"></div>
        <div id="progressbar" style="width: 300px; margin: 18% auto; display:none;">
            <div style="float: left;margin-left: 35%; margin-top: 5px;font-weight: bold;text-shadow: 1px 1px 0 #fff;">Loading...</div>
        </div>
     </div>

【问题讨论】:

    标签: javascript spinner


    【解决方案1】:

    Javascript 是严格的单线程,因此只要您的代码正在运行,浏览器用户界面中就不会发生任何事情。您必须在显示微调器后结束函数,并在浏览器有机会更新界面后使用超时开始加载:

    this.showWaiting();
    var th = this;
    window.setTimeout(function(){
      th.loadData1();
      th.hideWaiting();
      th.function1();
    }, 0);
    

    您应该检查是否可以使加载异步。如果您的微调器是动画 gif,那么只要您的代码正在运行,它就不会移动。

    【讨论】:

    • 感谢您的回复。我尝试了这个,但它不起作用,因为在这些函数之后,我有一些函数使用 loadData1() 的结果。所以当 loadData1() 超时时,跟随它的函数会出错。还有其他解决办法吗?
    • @HuyVo:超时使代码异步,因此使用您加载的数据的任何内容都必须进入回调函数,例如上面代码中的function1 调用。想想看,你还需要捕获this 的值,因为回调中的上下文不同,而你使用this 调用方法。我调整了上面的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2020-03-28
    • 2016-02-24
    相关资源
    最近更新 更多