2011-03-01 198 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>