JQuery ждет завершения загрузки страницы перед запуском слайд-шоу?

У меня есть сайт с вращающимся изображением заголовка (вы все их видели). Я хочу сделать следующее:

  1. Загрузите всю страницу плюс первое изображение заголовка
  2. Начинайте слайд-шоу с изображением заголовка, меняющееся каждые x секунд или после завершения загрузки следующего изображения, в зависимости от того, что наступит позже.

Мне действительно не нужен пример, который действительно делает это.


person DevDevDev    schedule 16.09.2009    source источник


Ответы (6)


Вы, вероятно, уже знаете о $(document).ready(...). Что вам нужно, так это механизм предварительной загрузки; что-то, что извлекает данные (текст, изображения или что-то еще), прежде чем показывать их. Это может сделать сайт более профессиональным.

Взгляните на jQuery.Preload (есть и другие). jQuery.Preload имеет несколько способов запуска предварительной загрузки, а также предоставляет функцию обратного вызова (когда изображение предварительно загружено, затем показать его). Я использовал его интенсивно, и он отлично работает.

Вот как легко начать работу с jQuery.Preload:

$(function() {
  // First get the preload fetches under way
  $.preload(["images/button-background.png", "images/button-highlight.png"]);
  // Then do anything else that you would normally do here
  doSomeStuff();
});
person Jacob Marble    schedule 16.09.2009
comment
Единственный реальный ответ: нет простого способа сделать это. Используйте плагин. - person e-satis; 07.10.2009
comment
e-satis: Я не понимаю, почему вы считаете, что использование плагина — единственный реальный ответ. - person David Andres; 10.10.2009
comment
из-за: никогда не переписывайте фрагменты кода, вы всегда найдете фрагмент кода, делающий то же самое, но написанный лучше - person Luca Trazzi; 12.04.2013

можешь попробовать

$(function()
{

$(window).bind('load', function()
{

// INSERT YOUR CODE THAT WILL BE EXECUTED AFTER THE PAGE COMPLETELY LOADED...

});
});

у меня была такая же проблема, и этот код работал для меня. как это работает и для вас!

person Website-Chef    schedule 02.08.2010
comment
@Marin может ошибаться, но я думаю, что bind не рекомендуется для таких вещей. не очень полезный ответ я признаю - person Jacob Raccuia; 04.12.2014

Ну, первое может быть достигнуто с помощью функции document.ready в jquery.

$(document).ready(function(){...});

Изменение изображения может быть достигнуто с помощью любого количества плагинов.

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

person stimms    schedule 16.09.2009
comment
Я не думаю, что любой из них будет ждать перехода, пока не загрузится следующий iamge, верно? - person DevDevDev; 16.09.2009

Механизм $(document).ready предназначен для запуска после успешной загрузки DOM, но не гарантирует состояние изображений, на которые ссылается страница.

Если вы сомневаетесь, воспользуйтесь старым добрым событием window.onload:

window.onload = function()
{
  //your code here
};

Теперь это явно медленнее, чем подход jQuery. Однако вы можете найти компромисс где-то посередине:

$(document).ready
(
  function()
  {
    var img = document.getElementById("myImage");

    var intervalId = setInterval(
                        function()
                        {
                          if(img.complete)
                          {
                            clearInterval(intervalId);
                            //now we can start rotating the header
                          }
                        },
                        50);
  }
);

Чтобы немного объяснить:

  1. мы захватываем элемент DOM изображения, изображение которого мы хотим полностью загрузить

  2. затем мы устанавливаем интервал для срабатывания каждые 50 миллисекунд.

  3. если в течение одного из этих интервалов для полного атрибута этого изображения установлено значение true, интервал очищается и операция поворота может быть безопасно запущена.

person David Andres    schedule 16.09.2009
comment
window.onload = function() - плохая идея, она не позволяет вам установить загрузку из чего-либо еще или удалит любую другую загрузку. - person e-satis; 07.10.2009
comment
@e-satis: чтобы избежать перезаписи хуков, которые уже прикреплены к window.onload, присоедините свою функцию с помощью jQuery: $(window).load(function () {}); - person Andreas Grech; 05.01.2010
comment
@e-satis: я упомянул window.onload специально, потому что назначенный ему код обработчика событий гарантированно будет выполняться после загрузки изображений, что отличается от поведения готовой функции jQuery и находится где-то в другой крайности того, что такое OP находясь в поиске. Вы правы, есть лучшие способы привязки событий, но я не хотел упускать из виду ключевые моменты, которые пытался донести. - person David Andres; 15.01.2010
comment
@Andreas: Полезно знать о функции загрузки. - person David Andres; 15.01.2010

ты пробовал это?

$("#yourdiv").load(url, function(){ 

         your functions goes here !!!

}); 
person Najib El Alam    schedule 11.08.2011
comment
Как и тот комментарий, и этот. :о - person Brian; 14.08.2012

Если вы передадите jQuery функцию, она не запустится, пока страница не загрузится:

<script type="text/javascript">
$(function() {
    //your header rotation code goes here
});
</script>
person Ryan Doherty    schedule 16.09.2009
comment
Означает ли загрузка страницы, что все остальные изображения также будут загружены? - person DevDevDev; 16.09.2009
comment
Нет, это только означает, что дом создан. - person stimms; 16.09.2009
comment
Если вам действительно нужно дождаться завершения загрузки страницы, вы можете сделать: $(window).load(function() {//your code }); - person Ryan Doherty; 16.09.2009
comment
Эта нотация является просто ярлыком для document.ready. Это не имеет ничего общего с событием загрузки страницы. - person James Westgate; 02.08.2010