Можно ли загрузить всю веб-страницу перед ее рендерингом? - PullRequest
4 голосов
/ 23 февраля 2009

У меня есть веб-страница, которая автоматически перезагружается каждые несколько секунд и отображает другое случайное изображение. Однако при перезагрузке на секунду появляется пустая страница, а затем изображение медленно загружается. Я хотел бы продолжать показывать исходную страницу, пока следующая страница не загрузится в память браузера, а затем отобразить все сразу, чтобы она выглядела как бесшовное слайд-шоу. Есть ли способ сделать это?

Ответы [ 4 ]

11 голосов
/ 23 февраля 2009

единственное, что меняет изображение? в таком случае может быть более эффективно использовать что-то вроде цикла плагин для jQuery, а не перезагружать всю страницу.

http://malsup.com/jquery/cycle/

Вот JS, необходимый, если вы использовали jQuery -

Скажи, что это был твой HTML:

<div class="pics"> 
    <img src="images/beach1.jpg" width="200" height="200" /> 
    <img src="images/beach2.jpg" width="200" height="200" /> 
    <img src="images/beach3.jpg" width="200" height="200" /> 
</div> 

Здесь будет необходимый jQuery:

$(function(){
$('div.pics').cycle();
});

Не нужно беспокоиться о разных браузерах - полная кросс-браузерная совместимость.

5 голосов
/ 23 февраля 2009

Если вы просто меняете изображение, я бы посоветовал вообще не перезагружать страницу, а использовать какой-то javascript, чтобы просто изменить изображение. Это может быть то, что плагин цикла jquery делает для вас.

В любом случае, вот простой пример

<img id="myImage" src="http://someserver/1.jpg" />

<script language="javascript">
var imageList = ["2.jpg", "3.jpg", "4.jpg"];
var listIndex = 0;

function changeImage(){
    document.getElementById('myImage').src = imageList[listIndex++];
    if(listIndex > imageList.length)
        listIndex = 0; // cycle around again.

    setTimeout(changeImage, 5000);
};

setTimeout(changeImage, 5000);
</script>

Это меняет источник изображения каждые 5 секунд. К сожалению, браузер будет загружать изображение постепенно, поэтому вы получите «мерцание» (или, возможно, пробел) на несколько секунд, пока загружается новое изображение.

Чтобы обойти это, вы можете «предварительно загрузить» изображение. Это делается путем создания нового временного изображения, которое не отображается на экране. Как только это изображение загружается, вы устанавливаете реальное изображение в тот же источник, что и «предварительная загрузка», поэтому браузер извлекает изображение из своего кэша, и оно появляется мгновенно. Вы бы сделали это так:

<img id="myImage" src="http://someserver/1.jpg" />

<script language="javascript">
var imageList = ["2.jpg", "3.jpg", "4.jpg"];
var listIndex = 0;
var preloadImage = new Image();

// when the fake image finishes loading, change the real image
function changeImage(){
    document.getElementById('myImage').src = preloadImage.src;
    setTimeout(preChangeImage, 5000);
};  
preloadImage.onload = changeImage;

function preChangeImage(){
    // tell our fake image to change it's source
    preloadImage.src = imageList[listIndex++];
    if(listIndex > imageList.length)
        listIndex = 0; // cycle around again.
};

setTimeout(preChangeImage, 5000);
</script>

Это довольно сложно, но я оставлю это в качестве упражнения для читателя, чтобы собрать все кусочки вместе (и, надеюсь, сказать "АГА!"): -)

2 голосов
/ 23 февраля 2009

Если вы создаете два div, которые перекрываются в области изображения, вы можете загрузить один с новым изображением через AJAX, скрыть текущий div и отобразить один с новым изображением, и у вас не будет обновления веб-страницы, чтобы вызвать «плохой переход». Затем повторите процесс.

Если изображений немного, и они всегда отображаются в одном и том же порядке, вы можете просто создать анимированный GIF.

1 голос
/ 23 февраля 2009

Назад в темные старые времена (2002) Я справился с такой ситуацией, имея невидимый iframe. Я бы загружал контент в него и в методе body.onload () я бы потом помещал контент туда, куда ему нужно было идти.

Pre-AJAX, это было довольно хорошее решение.

Я просто упоминаю это для полноты. Я не рекомендую это, но стоит отметить, что Ajax не является обязательным условием.

Тем не менее, в вашем случае, когда вы просто зацикливаете изображение, используйте Ajax или что-то наподобие плагина jQuery, чтобы динамически переключаться между изображениями без перезагрузки всей страницы.

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