js的 image 属性 和一个预加载模块
创建一个Image对象:var a=new Image(); 定义Image对象的src: a.src=”xxx.gif”; 这样做就相当于给浏览器缓存了一张图片。
图像对象:
建立图像对象:图像对象名称=new Image([宽度],[高度])
图像对象的属性: border complete height hspace lowsrc name src vspace width
图像对象的事件:onabort onerror onkeydown onkeypress onkeyup onload
需要注意的是:src 属性一定要写到 onload 的后面,否则程序在 IE 中会出错。
'use strict'; /**
* 预加载图片函数
* @param {Object} images 加载图片的数组或者对象
* @param {Object} callback 全部图片加载完毕后调用的回调函数
* @param {Object} timeout 加载超时的时长
*/
function loadImage(images,callback,timeout){
//加载完成图片的计数器
var count = ;
//全部图片加载成功的一个标志位
var success = true;
//超时timer的id
var timeoutId = ;
//是否加载超时的标志位
var isTimeout = false;
//对图片数组(或者对象)进行遍历
for(var key in images) {
//过滤prototype上的属性
if(!images.hasOwnProperty(key)){
continue;
}
//获取每个图片元素
//期望格式是个object:{src:xxx} var item = images[key]; if(typeof item === 'string'){
item = iamges[key] = {src:item};
}
//如果格式不满足期望,则丢弃那条向下遍历
if( !item || !item.src){
continue;
} //计数+1
count++; //设置图片元素的id
item.id = '__img__' + key + getId();
//设置图片元素的img,它是一个Image对象
item.img = window[item.id] = new Image(); doLoad(item);
}
//遍历完成如果计数位0,则直接返回
if(!count){
callback(success);
}else if(timeout) {
timeoutId = setTimeout(onTimeout,timeout);
} /**
* 真正进行图片加载的函数
* @param {Object} item 图片元素对象
*/
function doLoad(item){
item.status = 'loading';
var img = item.img;
//定义图片加载成功的回调函数
img.onload = function(){
success = success & true;
item.status = 'loaded';
done();
}; //定义图片加载失败的回调函数
img.onerror = function(){
success = false;
item.status = 'error';
done();
}; // 发起了一个http(s)发起请求
img.src = item.src;
/**
* 每张图片加载完成的回调函数
*/
function done(){
img.onload = img.onerror = null;
try{
delete window[item.id];
}catch(e){ }
/**
* 每张图片加载完成,计数器减一,当所有图片加载完成且没有超时的情况清除超时技数器
*/
if(!--count && !isTimeout) {
clearTimeout(timeoutId);
callback(success);
} }
}
/**
* 超时函数
*/
function onTimeout(){
isTimeout = true ;
callback (false)
}
} var __id = ;
function getId(){
return ++_id;
}
module.exports = loadImage;
js的 image 属性 和一个预加载模块的更多相关文章
- 详解HTML5中rel属性的prefetch预加载功能使用
在HTML5中,有个很有用但常被忽略的特性,就是预先加载(prefetch),它的原理是: 利用浏览器的空闲时间去先下载用户指定需要的内容,然后缓存起来,这样用户下次加载时,就直接从缓存中取出来,效率 ...
- js中的预加载与懒加载(延迟加载)
js中加载分两种:预加载与延迟加载 一. 预加载,增强用户的体验,但会加载服务器的负担.一般会使用多种 CSS(background).JS(Image).HTML(<img />) . ...
- Javascript图片预加载详解
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- 利用简洁的图片预加载组件提升h5移动页面的用户体验
在做h5移动页面,相信大家一定碰到过页面已经打开,但是里面的图片还未加载出来的情况,这种问题虽然不影响页面的功能,但是不利于用户体验.抛开网速的原因,解决这个问题有多方面的思路:最基本的,要从http ...
- 利用CSS、JavaScript及Ajax实现图片预加载的三大方法
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- CSS和JavaScript以及Ajax实现预加载图片的方法及优缺点分析
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画 廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发 ...
- 运用预加载提升H5移动页面的用户体验
原文地址:http://www.grycheng.com/?p=2188 在做h5移动页面,相信大家一定碰到过页面已经打开,但是里面的图片还未加载出来的情况,这种问题虽然不影响页面的功能,但是不利于用 ...
- 利用CSS、JavaScript及Ajax实现图片预加载的三大方法(转)
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- 移动端-H5预加载页面
利用简洁的图片预加载组件提升h5移动页面的用户体验 阅读目录 1. 实现思路 2. demo说明 3. 注意事项 4. 总结 在 做h5移动页面,相信大家一定碰到过页面已经打开,但是里面的图片还未 ...
随机推荐
- fread与fwrite的自我理解
size_t fread(void* buff,size_t size,size_t count,FILE* stream) 参数1:读取到该buff所指向的内存空间中 参数2:每次读取的字节数,单 ...
- 。。。Ajax的回调函数function(data)中,data的返回类型。。。
今天在做项目的过程中,突然发现了一个有趣的问题,那就是我在Java服务器端写程序,String result = "0";然后通过out.println(result),将resu ...
- 反射认识_04_反射调用类方法Method
包1: package ReflectionMethod; public class ReflectionMethod { String str1="str1"; public v ...
- 一个标准的ECharts代码
<!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</t ...
- java文件下载 rest
/** * 返回文件二进制 * */ @GET @Path("/excel") @Produces("application/vnd.ms-excel; charset= ...
- mongo导出导入
导出例子: mongoexport -d test -c test -q '{sn:1}' -o test.dat 导入例子: mongoimport -d test -c students stud ...
- 夺命雷公狗---node.js---20之项目的构建在node+express+mongo的博客项目5mongodb在项目中实现添加数据
我们上一步就引入了mongodb了,那么下一步就要开始写添加数据了,不过有个前提是先将表单的数据处理好: 最基本的这部现在已经成功了,因为最基本的这步就是先将表单处的提交方式和提交地址给处理好,这里和 ...
- zw版_zw中文增强版Halcon官方Delphi例程
[<zw版·delphi与halcon系列原创教程>zw版_zw中文增强版Halcon官方Delphi例程 源码下载:http://files.cnblogs.com/files/ziwa ...
- [crunch bang]在Crunch Bang安装和设置fcitx(小企鹅输入法)
试来试去还是喜欢小企鹅多一些 第一步:在终端下 sudo apt−get install fcitx fcitx−sunpinyin fcitx-ui-classic fcitx-table sud ...
- QTP11.00安装+破解详细教程
一. 安装过程 首先双击setup.exe文件,选择“QuickTest Professional安装程序” 此时会查看你机子上面是否有QTP需要,但是机子上没有的组件, 跟着先安装这两个组 ...