First you need to think off when you want to swap. For example you could switch everytime when its a div tag thats loaded. In my example i just used a extra data field "background" and whenever its set the image is applied as a background image.
Then you just have to load the Data with the created image tag. And not overwrite the img tag instead apply a css background image.
Here is a example of the code change:
if (settings.appear) { var elements_left = elements.length; settings.appear.call(self, elements_left, settings); } var loadImgUri; if($self.data("background")) loadImgUri = $self.data("background"); else loadImgUri = $self.data(settings.data_attribute); $("<img />") .bind("load", function() { $self .hide(); if($self.data("background")){ $self.css('backgroundImage', 'url('+$self.data("background")+')'); }else $self.attr("src", $self.data(settings.data_attribute)) $self[settings.effect](settings.effect_speed); self.loaded = true; /* Remove image from array so it is not looped next time. */ var temp = $.grep(elements, function(element) { return !element.loaded; }); elements = $(temp); if (settings.load) { var elements_left = elements.length; settings.load.call(self, elements_left, settings); } }) .attr("src", loadImgUri ); }
the loading stays the same
$("#divToLoad").lazyload();
and in this example you need to modify the html code like this:
<div data-background="http://apod.nasa.gov/apod/image/9712/orionfull_jcc_big.jpg" id="divToLoad" />
but it would also work if you change the switch to div tags and then you you could work with the "data-original" attribute.
Here's an fiddle example: http://jsfiddle.net/dtm3k/1/