JQuery实现Ajax加载图片的方法


Posted in Javascript onDecember 24, 2015

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
一些常用的Javascript函数
Dec 22 Javascript
js限制textarea每行输入字符串长度的代码
Oct 31 Javascript
javascript获取url上某个参数的方法
Nov 08 Javascript
简单实现node.js图片上传
Dec 18 Javascript
谈谈JavaScript数组常用方法总结
Jan 24 Javascript
JS实现课堂随机点名和顺序点名
Mar 09 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
Aug 11 Javascript
vue elementUI tree树形控件获取父节点ID的实例
Sep 12 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 Javascript
js中数组常用方法总结(推荐)
Apr 09 Javascript
解决vue admin element noCache设置无效的问题
Nov 12 Javascript
VUE中使用HTTP库Axios方法详解
Feb 05 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
Dec 24 #Javascript
js中flexible.js实现淘宝弹性布局方案
Jun 23 #Javascript
正则表达式优化JSON字符串的技巧
Dec 24 #Javascript
jQuery实现移动端滑块拖动选择数字效果
Dec 24 #Javascript
不得不分享的JavaScript常用方法函数集(上)
Dec 23 #Javascript
JQuery实现的按钮倒计时效果
Dec 23 #Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
Dec 23 #Javascript
You might like
BBS(php &amp; mysql)完整版(二)
2006/10/09 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
2014过年倒计时示例
2014/01/31 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
php自定义时间转换函数示例
2016/12/07 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
python实现淘宝购物系统
2019/10/25 Python
wxpython布局的实现方法
2019/11/01 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
python和c语言哪个更适合初学者
2020/06/22 Python
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
酒店实习个人鉴定
2013/12/07 职场文书
开学典礼感言
2014/02/16 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
地道战观后感400字
2015/06/04 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
MySql分区类型及创建分区的方法
2022/04/13 MySQL