【问题标题】:Javascript taking too long to loadJavascript 加载时间过长
【发布时间】:2012-08-23 08:42:30
【问题描述】:

div "intro" 的 javascript 终于加载了。由于网页先加载bg图像然后加载java脚本,因此加载时间太长。有没有办法我可以在“介绍” div 中显示“正在加载请稍候”消息,直到它完全加载。我只想先加载介绍。

Javascript 代码:

var tl = new Array(
    "=======================",
    " Welcome user, ",
    " ###########################################"
);
var speed = 50;
var index = 0;
text_pos = 0;
var str_length = tl[0].length;
var contents, row;

function type_text() {
    contents = '';
    row = Math.max(0, index - 20);
    while (row < index)
    contents += tl[row++] + '\r\n';
    document.forms[0].elements[0].value = contents + tl[index].substring(0, text_pos) + "_";
    if (text_pos++ == str_length) {
        text_pos = 0;
        index++;
        if (index != tl.length) {
            str_length = tl[index].length;
            setTimeout("type_text()", 500);
        }
    }
    else setTimeout("type_text()", speed);
}

这是脚本,它基本上是在 div“intro”的文本区域中逐个字母输入。问题是它最终在整个页面加载时加载。它在大约 15 秒后开始打印文本。

【问题讨论】:

  • 你的脚本是如何初始化的?您正在使用 onpageload 事件还是 domready ?
  • the web page loads the bg image first - 图片有多大?
  • 我用的是onload,bg图片是400KB
  • 你什么时候调用这个函数 type_text() ?
  • 我在body标签中调用它

标签: javascript html css


【解决方案1】:

您可以在document 上收听“domready”事件,但似乎是not cross-browser

例如:Mozilla

   document.addEventListener("DOMContentLoaded", methodName, false)

更好的选择是使用 jQuery 的 .ready() 事件。它们处理所有跨浏览器的实现。

例如:

$(document).ready(function(){
   //execute code here
});

//Shorthand
$(function(){
 //...
});

有关domready 的更多信息,请参阅此related question

【讨论】:

    【解决方案2】:

    使用空的介绍 div 加载页面,使用“正在加载,请稍候”运行脚本,然后触发 ajax 请求以加载页面的其余部分并从 ajax 请求更新 onComplete 事件的页面

    【讨论】:

      【解决方案3】:

      使用 jQuery

         $(document).ready(function() {
            // update div here 
          });
      

      http://api.jquery.com/ready/

      或者你可以用

      window.onload= (function() {
        // update div here        
      };
      

      【讨论】:

      • jQuery的document.ready和原生的window.onload不一样。
      【解决方案4】:

      您可以通过将内容包装在 div 标记中,然后将另一个 div 包含加载图像来使用 jquery,效果如下:

      $(document).ready(function () {
          $('#loading').show();
      
          $('#divShowMeLater').load(function () {
              $('#loading').hide();
              $('#divShowMeLater').show();
          });
      })
      

      假设 divShowMeLater 是包含所有正在加载的内容的 div。标记看起来与此类似:

      <div id="divShowMeLater" style="margin-left:auto;margin-right:auto;text-align:center;" >
          <div id="loading">Page loading...
              <img src="images/ajax-loader.gif" alt="loading page..." />
          </div>
      </div>   
      

      【讨论】:

      • 即使在 div 的内容加载之后,它也不会隐藏“页面加载...”消息。
      • 你的 div 被称为id=loading,这是我的例子,所以你必须让它适合你的需要。在 ready 函数中最初显示 div $('#loading').show();,然后在其他 div 加载后将其隐藏。
      猜你喜欢
      • 1970-01-01
      • 2016-06-20
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2016-03-01
      • 2019-12-24
      相关资源
      最近更新 更多