【问题标题】:Show loading animation with delay显示延迟加载动画
【发布时间】:2016-07-04 15:16:51
【问题描述】:

在我的 Web 应用程序中,我使用 JSF 和 primefaces。 在某些按钮上,我有耗时的功能。在这段时间里,我想展示一个加载动画,直到完整的网站完全建成。我通过这样调用函数 showLoading() 和 hideLoading() 来做到这一点:

<p:commandLink oncomplete="hideLoading();" onstart="showLoading()" process="@form" update="@form" actionListener="#{dummyController.dummyMethod}"
Content
</p:commandLink>

在函数内部,我只是显示/隐藏具有指定 ID 的 div 对象:

function showLoading() {
    $("#loader").show();
}

这一切都很好。 现在,我只想在页面需要超过一秒的时间来构建时才显示加载动画。这就是我这样修改函数的原因:

function showLoading() {
    $(#loader").delay(1000).show(0);
}

function hideLoading() {
    $("#loader").clearQueue();
    $("#loader").hide();
}

此时我的问题:有时加载器工作正常,但在某些情况下它不会出现。 我的建议:在不同时间调用 showLoading(由客户端管理)。有时它会在一开始就被调用,但有时其他操作会在 showLading 之前执行,因此构建页面的其余部分不到一秒。

有人对解决这个问题有什么建议吗?也许在 Javascript 中使用多线程(我读过一些关于 Web Workers...)

感谢您的帮助。

【问题讨论】:

标签: javascript ajax multithreading jsf delay


【解决方案1】:

来自 jQuery delay 页面:

.delay() 方法最适合在排队的 jQuery 效果之间进行延迟。因为它是有限的——例如,它不提供取消延迟的方法——.delay() 不能替代 JavaScript 的原生 setTimeout 函数,这可能更适合某些用例。

我认为你可以使用 setTimeout javascript 函数,像这样

var timer;

function showLoading() {
    timer = setTimeout(function(){
                          $(#loader").show(0);
                       }, 1000);
}

function hideLoading() {
    if(timer){
        clearTimeout(timer);
    }
    $("#loader").hide();
}

【讨论】:

  • 当我使用 setTimeout 时,所有页面进程都会停止一秒钟,直到显示加载器。但就我而言,这些进程(构建页面并等待一秒钟以显示加载器)必须并行运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 2019-10-20
  • 2019-02-04
  • 2013-05-06
  • 2017-02-03
  • 1970-01-01
  • 2013-05-11
相关资源
最近更新 更多