js-图片预加载
//图片预加载
//闭包模拟局部作用于 (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-图片预加载的更多相关文章
- js图片预加载
图片预加载有大体有几种方式 1.html标签或css加载图片. 显而易见我们使用img标签或者通过标签的background-image属性都可以实现图片的预加载.但是为了避免初次载入过多图片影响体验 ...
- js图片预加载与延迟加载
图片预加载的机制原理:就是提前加载出图片来,给前端的服务器有一定的压力. 图片延迟加载的原理:为了缓解前端服务器的压力,延缓加载图片,符合条件的时候再加载图片,当然不符合的条件就不加载图片. 预加载 ...
- js图片预加载后触发操作
为了使得图片加载完,再触发回调函数,需进行图片预加载处理 function loadImage(url, callback) { var img = new Image(); img.src = ur ...
- js图片预加载以及延迟加载
当我们需要做图片轮播的时候,如果让图片提前下载到本地,用浏览器缓存起来,我们可以用Image对象: function preLoadImg(){ var img=new Image(); img.sr ...
- JS图片预加载插件
在开发H5项目中有时候会遇到要加载大量图片的情况,利用预加载技术可以提高用户浏览时的体验. 1)概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片.预加载:提前加载 ...
- js图片预加载、有序加载
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...
- js图片预加载实现!
var myImage = (function(){ var imgNode = document.createElement( 'img' ); document.body.appendChild( ...
- JS实现图片预加载无需等待
网站开发时经常需要在某个页面需要实现对大量图片的浏览;用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片 网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考 ...
- 外贸建站之图片预加载JS代码分享
外贸建站之图片预加载JS代码分享 function preloadimg() { setTimeout(function() { new Image().src = "images/2017 ...
- 图片预加载 js css预加载
图片预加载, 效果非常明显, 特别是有多个图, 方法很简单 , 体验提升了不少 <div class="hidden"> <script type= ...
随机推荐
- button样式的demo
<style type="text/css"> .styletop{margin-top: 200px;} .stylea{ margin-left:550px;} ; ...
- android AVD 启动时报错
AVD启动报错 1.提示:ANDROID_SDK_ROOT is undefined / ERROR: This AVD’s configuration is missing a kernel fil ...
- 快速实现兼容的js复制方式。有点非正规,通过非正规的排版实现。
<div style="height:1px; width:1px; overflow:hidden; position:absolute;left:-2px;"> & ...
- Windows安装MongoDB 4.0并赋予用户访问权限
第一部分 Windows安装MongoDB-4.0 第一步:下载MongoDB:https://www.mongodb.com/download-center?jmp=nav#community 我目 ...
- Nuget 多平台多目标快速自动打包
构建现代的 .Net 应用离不开 Nuget 的支持,而快速打包 Nuget 成了提高生产率的有效方法. 1. 前置条件 为了实现 Nuget 的快速打包,我们需要先解决一些前置依赖,无论是 .Net ...
- ZYNQ原理图中添加RTL设计模块
前言 已有的RTL模块怎么添加到原理图中? 流程 (1)添加文件到设计中. (2)右键文件添加到block design中. (3)连线即可. 以上.
- 关于Vue修改默认的build文件存放的dist路径
原文地址:http://www.cnblogs.com/JimmyBright/p/7681086.html Vue默认build路径是项目的dist目录下,有时候我们可能希望build之后的文件自动 ...
- 如何解决Redis中的key过期问题
最近我们在Redis集群中发现了一个有趣的问题.在花费大量时间进行调试和测试后,通过更改key过期,我们可以将某些集群中的Redis内存使用量减少25%. Twitter内部运行着多个缓存服务.其中一 ...
- Educational Codeforces Round 56 (Rated for Div. 2) D
给你一个无向图 以及点的个数和边 每个节点只能用1 2 3 三个数字 求相邻 两个节点和为奇数 能否构成以及有多少种构成方法 #include<bits/stdc++.h> usin ...
- SQL SERVER 查询所有数据表名称和数据行数
SELECT a.name, b.rows FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE ( a.type ...