XHTML JavaScript предварительно загружает изображения перед загрузкой остальной части страницы - PullRequest
0 голосов
/ 30 сентября 2010

Могу ли я в любом случае отложить отображение кода HTML (страницы) до тех пор, пока не будут загружены некоторые определенные изображения, чтобы макет отображался вместе с изображениями заголовка и HTML?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 30 сентября 2010

Это должно быть сделано, но вы обязаны защищать клиентов от самих себя - ведь вы профессионал ...

<head>
 <script type="text/javascript">
//<![CDATA[
with (document.documentElement.style) {

  visibility = 'hidden';
  overflow = 'hidden';

  window.onload = function() {
    visibility = '';
    overflow = '';
  };
}​
//]]>
 </script>
</head>

примечание: использование display = 'none' вместо этого не работает в моей (несколько старой) Opera 10.10, так как onload сработает немедленно ...

Кроме того, это приведет к задержке отображения страницы до тех пор, пока все внешние ресурсы не будут загружены. Если вы хотите подождать только определенные изображения, вам понадобится более сложный скрипт ( непроверенный ):

  <head>
  <script type="text/javascript">
//<![CDATA[
document.documentElement.style.display = 'none';
//]]>
  </script>
 </head>
 <body>
  <img stc="…" width="…" height="…" alt="…" class="preload">
  <!-- page contents… -->
  <script type="text/javascript">
//<![CDATA[
(function() {
    var remaining = 0;

    function listener() {
        if(!--remaining)
            document.documentElement.style.display = '';
    }

    for(var i = 0; i < document.images.length; ++i) {
        var img = document.images[i];
        if(/(^|\s)preload(\s|$)/.test(img.className) && !img.complete) {
            ++remaining;
            img.onload = listener;
            img.onerror = listener;
        }
    }
})();
//]]>
  </script>
 </body>
1 голос
/ 30 сентября 2010

Я разделяю мнение Кристофа, что страница должна быть показана пользователю как можно быстрее - даже только части страницы. Это раздражает, если ничего не происходит.

Но вы можете попробовать

<body id='body' style='display:none;' 
      onload="document.getElementById('body').style.display='block';">

(или тоже работает

<body style='display:none;' onload="this.style.display='block';">

? - надо попробовать)

Будет отображаться страница после загрузки всех изображений, сценариев, таблиц стилей и мультимедийных файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...