//图片预加载
//闭包模拟局部作用于 (function($){
function Preload(imgs,options){
this.imgs = (typeof imgs === 'string') ? [imgs]:imgs;
this.opts = $.extend({},Preload.DEFAULTS,options); if(this.opts.order === 'ordered'){
//有序加载
this._ordered();
}else{
//无序加载
this._unordered(); //下划线 只在当前内部使用,不外部调用
}
}
//默认参数
Preload.DEFAULTS = {
order:'unordered',//默认无序预加载
each:null,//每一张图片加载完毕后执行
all:null //所有图片加载完成后执行
} Preload.prototype._ordered = function(){
let imgs = this.imgs,
opts = this.opts,
count = 0,
len = imgs.length;
loadImg();
//有序与加载
function loadImg(){
var imgObj = new Image();
$(imgObj).on('load error',()=>{
opts.each && opts.each(count);
if(count >= len){
//所有图片加载完成
opts.all && opts.all();
}else{
//加载下一张
loadImg();
}
count++;
})
imgObj.src = imgsArr[count]
}
} Preload.prototype._unordered = function(){//无序加载
let imgs = this.imgs,
opts = this.opts,
count = 0,
len = imgs.length; $.each(imgs,(i,src)=>{
if(typeof src !='string'){return;} var imgObj = new Image();
$(imgObj).on('load error',()=>{
opts.each && opts.each(count);
if(count >= len -1){
opts.all && opts.all();
}
count ++;
}) imgObj.src = src;
})
}; //插件封装
$.extend({
preload:function(imgs,options){
new Preload(imgs,options);
}
}) })(jQuery);

调用

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>图片预加载</title>
<style>
.img-box,.btn{
text-align: center;
}
.img-box img{
width: 500px;
height: 500px;
}
.btn a{
display: inline-block;
height: 30px;
line-height: 30px;
border: 1px solid red;
border-radius: 5px;
margin-right: 10px;
padding: 0 10px;
color: #333;
text-decoration: none;
}
.btn a:hover{
background: #ccc;
}
.loading{
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 999;
background: rosybrown;
text-align: center;
font-size: 30px;
font-weight: 700;
}
.progress{
margin-top: 300px;
}
</style>
</head>
<body>
<div class="box">
<div class="img-box">
<img src="http://pic1.win4000.com/wallpaper/4/59c480193e05b.jpg" alt="">
</div>
<div class="btn">
<a href="javascript:;" class="prev" data-controle="prev">上一页</a>
<a href="javascript:;" class="next" data-controle="next">下一页</a>
</div>
</div> <!-- 预加载 --> <div class="loading">
<div class="progress">0%</div>
</div> <script src="js/jquery-3.3.1.min.js"></script>
<script src="js/preload.js"></script>
<script>
let imgsArr = [
'http://pic1.win4000.com/wallpaper/4/59c480193e05b.jpg',
'http://pic1.win4000.com/wallpaper/7/57f9f84f0a29f.jpg',
'http://img17.3lian.com/d/file/201702/20/3a1744009d4b0e32a8a27e13299fc658.jpg',
'http://m.wendangwang.com/pic/ac555f0efbaa75d6a2b43778/7-810-jpg_6-1080-0-0-1080.jpg',
'http://pic170.nipic.com/file/20180620/27194830_202055800038_2.jpg'
] //调用插件
let index = 0,
len = imgsArr.length,
$progress = $('.progress'); $.preload(imgsArr,{
each:function(count){
$progress.html(Math.round((count+1)/len*100) + '%');
},
all:function(){
$('.loading').hide();
document.title = '1/' + len;
}
}) $('.btn a').on('click',function(){
if($(this).data('controle') === 'prev'){
index = Math.max(0,--index)
}else{
index = Math.min(len - 1,++index)
}
document.title = (index) + '/' + len
$('.img-box img').attr('src',imgsArr[index]);
})
</script>
</body>
</html>

