2013-11-21 5 views
0

Я пытаюсь предварительно загрузить изображения, и как только они будут полностью загружены, они будут постепенно исчезать (используя JQuery). При загрузке отображается небольшая анимация загрузки. Для этого я попытался создать невидимый тег изображения и позволить им загружаться там. Как только они закончили загрузку, я попытался установить исходный оригинал img-тега на оригинал.JQuery ready бесконечный цикл

Однако я не нашел свою ошибку в течение нескольких часов и не имею понятия. Кажется, что он заканчивается бесконечным циклом, а затем снова и снова создает «preload-img-tags».

мой HTML:

<img src="someimg.jpg" id="img2load" class="preload_img" style="max-width:400px; max-height:400px;"> 

мои JS:

$(document).ready(function() { 

var objs = document.getElementsByClassName("preload_img"); 

for (var i = 0; i < objs.length; i++) { 

    objs[i].setAttribute("restoreImgPath", objs[i].src); 

    //create div for preloading 
    var img = document.createElement("img"); 
    img.setAttribute("src", objs[i].src); 
    img.setAttribute("style", "position:absolute; top:0px; left:0px; display:none;"); 
    img.setAttribute("preloadForId", objs[i].id); 
    img.setAttribute("id", "preload_" + objs[i].id); 
    document.body.appendChild(img); 

    //display loading gif 
    objs[i].setAttribute("src", "loading.gif"); 

    //restore image [... not yet implemented ...] 

} 
}); 

Спасибо заранее. Я не очень опытный в JS еще не так, пожалуйста, будьте терпеливы со мной 0 :-)

+2

Зачем включать jQuery, если вы не собираетесь его использовать? – sbeliv01

+0

document.ready(), и он мне понадобится позже. – newBee

+0

Вы уверены, что этот фрагмент кода вызывает проблему? одно место это может произойти, если вы присоединяете одно и то же имя класса к элементу, добавляемому в цикле (который вы здесь не делаете), потому что 'objs' - это живая коллекция, и она обновляется по мере добавления элементов с тем же классом еще раз. Однако для более безопасной стороны do 'var i = 0, l = objs.length; i PSL

ответ

1

Ну, это выглядит как проблема:

document.body.appendChild(img); 

Вы продолжать добавлять новые изображения. Похоже, что вы каким-то образом копируете имена классов, так что objs.length продолжает увеличиваться, а ваш цикл бесконечен. Вместо этого:

var starting_length = objs.length; 
for (var i = 0; i < starting_length; i++) { 
    .... 
+0

Да, но добавленные изображения не имеют класса preload_img, не так ли? – OlivierH

+0

поэтому 'document.getElementsByClassName (" preload_img ")' возвращает некоторую ссылку со всеми элементами этого класса? Или почему длина увеличивается после выбора элементов? благодарит за ответ! – newBee

+0

yes 'document.getElementsByClassName' создает активный список, который будет обновляться с помощью dom – megawac

Смежные вопросы