JQuery实现Ajax加载图⽚的⽅法
本⽂实例讲述了JQuery实现Ajax加载图⽚的⽅法。分享给⼤家供⼤家参考,具体如下:
最近在学习JQuery,想从原理上模拟⼀下⽆刷新的相册浏览。
最先想到的思路是利⽤缓存,也就是先显⽰提⽰消息,然后get图⽚,在get完的时候回调,将img标签的src改掉,由于刚刚get过,有了缓存,所以图⽚会⽴刻显⽰出来。
页⾯元素:
<input class="picbtn" type="button" value="Next" />
<div class="tip">正在加载……</div>
<div class="notice">
<img />
</div>
按钮的事件绑定:
复制代码代码如下:
$(".picbtn").click(function(){NextPic();});
定义了⼀个数组PicArr⽤来记录所有图⽚
NextPic内容:
$(".tip").slideDown(200); //显⽰提⽰
$.get(PicArr[CurrPic],function(){
$("img").attr("src",PicArr[CurrPic]);
$(".tip").slideUp(200);
CurrPic++;
if(CurrPic>4)
CurrPic=0;
});
在CHROME和FF下显⽰正常,IE6下异常,IE7、8未测试。
后来在ASPRAIN的开发者稽⼭草的帮助下,思路改成了先改src,然后绑定onload事件,在onload中回调。
核⼼代码:
$("img").attr("src",PicArr[CurrPic])
.bind('load',function(){$(".tip").slideUp(200);CurrPic++;if(CurrPic>4)CurrPic=0;});
后来⼀看基本正常了,但是仔细看还是不正常,图⽚顺序开始乱跳,跟踪了好久发现回调函数会多次运⾏。
中间想到会不会是事件绑定的问题,因为onclick事件的绑定是
复制代码代码如下:
$(Element).bind("click",callback)
可以简写成
复制代码代码如下:
$(Element).click(callback)
想到$(Element).bind("load",callback)和$(Element).load(url,callback)会不会是⼀样,查资料写得都不怎么清楚,改了试⼀下,还是不⼀样,不过在chrome和ff下依然能⼯作,但是数据不太正常,IE下报错。
再次检查稽⼭草给的代码,发现问题在哪了。
load事件的绑定的是⼀个匿名函数,⽽当按钮按下时会再次绑定,所以会重复执⾏。于是将绑定bind改成one搞定。最终完整代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JQUERY动态加载图⽚</title>
<script type="text/javascript" src="jquery/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
(function($){
$.NextPic=function()
{
$(".tip").slideDown(200);
$("img").attr("src",PicArr[CurrPic]).one('load',function(){$(".tip").slideUp(200);CurrPic++;if(CurrPic>4)CurrPic=0;});
//$("img").load(PicArr[CurrPic],function(){$(this).attr("src",PicArr[CurrPic]);$(".tip").slideUp(200);alert(CurrPic);CurrPic++;if(CurrPic>4)CurrPic=0;});
}
})(jQuery);
$(document).ready(function(){
PicArr = new Array("1.jpg","2.jpg","3.jpg","4.jpg","5.jpg");
CurrPic=0;
$(".tip").css({"position":"absolute","top":"100px","left":"50px"});
$(".tip").hide();
$(".scoll").click(function(){$.NextPic();});jquery实现ajax
})
</script>
</head>
<body>
<input class="picbtn" type="button" value="Next" />
<div class="tip">正在加载……</div>
<div class="notice">
<img id="img"/>
</div>
</body>
</html>
希望本⽂所述对⼤家jQuery程序设计有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论