2010-06-29 4 views
2

Я получил этот фрагмент кода, следующего за tutorial comment (Джеймсом) на Nettuts, и я хотел бы его реализовать.preload images using jQuery

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

Кажется, мне нужно сначала настроить свой массив, цикл через этот массив, который затем создает объекты изображения и загружает их. Тем не менее, когда я проверяю свой Firebug, я не вижу загрузки изображений в кеш.

$(function(){ 
     var imgArray = ['bghome01.jpg', 'bghome02.jpg', 'bghome03.jpg']; 
     $.preload = function (imgArray) { 
      $.each(imgArray, function() { 
       alert(imgArray); 
       (new Image()).src = 'Images/' + this; 
      }); 
     }; 
    }); 

Буду признателен за помощь!

+0

дубликат: http://stackoverflow.com/questions/476679/preloading-images-with-jquery?rq=1 –

ответ

-1

Если I, где в браузере я бы загружал только изображения, которые находятся на странице, поэтому я подозреваю, что он произошел, потому что вы никогда не добавляли изображения в DOM. Попробуйте настроить создание нового тега img с помощью style="visibility:hidden" и добавьте его в DOM.

+0

Привет Мартин, Читая этот учебник по Nettuts, это именно то, что парень, как делать - вставляя изображения на страницу и скрывая их. Если вы читаете дальше, в комментариях, Джеймс (не я) комментирует загрузку изображений по-другому. Вы предполагаете, что нет способа загрузки изображений в кеш без его загрузки в DOM? Спасибо;) –

+0

Должен признаться, я не проводил никаких исследований по этому вопросу. Но я мог представить себе, что интеллектуальный браузер не загрузит изображения, которые не «включены» на странице. Ваш Firefox, очевидно, делает это так ... –

+0

-1 Предварительная загрузка изображений - это стандартный трюк, чтобы ускорить загрузку страниц. Это возможно, и вам не нужно добавлять изображение в DOM. –

0

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

Смотрите эту статью для некоторого кода: http://engineeredweb.com/blog/09/12/preloading-images-jquery-and-javascript

Заметим, что JQuery не делает никакой магии; это все JavaScript в конце, поэтому что-то должно быть не так с вашим кодом. Поэтому, если сохранение объектов изображения не помогает, возможно, this article укажет вам в правильном направлении.

+0

Первая статья создает узлы в DOM, вторая, похоже, не предполагает, что ничего не получит собранный мусор. Я думаю, что вы правы, OP должен, вероятно, просто помещать массив изображений в контекст верхнего уровня где-нибудь. – wds

2

Прямо здесь, вы определения функции, но не вызова это:

$.preload = function (imgArray) { 

Если вы просто хотите, чтобы загрузить изображения, вы можете стройный его вниз к этому:

$(function(){ 
    var imgArray = ['bghome01.jpg', 'bghome02.jpg', 'bghome03.jpg']; 
    $.each(imgArray, function() { 
    (new Image()).src = 'Images/' + this; 
    }); 
}); 

Или вы можете сделать это с помощью своего исходного метода, определение функции может быть во внешнем файле, но на странице вам нужно позвонить ему:

var imgArray = ['bghome01.jpg', 'bghome02.jpg', 'bghome03.jpg']; 
$.preload(imgArray); 

Я думаю, что путаница происходит от imgArray является именем массива и параметра, но это 2 разных вещи, это может быть менее запутанным, если вы дали параметр в $.preload другое имя.