【问题标题】:jQuery loading screen with minimum viewing time具有最短查看时间的 jQuery 加载屏幕
【发布时间】:2013-11-21 14:44:54
【问题描述】:

所以我有这个加载屏幕,它在页面加载时显示信息,但由于互联网速度更快,这可以在一瞬间显示。我想添加一个最短显示时间!这是我当前的代码

jQuery(window).load(function() {
    jQuery('.pageLoad').animate({
        opacity: 0
    }, 800, function() {
        jQuery('.pageLoad').css({
            display: 'none'
        });
    });
});

我该怎么做?

【问题讨论】:

  • 您真的想延迟显示您的内容吗?对我来说这听起来是个非常糟糕的主意。
  • 加载屏幕在查看页面之前更像是一个信息屏幕。但显然如果页面加载速度很快,您将没有时间在信息消失之前阅读信息,所以我想添加一个最小值在该屏幕消失之前查看时间,但如果加载速度非常慢,请保留它?
  • @LeviCole 您想让信息位独立于负载,因此在页面加载时,您激活消息 X 次。您可以使用超时事件。在该事件中,您测试是否所有内容都已加载,如果为 true,则隐藏消息,如果为 false,则显示直到加载。所有这些都是在页面在后台加载时进行的。
  • 同意@Rayf,我将修改您的示例以添加该案例
  • @jeroen 我想用一个有用的例子来支持这篇文章。我有一个通过 AJAX 提交的表单,我不希望用户点击提交两次。提交后,我实际上将提交按钮替换为看起来像它的<span>,并使用 GIF 微调器将其更改为“正在处理”。表单提交得如此之快,以至于这看起来像是一个小故障。我给它 0.5 秒来转动它的轮子,然后将提交按钮放回原位。

标签: javascript php jquery load loading


【解决方案1】:

您可以将淡出方法放在一个函数中,并在从$(document).ready() xx 秒后调用它:

var timeoutID;

jQuery(document).ready(function() {
    // start hiding the message after 2 seconds
    timeoutID = window.setTimeout(hideMessage, 2000);
});

function hideMessage() {
    jQuery('.pageLoad').animate({
        opacity: 0
    }, 800, function() {
        jQuery('.pageLoad').css({
            display: 'none'
        });
    });
}

【讨论】:

  • 不确定 .ready 是否是 @LeviCole 的意图,因为 window.load 和 document.ready 的工作方式不同
  • @pixshatterer 我知道,我是故意这样做的,以便消息总是或多或少地在同一时间出现,无论是在慢速还是快速连接上。如果您希望在加载所有图像时开始倒计时,当然可以使用window.load,但想法是一样的。
【解决方案2】:

正如@Rayf 所说,如果应该读取那条信息,无论页面加载速度如何,都应该像这样添加一些延迟:

// time to read the message...adjust it to the time you feel is right
var msgDisplayTime = 5000,
    interval = 0,
    loaded = false,
    delayed = false,
    fadeLoader = function () {
      jQuery('.pageLoad').animate({opacity: 0}, 800, function () {
          jQuery('.pageLoad').css({display: 'none'});
      });
    };

//timeout for your desired delay time
//it will ask if it is already loaded after delay ends
//triggering the fading of loading overlay
timeout = setTimeout(function(){
  delayed = true;
  if(loaded){
    fadeLoader();
  }
},msgDisplayTime);


//when loaded, it will wait until delay happened
//if not, it will delegate the execution to the timeout
// so at the end, it will be triggered after the delay or
//loading time, in case it longer than desired delay
jQuery(window).load(function(){
  loaded = true;
  if(delayed){
    fadeLoader();
  }
});

在 cmets 里面是关于它如何工作的大致解释

【讨论】:

  • 很抱歉这不起作用!它似乎没有运行fadeLoader(),因为加载屏幕没有淡出。
  • 我发现交换 if 语句是可行的...延迟 = true; if(延迟){ fadeLoader(); } /////// 和 /////// 加载 = true; if(已加载){ fadeLoader(); }
  • @LeviCole 如果你这样做,委托将根本不起作用,因为如果页面加载它会立即消失,忽略超时击败你想要做的事情。它没有工作?很奇怪...我在本地对其进行了测试,它与一些用作演示的 html 一起工作...你能发布一些你测试过的 html 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多