2013-12-11 4 views
2

Итак, вот в чем проблема:Загрузка изображений в jQuery

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

<img src="/pixel.png" new-img="/newimage.png"/> 

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

$(document).ready(function(){ 
    $("img").attr("src", $("img").attr("new-img")); 
}); 

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

Я не уверен, но «$ (это)» имеет к этому какое-либо отношение?

JSFiddle: http://jsfiddle.net/AeroMcDoom/8sxED/

+0

Вы уверены, что не [изобретать колесо] (https: // www.google.com/search?q=jquery+lazy+image+load)? –

ответ

6

Использование что:

$("img").attr("src", function(){return $(this).attr("new-img")}); 

FYI, вы должны использовать данных- * атрибут вместо:

<img src="/pixel.png" data-img="/newimage.png"/> 

И потом:

$("img").attr("src", function(){return $(this).data("img")}); 
+0

Ты потрясающий! +1 и скоро примут ответ – KeirDavis

+0

Что? вы можете использовать функцию в качестве второго параметра в attr()? Играй! –

+1

@CerylWiltink Ya, проверьте DOC: '.attr (attributeName, function (index, attr))' http://api.jquery.com/attr/#attr-attributeName-functionindex--attr –

1

Попробуйте это:

$("img").each(function(){$(this).attr("src", $(this).attr("new-img"))}); 

.attr на селектор, который соответствует более чем один элемент не будет работать, как вы это делаете. .attr() установит атрибут всех изображений, найденных в его содержимом. Также вы не можете установить его с помощью $("img").attr("new-img"), потому что .attr() всегда возвращает только первое значение, которое он находит из селектора.

+0

Спасибо за разъяснение. +1 – KeirDavis

0
$(document).ready(function(){ 
    $("img").each(function(){ 
     $(this).attr('src',$(this).attr("new-img")); 
    }); 
}); 
0

С немного меньшими затратами:

$(function(){ 
    $("img").each(function(){ 
     this.src = this.getAttribute('data-newimg'); 
    }); 
}); 

Там нет необходимости инициализировать JQuery один или два раза на изображение для этого, если вам не нужно, чтобы это работало на IE6.

0

Я думаю, что вы можете сохранить дополнительный запрос HTTP, делая это:

<div class="lazy"> 
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAA ///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" 
    data-src="/newimage.png" 
    alt="Good to go" /> 
</div> 

И в JS:

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

    $(".lazy > img").each(function(){ 
     var src = $(this).attr('data-src'); 

     $(this).attr('src',src); 
    }); 
}); 
Смежные вопросы