//图片预加载
//闭包模拟局部作用于 (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. button样式的demo

    <style type="text/css"> .styletop{margin-top: 200px;} .stylea{ margin-left:550px;} ; ...

  2. android AVD 启动时报错

    AVD启动报错 1.提示:ANDROID_SDK_ROOT is undefined / ERROR: This AVD’s configuration is missing a kernel fil ...

  3. 快速实现兼容的js复制方式。有点非正规,通过非正规的排版实现。

    <div style="height:1px; width:1px; overflow:hidden; position:absolute;left:-2px;"> & ...

  4. Windows安装MongoDB 4.0并赋予用户访问权限

    第一部分 Windows安装MongoDB-4.0 第一步:下载MongoDB:https://www.mongodb.com/download-center?jmp=nav#community 我目 ...

  5. Nuget 多平台多目标快速自动打包

    构建现代的 .Net 应用离不开 Nuget 的支持,而快速打包 Nuget 成了提高生产率的有效方法. 1. 前置条件 为了实现 Nuget 的快速打包,我们需要先解决一些前置依赖,无论是 .Net ...

  6. ZYNQ原理图中添加RTL设计模块

    前言 已有的RTL模块怎么添加到原理图中? 流程 (1)添加文件到设计中. (2)右键文件添加到block design中. (3)连线即可. 以上.

  7. 关于Vue修改默认的build文件存放的dist路径

    原文地址:http://www.cnblogs.com/JimmyBright/p/7681086.html Vue默认build路径是项目的dist目录下,有时候我们可能希望build之后的文件自动 ...

  8. 如何解决Redis中的key过期问题

    最近我们在Redis集群中发现了一个有趣的问题.在花费大量时间进行调试和测试后,通过更改key过期,我们可以将某些集群中的Redis内存使用量减少25%. Twitter内部运行着多个缓存服务.其中一 ...

  9. Educational Codeforces Round 56 (Rated for Div. 2) D

    给你一个无向图 以及点的个数和边  每个节点只能用1 2 3 三个数字 求相邻 两个节点和为奇数   能否构成以及有多少种构成方法 #include<bits/stdc++.h> usin ...

  10. SQL SERVER 查询所有数据表名称和数据行数

    SELECT a.name, b.rows FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE ( a.type ...