JQuery实现Ajax加载图片的方法

前端技术 2023/09/01 JavaScript

本文实例讲述了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\"
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/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();});
})
</script>
</head>
<body>
<input class=\"picbtn\" type=\"button\" value=\"Next\" />
<div class=\"tip\">正在加载……</div>
<div class=\"notice\">
<img id=\"img\"/>
</div>
</body>
</html>

希望本文所述对大家jQuery程序设计有所帮助。

本文地址:https://www.stayed.cn/item/2499

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。