js-图片预加载的更多相关文章

  1. js图片预加载

    图片预加载有大体有几种方式 1.html标签或css加载图片. 显而易见我们使用img标签或者通过标签的background-image属性都可以实现图片的预加载.但是为了避免初次载入过多图片影响体验 ...

  2. js图片预加载与延迟加载

    图片预加载的机制原理:就是提前加载出图片来,给前端的服务器有一定的压力. 图片延迟加载的原理:为了缓解前端服务器的压力,延缓加载图片,符合条件的时候再加载图片,当然不符合的条件就不加载图片.​ 预加载 ...

  3. js图片预加载后触发操作

    为了使得图片加载完,再触发回调函数,需进行图片预加载处理 function loadImage(url, callback) { var img = new Image(); img.src = ur ...

  4. js图片预加载以及延迟加载

    当我们需要做图片轮播的时候,如果让图片提前下载到本地,用浏览器缓存起来,我们可以用Image对象: function preLoadImg(){ var img=new Image(); img.sr ...

  5. JS图片预加载插件

    在开发H5项目中有时候会遇到要加载大量图片的情况,利用预加载技术可以提高用户浏览时的体验. 1)概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片.预加载:提前加载 ...

  6. js图片预加载、有序加载

    <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...

  7. js图片预加载实现!

    var myImage = (function(){ var imgNode = document.createElement( 'img' ); document.body.appendChild( ...

  8. JS实现图片预加载无需等待

    网站开发时经常需要在某个页面需要实现对大量图片的浏览;用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片 网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考 ...

  9. 外贸建站之图片预加载JS代码分享

    外贸建站之图片预加载JS代码分享 function preloadimg() { setTimeout(function() { new Image().src = "images/2017 ...

  10. 图片预加载 js css预加载

    图片预加载, 效果非常明显, 特别是有多个图, 方法很简单 , 体验提升了不少 <div class="hidden">        <script type= ...

随机推荐

  1. 关于Oracle使用管理员账号登录失败的问题

    我在本地建的Oracle数据库在调试自己写的存储过程的时候提示缺少 debug connect session 权限,一般情况下根据这个提示直接用管理员账号登录进去,执行 grant debug co ...

  2. springmvc的前端控制器

    <servlet> <servlet-name>xxx</servlet-name> <servlet-class>org.springframewor ...

  3. opencontrail—VXLAN模式下数据包的传输过程

    在这篇文章中,我们将看到VM生成的数据包如何能够到达另一个VM或外部资源,Neutron使用OpenContrail插件的上下文中的关键概念/组件是什么. 我们将重点介绍OpenContrail,它如 ...

  4. maven settings.xml--需要保存到用户/.m2文件夹下

    <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...

  5. uninitialized_copy()效果试验

    根据<STL源码剖析>这段节选描述,实现如下代码进行测试 #include "2jjalloca.h" #include <vector> #include ...

  6. 第八周博客作业<西北师范大学|李晓婷>

    1.助教博客链接:https://home.cnblogs.com/u/lxt-/ 2.作业要求链接:http://www.cnblogs.com/nwnu-daizh/p/10687492.html ...

  7. java 键盘录入(Scanner)

    键盘录入(Scanner)• 键盘录入数据概述– 我们目前在写程序的时候, 数据值都是固定的, 但是实际开发中, 数据值肯定是变化的, 所以, 把数据改进为键盘录入, 提高程序的灵活性.• 如何实现键 ...

  8. Markdown——入门指南

    导语: Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的语法十分简单.常用的标记 ...

  9. flink-conf.yaml

    Flink 配置文件 对于管理员来说,差不多经常调整的就只有 conf 下的flink-conf.yaml : 经过初步的调整,大约有以下模块的参数(未优化) Licensed to the Apac ...

  10. hadoop记录-浅析Hadoop中的DistCp和FastCopy(转载)

    DistCp(Distributed Copy)是用于大规模集群内部或者集群之间的高性能拷贝工具. 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成. 它把文件和目录的列表作为ma ...