博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浏览器image对象相关总结,(含PC浏览器,移动浏览器)
阅读量:5946 次
发布时间:2019-06-19

本文共 2824 字,大约阅读时间需要 9 分钟。

网上读到过很多关于image的问题描述,大概如下:

1:怎么判断是否加载完成

  关于IE中图片有浏览器缓存onload不再触发问题。

  onload执行中IE对complete属性的修改顺序问题。

  onload中关于IE私有属性readyState的处理问题。

2:在onload之前获取image大小

在此做一个总结归纳,测试包含PC浏览器与移动浏览器:

  PC浏览器:IE6 IE7 IE8 IE9 FF CH OP SA

  移动浏览器:安卓:UC8.2 8.5 8.6 8.7 QQ3.5 3602.5 operamini 自带(2.1)  

        苹果(ios5 ios6):Safari UC QQ

        WP:IE9 UC2.5

  W3C规范中有如下定义:

  属性 complete:返回浏览器是否已完成对图像的加载。naturalWidth/naturalHeight:获取图像的大小(Opera不支持)

  方法 onload:当图像装载完毕时调用的事件句柄。onerror:在装载图像的过程中发生错误时调用的事件句柄。onabort:当用户放弃图像的装载时调用的事件句柄。

  IE有一个私有属性:readyState

  下面测试代码:

1 (function(){ 2         var img=new Image(),onready=null,newWidth=0,newHeight= 0 3                 ,obj=document.getElementById('msg'),imgDate= 0; 4         img.src = 'http://www.google.com.hk/intl/zh-CN/images/logo_cn.png'; 5  6         /* 7             1:PC浏览器IE6-8中,图片在有浏览器的情况下,不再响应onload是存在得。所以统一采用判断complete的值判断是否从缓存中直接读取。 8         */ 9         if(img.complete){10             obj.innerHTML+='from cache
';11 img = img.onload = img.onerror = null;12 }13 14 /*15 2:所有浏览器中,在图片load之前确实可以获取到图片的宽与高值。16 */17 onready=function(){18 if(newWidth==img.width||newHeight==img.height){19 setTimeout(onready,13);20 }else{21 imgDate=new Date().getTime();22 }23 obj.innerHTML+='newWidth:'+img.width+';newHeight:'+img.height+';'+imgDate+'
';24 obj.innerHTML+='naturalWidth:'+img.naturalWidth+';naturalHeight:'+img.naturalHeight+'
';25 }26 27 onready();28 29 img.οnlοad=function(){30 /*31 3:PC浏览器IE6-8中,complete的值是在load之后进行修改得,其它浏览器是在之前。32 */33 /*34 4:此时会有一些再判断35 比如PC浏览器IE6-8中,判断!img.complete 36 其它浏览器中通过判断 typeof this.prevImageArr[i].naturalWidth !== "undefined" && this.prevImageArr[i].naturalWidth == 037 然后回调执行加载38 */39 obj.innerHTML+=img.complete+'
';40 obj.innerHTML+='IEreadystate:'+img.readystate+'
';41 obj.innerHTML+='naturalWidth:'+img.naturalWidth+'
';42 obj.innerHTML+='onload'+':'+(new Date().getTime()-imgDate)+'
';43 img = img.onload = img.onerror = null;// IE gif动画会循环执行onload44 }45 46 /*47 疑问:很多人有这种写法,但是目前我只发现IE中onreadystatechange执行比onload要快,其它不太明白什么意思了,有知道的朋友可以告诉下。48 img.onload = img.onreadystatechange = function () {49 //6:个人感觉如果判断因为PC浏览器中50 if (!img.readyState || img.readyState == "loaded" || img.readyState == "complete") {51 img.onload = img.onreadystatechange = null;52 }53 }54 */55 })();

 

转载于:https://www.cnblogs.com/claresun/archive/2012/10/26/2741577.html

你可能感兴趣的文章
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>
JavaScript标准库系列——RegExp对象(三)
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
关于缓存命中率的几个关键问题!
查看>>
oracle中create table with as和insert into with as语句
查看>>
kafka连接异常
查看>>
11g废弃的Hint - BYPASS_UJVC
查看>>
为什么工业控制系统需要安全防护?
查看>>
Mongodb部署记录[3]-主从搭建
查看>>
hive sql操作
查看>>
tomcat 深度优化
查看>>
127 - "Accordian" Patience
查看>>
阿里云CentOS7安装Oracle11GR2
查看>>
nginc+memcache
查看>>
php正则匹配utf-8编码的中文汉字
查看>>
MemCache在Windows环境下的搭建及启动
查看>>
linux下crontab实现定时服务详解
查看>>
返回顶部JS
查看>>
Numpy中的random模块中的seed方法的作用
查看>>
史上最全的数据库面试题,不看绝对后悔
查看>>