一个基本的图像池应该允许您回收 img 元素以供重复使用。由于您事先不知道总共有多少图像,因此只需根据需要扩展池大小即可。
像这样的东西应该工作:
function getImg( id, src, alt ) {
var pool = document.getElementById( 'image_pool' );
var img = ( pool.children.length > 0 ) ? pool.removeChild( pool.children[0] ) : document.createElement( 'img' );
img.id = id;
img.src = src;
img.alt = alt;
return img;
}
function recycleImg( id ) {
var img = document.getElementById( id );
document.getElementById( 'image_pool' ).appendChild( img.parentNode.removeChild( img ) );
}
在页面某处放置一个隐藏的“image_pool”容器,以在使用之间隐藏回收的图像:
<div id="image_pool" style="display:none;"></div>
然后任何时候你需要一个新的 img 元素,调用:
document.getElementById( 'some_element_id' ).appendChild( getImg( 'my_image_id', 'images/hello.gif', 'alt_text' ) );
当你完成它时:
recycleImg( 'my_image_id' );
jQuery 替代品
function getImg( id, src, alt ) {
var img;
if( $("#image_pool").children().length > 0 ) {
return $("#image_pool img:first-child").attr( { 'id': id, 'src': src, 'alt': alt } ).detach();
}
return $( "<img />'" ).attr( { 'id': id, 'src': src, 'alt': alt } );
}
function recycleImg( id ) {
$( "#" + id ).detach().appendTo( $("#image_pool") );
}
当你需要一个新的 img 元素时:
getImg( 'my_image_id', 'images/hello.gif', 'alt_text' ).appendTo( $( "#some_element_id" ) );
(回收工作同上)