无序加载效果预览:
有序加载只是少了百分比显示效果一样
无序加载非插件写法:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图片加载之无序加载</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
html,body{
height: 100%;
}
#img{
width: 100%;
}
.box{
width: 1200px;
margin: 30px auto;
}
p{
text-align: center;
margin-top: 15px;
}
.btn{
text-decoration: none;
color: #000000;
border: 1px solid #ccc;
padding: 3px 8px;
margin-right: 20px;
}
.loading{
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: #CCCCCC;
text-align: center;
font-size: 30px;
}
.progress{
margin-top: 300px;
}
</style>
</head>
<body>
<div class="box">
<img src="../img/1.jpg" alt="pic" id="img" />
<p>
<a href="javascript:;" class="btn" data-control="prev">上一张</a>
<a href="javascript:;" class="btn" data-control="next">下一张</a>
</p>
</div>
<div class="loading">
<p class="progress">0%</p>
</div>
<script type="text/javascript" src="../jq/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
//声明一直数组,并在数组内放置图片路径
var imgs = [
"../img/1.jpg",
"../img/2.jpg",
"../img/3.jpg",
"../img/4.jpg",
"../img/5.jpg",
"../img/6.jpg"
];
//获取数组长度,进度元素,设置页数,进度初始值
var index = 0,
len = imgs.length,
count = 0,
$progress = $(".progress");
//遍历数组,获取数组内全部路径
$.each(imgs, function(i,src) {
//声明一个图像对象
var imgObj = new Image();
//设置所有图片在加载中或者加载失败时触发时间
$(imgObj).on("load error",function(){
//设置进度显示数字(因为each会自动循环 每次都会用获得数组数量除以总数从而获得百分比)
$progress.html(Math.round((count + 1) / len * 100) + "%");
//如果循环次数等于数组长度 即代表全部图片加载完毕
if(count >= len - 1){
//图片全部加载完毕后隐藏百分比进度
$(".loading").hide();
//设置页面标题初始值
document.title = "1/" + len;
}
//每一次循环加1
count++;
});
//设置所有图片的路径等于数组内的路径
imgObj.src = src;
});
//设置上一张下一张触发事件
$(".btn").on("click",function(){
if("prev" === $(this).data("control")){
//上一张index变量先-1再和0比较大小
index = Math.max(0,--index);
//可以选择三元或者上面的写法处理
// index = (--index<=0)?0:--index;
}else{
//下一张index变量先+1再和0比较大小
index = Math.min(len - 1, ++index);
}
//设置页面标题页数
document.title = (index + 1) + "/" + len;
//设置每一次点击获取对应图片路径
$("#img").attr("src",imgs[index]);
});
</script>
</body>
</html>
有序加载非插件写法:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图片加载之无序加载</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#img{
width: 100%;
}
.box{
width: 1200px;
margin: 30px auto;
}
p{
text-align: center;
margin-top: 15px;
}
.btn{
text-decoration: none;
color: #000000;
border: 1px solid #ccc;
padding: 3px 8px;
margin-right: 20px;
}
</style>
</head>
<body>
<div class="box">
<img src="../img/1.jpg" alt="pic" id="img" />
<p>
<a href="javascript:;" class="btn" data-control="prev">上一张</a>
<a href="javascript:;" class="btn" data-control="next">下一张</a>
</p>
</div>
<script type="text/javascript" src="../jq/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js2.js"></script>
<script type="text/javascript">
//声明一直数组,并在数组内放置图片路径
var imgs = [
"../img/1.jpg",
"../img/2.jpg",
"../img/3.jpg",
"../img/4.jpg",
"../img/5.jpg",
"../img/6.jpg"
];
//获取数组长度,进度元素,设置页数
var len = imgs.length,
count = 0,
index = 0;
load();
//有序预加载
function load(){
var imgObj = new Image();
$(imgObj).on("load error",function(){
if(count >= len){
//所有图片已经加载完毕
}else{
load();
}
count++;
});
imgObj.src = imgs[count];
}
//设置上一张下一张触发事件
$(".btn").on("click",function(){
if("prev" === $(this).data("control")){
//上一张index变量先-1再和0比较大小
index = Math.max(0,--index);
//可以选择三元或者上面的写法处理
// index = (--index<=0)?0:--index;
}else{
//下一张index变量先+1再和0比较大小
index = Math.min(len - 1, ++index);
}
//设置页面标题页数
document.title = (index + 1) + "/" + len;
//设置每一次点击获取对应图片路径
$("#img").attr("src",imgs[index]);
});
</script>
</body>
</html>
无序加载插件写法:(和有序加载调用共同JS文件)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图片加载之无序加载</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
html,body{
height: 100%;
}
#img{
width: 100%;
}
.box{
width: 1200px;
margin: 30px auto;
}
p{
text-align: center;
margin-top: 15px;
}
.btn{
text-decoration: none;
color: #000000;
border: 1px solid #ccc;
padding: 3px 8px;
margin-right: 20px;
}
.loading{
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: #CCCCCC;
text-align: center;
font-size: 30px;
}
.progress{
margin-top: 300px;
}
</style>
</head>
<body>
<div class="box">
<img src="../img/1.jpg" alt="pic" id="img" />
<p>
<a href="javascript:;" class="btn" data-control="prev">上一张</a>
<a href="javascript:;" class="btn" data-control="next">下一张</a>
</p>
</div>
<div class="loading">
<p class="progress">0%</p>
</div>
<script type="text/javascript" src="../jq/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js2.js"></script>
<script type="text/javascript">
//声明一直数组,并在数组内放置图片路径
var imgs = [
"../img/1.jpg",
"../img/2.jpg",
"../img/3.jpg",
"../img/4.jpg",
"../img/5.jpg",
"../img/6.jpg"
];
//获取数组长度,进度元素,设置页数
var index = 0,
len = imgs.length,
$progress = $(".progress");
//使用工具函数 调用插件方法
$.preload(imgs,{
//每一张图片加载完毕后执行
each: function(count){
$progress.html(Math.round((count + 1) / len * 100) + "%");
},
//所有图片加载完毕后执行
all: function(){
//图片全部加载完毕后隐藏百分比进度
$(".loading").hide();
//设置页面标题初始值
document.title = "1/" + len;
}
});
//设置上一张下一张触发事件
$(".btn").on("click",function(){
if("prev" === $(this).data("control")){
//上一张index变量先-1再和0比较大小
index = Math.max(0,--index);
//可以选择三元或者上面的写法处理
// index = (--index<=0)?0:--index;
}else{
//下一张index变量先+1再和0比较大小
index = Math.min(len - 1, ++index);
}
//设置页面标题页数
document.title = (index + 1) + "/" + len;
//设置每一次点击获取对应图片路径
$("#img").attr("src",imgs[index]);
});
</script>
</body>
</html>
有序加载插件写法:(和无序加载调用共同JS文件)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图片加载之无序加载</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#img{
width: 100%;
}
.box{
width: 1200px;
margin: 30px auto;
}
p{
text-align: center;
margin-top: 15px;
}
.btn{
text-decoration: none;
color: #000000;
border: 1px solid #ccc;
padding: 3px 8px;
margin-right: 20px;
}
</style>
</head>
<body>
<div class="box">
<img src="../img/1.jpg" alt="pic" id="img" />
<p>
<a href="javascript:;" class="btn" data-control="prev">上一张</a>
<a href="javascript:;" class="btn" data-control="next">下一张</a>
</p>
</div>
<script type="text/javascript" src="../jq/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js2.js"></script>
<script type="text/javascript">
//声明一直数组,并在数组内放置图片路径
var imgs = [
"../img/1.jpg",
"../img/2.jpg",
"../img/3.jpg",
"../img/4.jpg",
"../img/5.jpg",
"../img/6.jpg"
];
//获取数组长度,设置页数
var len = imgs.length,
index = 0;
//调用插件
$.preload(imgs,{
//使用有序加载
order: "ordered"
});
//设置上一张下一张触发事件
$(".btn").on("click",function(){
if("prev" === $(this).data("control")){
//上一张index变量先-1再和0比较大小
index = Math.max(0,--index);
//可以选择三元或者上面的写法处理
// index = (--index<=0)?0:--index;
}else{
//下一张index变量先+1再和0比较大小
index = Math.min(len - 1, ++index);
}
//设置页面标题页数
document.title = (index + 1) + "/" + len;
//设置每一次点击获取对应图片路径
$("#img").attr("src",imgs[index]);
});
</script>
</body>
</html>
有序and无序加载共同JS文件
//图片预加载
(function(){
//imgs一般传递进来的都是一个数组
function PreLoad(imgs,options){
//如果imgs传递进来的是一个字符串 就将他包装成一个数组 否则就返回数组本身
this.imgs = (typeof imgs === "string") ? [imgs] : imgs;
//将options参数覆盖PreLoad.DEFAULTS,将融合后的内容组成一个新对象,并返回到参数中
this.opts = $.extend({},PreLoad.DEFAULTS,options);
//如果设置参数为有序加载则执行下面代码块
if(this.opts.order === "ordered"){
//执行有序加载的方法
this._ordered();
}else{
//执行无序加载的方法
this._unoredered();
}
}
PreLoad.DEFAULTS = {
order: "unordered",//无序预加载
each: null,//每一张图片加载完毕后执行
all: null//所有图片加载完毕后执行
};
//有序加载
PreLoad.prototype._ordered = function(){
//获取相关变量,并保存到局部变量中
var opts = this.opts,
imgs = this.imgs,
len = imgs.length,
count = 0;
//执行有序加载方法函数
load();
//有序预加载
function load(){
//实例化IMG对象
var imgObj = new Image();
$(imgObj).on("load error",function(){
//检测opts.each是否存在
opts.each && opts.each(count);
if(count >= len){
//所有图片已经加载完毕
opts.all && opts.all();
}else{
load();
}
count++;
});
//将图像路径保存的数组数据全部设置到IMG的 src中
imgObj.src = imgs[count];
}
}
//无序加载
PreLoad.prototype._unoredered = function(){
//获取对象中的imgs属性(因为前面已经设置了返回的是数组,所以可以遍历其内容)
var imgs = this.imgs,
//获取对象中的opts属性,并返回到变量中
opts = this.opts,
//设置百分比显示数字执行的参数 和 获取数组长度(可浏览图片数量)
count = 0,
len = imgs.length;
//遍历数组,获取数组内全部路径
$.each(imgs, function(i,src) {
//判断src传递进来的是否是一个字符串 如果是 就将他返回 下面的代码将不执行
if(typeof src != "string") return;
//声明一个图像对象
var imgObj = new Image();
//设置所有图片在加载中或者加载失败时触发时间
$(imgObj).on("load error",function(){
//检测opts.each属性是否存在
opts.each && opts.each(count);
//如果循环次数等于数组长度 即代表全部图片加载完毕
if(count >= len - 1){
//图片全部加载完毕后隐藏百分比进度
$(".loading").hide();
//设置页面标题初始值
document.title = "1/" + len;
}
//每一次循环加1
count++;
});
//设置所有图片的路径等于数组内的路径
imgObj.src = src;
});
};
//将PreLoad构造函数实例化
$.extend({
preload: function(imgs,opts){
new PreLoad(imgs,opts);
}
});
})(jQuery);