2011-03-01 196 views
0

剛開始學習jQuery中的Ajax()函數。試圖製作一個小部件,圖像加載器將出現,直到圖像從服務器加載。通過ajax調用加載圖像,同時顯示加載器圖像

我想對這些李的所有圖像應用相同的。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<style type="text/css"> 
    li { padding: 10px; } 
    ul.imageList li .pics { height: 50px; width:50px; } 
</style> 
<script type="text/javascript" language="javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
    $('document').ready(function() { 
     $('#click').click(function(event) { 
      event.preventDefault(); 
      $(".imageList li").html('<img src="http://deltaplanveter.ru/app/webroot/img/loader.gif" />'); 
      $(".imageList li").load('1.png'); 
     }); 
    }); 
</script> 
</head> 
<body> 
<div class="images"> 
    <ul class="imageList"> 
     <li><img src="1.png" class="pics" /></li> 
     <li><img src="2.png" class="pics" /></li> 
     <li><img src="3.png" class="pics" /></li> 
     <li><img src="4.png" class="pics" /></li> 
    </ul> 
    <a href="#" id="click">Show Images</a> 
</div> 
</body> 
</html> 

請點擊這裏查看我的生活代碼 http://jsfiddle.net/ylokesh/cZ6F7/

謝謝! LOKESH亞達夫

回答

0

如果圖像<img>元素存在與定義src屬性,不會有任何的AJAX /延遲加載,因爲大多數瀏覽器將加載<img>即使他們是:invisible

但是,你可以用做這樣的事情:

$(document).ready(function() { 
    $('img').hide();//hide all the images on the page 
}); 

var i = 0; 
var interval=0; 
$(window).bind("load", function() { 
    var interval = setInterval("doThis(i)",100); 
}); 

function doThis() { 
    var images = $('img').length; 
    if (i >= images) { 
     clearInterval(interval); 
    } 
    $('img:hidden').eq(0).fadeIn(100); 
    i++; 
} 

,並使用CSS規則來顯示裝載機:

#gallery li a { 
    background: url("/images/ajax-loader.gif") no-repeat scroll 50% 50% #EEEEEE; 
} 

例如在jsfiddle


編輯:

如果你想使用Ajax來加載你的圖像,那麼你可以在Ajax Start event上觸發你的加載器圖像。

如果您使用帶模態加載器的全局容器作爲例子,那麼您的工作最好,但也可以與您的特定案例一起使用。

例子:

var $loader = $('<div />').attr('id', 'loader'); 
var $spinner = $('<img />').attr('src', '/images/ajax-loader.gif') 
    .attr('alt', 'Loading'); 
$loader.append($spinner); 
$('body').children().last().after($loader); 

$('body').ajaxStart(function() { 
     $loader.show(); 
    }).ajaxComplete(function() { 
     $loader.hide(); 
    }); 

而且根據CSS:

#loader { 
    background: 
     url("http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png") 
     repeat scroll 50% 50% #666666; 
    display: none; 
    height: 100%; 
    left: 0; 
    opacity: 0.3; 
    position: fixed; 
    top: 0; 
    width: 100%; 
} 

    #loader img { 
    left: 45%; 
    position: relative; 
    top: 50%; 
    } 

Example

+0

感謝鮑里斯,你的代碼爲我工作。我們不能放置$(ajax())從服務器獲取圖像,然後通過刪除加載程序圖像' – 2011-03-01 11:12:07

+0

將原始圖像附加到容器當然,您可以使用Ajax加載圖像,檢查我的更新答案。 – 2011-03-01 11:13:12

+0

好的。我正在嘗試谷歌找到任何相關的網站,以獲得正確的想法..如何使用Ajax實現這種情況。如果你有任何網站的網址可以提供一些見解..請分享:) – 2011-03-01 11:24:29

2
$('#loadingDiv').hide() // hide it initially 
     .ajaxStart(function() { 
     //alert('started'); 

     $('#loadingDiv').show(); 
     }) 
     .ajaxStop(function() { 
     //alert('stoped'); 

     $('#loadingDiv').hide(); 
    }); 

<span id="loadingDiv"><img src="images/ajax-loader.gif" alt="Loading..."></span>