newjs new image对象属性 为什么 黑屏

js的 new image()做图片预加载 - jsczxy2 - ITeye技术网站
博客分类:
创建一个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 中会出错。
参考代码:
var img=new Image();
img.onload=function(){alert("img is loaded")};
img.onerror=function(){alert("error!")};
img.src="/img.gif";
function show(){alert("body is loaded");};
window.onload=show;
运行上面的代码后,在不同的浏览器中进行测试,发现 IE 和 FF 是有区别的,在 FF 中,img 对象的加载包含在 body
的加载过程中,既是 img加载完之后,body 才算是加载完毕,触发 window.onload 事件。
在 IE 中,img 对象的加载是不包含在 body 的加载过程之中的,body 加载完毕,window.onload 事件触发时,img
对象可能还未加载结束,img.onload事件会在 window.onload 之后触发。
根据上面的问题,考虑到浏览器的兼容性和网页的加载时间,尽量不要在 Image 对象里放置过多的图片,否则在 FF 下
会影响网页的下载速度。当然如果你在 window.onload 之后,执行预加载函数,就不会有 FF 中的问题了。
可以通过Image对象的complete 属性来检测图像是否加载完成(每个Image对象都有一个complete属性,当图像处于
装载过程中时,该属性值false,当发生了onload、onerror、onabort中任何一个事件后,则表示图像装载过程结束(不管成
没成功),此时complete属性为true)
var img = new Image();
img.src = oImg[0].src = this.src.replace(/small/,"big");
oDiv.style.display = "block";
plete ? oDiv.style.display = "none" : (oImg[0].onload = function() {oDiv.style.display = "none"})
ie 火狐等大众浏览器均支持 Image对象的onload事件。
ie8及以下、opera 不支持onerror事件
下面截取一段Amazon使用的图片预加载js代码可供参考:
amznJQ.available("jQuery", function() {
jQuery(window).load(function() { setTimeout(function() {
var imageAssets = new Array();
var jsCssAssets = new Array();
imageAssets.push("https://images-na.ssl-/images/G/09/x-locale/common/buy-buttons/review-1-click-order._V_.gif");
imageAssets.push("https://images-na.ssl-/images/G/09/x-locale/common/buttons/continue-shopping._V_.gif");
imageAssets.push("https://images-na.ssl-/images/G/09/x-locale/common/buy-buttons/thank-you-elbow._V_.gif");
imageAssets.push("https://images-na.ssl-/images/G/09/x-locale/communities/social/snwicons_v2._V_.png");
imageAssets.push("https://images-na.ssl-/images/G/09/checkout/assets/carrot._V_.gif");
imageAssets.push("https://images-na.ssl-/images/G/09/checkout/thank-you-page/assets/yellow-rounded-corner-sprite._V_.gif");
imageAssets.push("https://images-na.ssl-/images/G/09/checkout/thank-you-page/assets/white-rounded-corner-sprite._V_.gif");
imageAssets.push("https://images-na.ssl-/images/G/09/gno/beacon/BeaconSprite-JP-02._V_.png");
imageAssets.push("https://images-na.ssl-/images/G/09/x-locale/common/transparent-pixel._V_.gif");
imageAssets.push("https://images-na.ssl-/images/I/61AdS2XVkGL._SX35_.jpg");
jsCssAssets.push("https://images-na.ssl-/images/G/01/browser-scripts/jp-site-wide-css-beacon/site-wide-._V1_.css");
jsCssAssets.push("https://images-na.ssl-/images/G/01/browser-scripts/navbarCSSJP-beacon/navbarCSSJP-beacon-min-._V1_.css");
jsCssAssets.push("https://images-na.ssl-/images/G/01/browser-scripts/navbarJS-beacon/navbarJS-beacon-min-._V1_.js");
jsCssAssets.push("https://images-na.ssl-/images/G/01/browser-scripts/site-wide-js-1.2.6-beacon/site-wide-._V1_.js");
// pre-fetching image assets
for (var i=0; i&imageAssets. i++) {
new Image().src = imageAssets[i];
// pre-fetching css and js assets based on different browser types
var isIE = /*@cc_on!@*/0;
var isFireFox = /Firefox/.test(navigator.userAgent);
if (isIE) {
for (var i=0; i&jsCssAssets. i++) {
new Image().src = jsCssAssets[i];
else if (isFireFox) {
for (var i=0; i&jsCssAssets. i++) {
document.createElement("object");
o.data = jsCssAssets[i];
o.width = o.height = 0;
document.body.appendChild(o);
}, 2000); });
浏览 20897
浏览: 671873 次
来自: 常州
renzhengzhi 写道drager 写道用jsoup后解 ...
感觉不对啊,通过实现Runnable接口来实现的线程里,使用T ...
下了一堆,不好使啊,求大神指点!
厉害,终于看到了网上看到一篇文章,链接在此:
内容如下:
经常会用到在网页上交替显示图片。很多推荐的作法是用new Image() 预先装载图片。但是用new Image()真的有用吗?
在后台放一个过滤器捕捉所有 /* 的请求:
doFilter里面简单的打印请求的URL:
HttpServletRequest httpRequest = (HttpServletRequest)&
System.out.println(&requets url: & +httpRequest.getRequestURI());&
chain.doFilter(request, response);&
html代码:
var t1 = new Image();
t1.src = 'ico_unchecked.gif';
function change(){
im.src = t1.
&button onclick=&change()&&change&/button&
&img id=&im& src=&ico_checked.gif&&
可以看到打印了三次url。html页面的请求一次。t1.src设值的时候一次。&img src=&&&的时候一次。我想这时候如果按按钮改变页面上的图片,应该不会再从服务端载图片了,因为缓存里面已经有了嘛。可是点的时候过滤器仍然是有打印出URL!看来只要image对象的src一被改变就会发出请求。那预先装载图片不是等于没用吗?
Javascript部分其实应该这样:
&script&&&&
new Image().src = 'ico_unchecked.gif';
function change(){&&&&
im.src = 'ico_unchecked.gif;
这样的话点击按钮时就不会再加载图片了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:460次
排名:千里之外

我要回帖

更多关于 new image .src 的文章

 

随机推荐