预载入和JavaScript Image()对象.doc

上传人:sk****8 文档编号:3125969 上传时间:2019-05-22 格式:DOC 页数:21 大小:228KB
下载 相关 举报
预载入和JavaScript Image()对象.doc_第1页
第1页 / 共21页
预载入和JavaScript Image()对象.doc_第2页
第2页 / 共21页
预载入和JavaScript Image()对象.doc_第3页
第3页 / 共21页
预载入和JavaScript Image()对象.doc_第4页
第4页 / 共21页
预载入和JavaScript Image()对象.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、预载入和 JavaScript Image()对象 2010-04-13 12:37:04| 分类: 默认分类 |字号 订阅 很多 high-res图像真的可以使 Web 站点更加整洁。但是它们也会使站点的访问速度变慢图像是文件,文件使用带宽,带宽直接与等待时间相关。是该了解如何通过一个叫做图像预载入 (preloading)的技巧来提高 Web 站点的访问速度的时候了。图像预载入对于浏览器载入图像 来说,只有在对图像发送一个 HTTP 请求之后,它们才会被浏览器载入,对图像的 HTTP 请求要么使用 img 标记,要么通过方法调用实现。如果使用 JavaScript 脚本来处理在 mouse

2、over 事件时交换图像,或者在一段时间之后自动更改图像,那么在从服务器获取图像时可能要等上几秒钟到几分钟的时间。如果使用一个慢速的 Internet 连接,或者要获取的图像非常大,或者其它一些情况,这种现象就特别明显;这样,延迟就造成你不能达到自己期望的效果。一些浏览器采用一些 措施来缓解这一问题,比如试图通过在本地缓存中存储图像,从而使随后对图像的调用能够立即被满足;但是在图像第一次被调用时依然会存在一些延迟。预载入是 在需要图像之前将其下载到缓存的一种方法。通过这一措施,当真正需要图像时,它就可以被立即从缓存中取出,从而能够立即显示。Image() 对象预载入图像最简单的方法是在 Jav

3、aScript 中实例化一个新 Image() 对象,然后将需要载入的图像的 URL 作为参数传入。假设我们有一个图像叫做http:/ /heavyimagefile.jpg,在用户的鼠标放到一个已经显示的图像之上时,我们希望显示这个图像。为了预载入这一图像从而得到较快的响应时 间,我们简单地创建一个 Image() 对象 heavyImage,然后在 onLoad() 事件处理器中将其同时载入。function preloader()heavyImage = new Image();heavyImage.src = “http:/ 注意,图像标记本身不能处理 onMouseOver() 和

4、onMouseOut() 事件,这就是上例中 标记被包含在一个 标记之中的原因, 标记支持这两个事件类型。使用数组载入多个图像在 实际应用中,我们可能需要预载入多个图像,而不止一个;例如,在一个包含多个图像翻卷的菜单栏中,或者在我们试图创建平滑效果时,都需要预载入多个图像。 其实这并不困难,只要使用 JavaScript 的数组即可实现,如下例所示:function preloader()/ countervar i = 0;/ create objectimageObj = new Image();/ set image listimages = new Array();images0=“i

5、mage1.jpg“images1=“image2.jpg“images2=“image3.jpg“images3=“image4.jpg“/ start preloadingfor(i=0; i在 上面的例子中,我们定义一个变量 i 和一个 Image() 对象 imageObj。然后定义了一个新数组 images,每个数组元素存储要被预载入的图像。最后,创建一个 for() 循环来处理整个数组,并将每个元素赋给 Image() 对象,这样将其载入到缓存中。onLoad() 事件处理器像很多 JavaScript 的其它对象一样,Image() 对象也有一些事件处理器。其中最有用的一个肯定是

6、 onLoad() 处理器,它在图像完全载入之后调用。这个事件处理器可以与一个自定义函数联系起来,以在图像完全载入之后执行一些特定的任务。下面的例子说明了这一点,在 这个例子中,首先在图像载入时显示一个“please wait”屏幕,然后在载入完成时将浏览器转到一个新的 URL。/ create an image objectobjImage = new Image(); / set what happens once the image has loaded objImage.onLoad=imagesLoaded(); / preload the image fileobjImage.sr

7、c=http:/ function invoked on image loadfunction imagesLoaded()document.location.href=index2.html;Please wait, loading images.当然,你还可 以创建一个图像数组然后在其上进行循环操作,预载入每个图像,然后在每一阶段跟踪被载入图像的数目。一旦所有图像载入完毕,根据事件处理器的程序逻辑,它 就可以将浏览器带入下一个页面(或者执行其它任务)。预载入和多状态菜单现在,如何在实际应用程序中使用 所有你学到的理论?下面的这段代码是我最近偶尔编写的一个菜单栏,这个菜单栏由一些按钮(图像链

8、接)组成,每个按钮具有三种状态:正常、悬停和点击。因为 按钮具有多种状态,所以很有必要使用图像预载入,以保证菜单的状态能够快速地反应。清单 A中的代码说明了实现方法。清单 A 中的 HTML 代码设置了一个由四个按钮组成的菜单,每个按钮具有三种状态:正常、悬停和点击。需求如下:# 当鼠标移动到一个正常状态下的按钮之上时,它变为悬停状态。在鼠标离开之后,按钮恢复为正常状态。# 在鼠标点击一个按钮时,按钮变为点击状态。在其它按钮被点击之前,它将保留这一状态。# 如果一个按钮被点击,其它按钮的状态都不能为点击状态。其它按钮只能为悬停状态或正常状态。# 在同一时间只能有一个按钮被点击。# 在同一时间只

9、能有一个按钮处于悬停状态。第一个任务是设置数组,用于保存菜单每个状态的图像。与这些数组元素对应的 img 也在 HTML 文档正文(body)中创建,并顺序地命名。请注意,数组值的索引是从 0开始的,虽然对应的 img 元素的命名是从 1开始的这样就需要在脚本后面的部分进行计算调整。函数 preloadImage() 负责将所有的图像存储到缓存中,以使鼠标运动的响应时间最小。for() 循环用于迭代第一步创建的图像,并在每次迭代中预载入一个图像。函 数 resetAll() 提供了一种快捷的方式来将所有图像重置为它们的正常状态。这是必要的,因为在一个项被点击时,被点击的项变为点击状态之前,菜单

10、中的所有其它项都必须置为 正常状态。函数 setNormal()、setHover() 和 setClick() 用于将特定图像(将图像编号以一个参数传给每个函数)的状态相应地改变为正常、悬停和点击。因为被点击的图像在其它对象被点击之前必须保留它的状态(参见 第二个规则),所以它们临时不响应鼠标移动;这样,setNormal() 和 setHover() 函数的代码就只会改变目前不是处于点击状态的按钮的状态。前面介绍的只是很多预载入图像的一种方法,这种方法可以帮助你提高 JavaScript 效果的响应速度。你可以自由地在你的站点中使用前面给出的方法,如果有必要,你可以根据自己的需要修改上面的

11、代码。祝你好运!avascript image 对象http:/ images文档对象Image是图片对象,而 document.images 是一个数组,包含了文档中所有的图片()。要 引用单个图片,可以用 document.imagesx。如果某图片包含“name”属性,可以使用“document.imagesname”这种方法来引用图片。在 IE 中,如果某图片包含 ID属性,可以直接使用“imageID”来引用图片。单个 Image 对象的属性name; src; lowsrc; width; height; vspace; hspace; border 这些属性跟标记里的同名属性是一

12、样的。在 Netscape 里,只有 src属性可以改,通过对 src 属性赋值,可以实时的更改图片。可以定义 Image :var myImage = new Image(); 或 var myImage = new Image();通常我们用 javascript的 imagePreload 来预读图片一 般这种对象只有一个用:预读图片(preload)。因为当对对象的 src 属性赋值的时候,整个文档的读取、JavaScript 的运行都暂停,让浏览器专心的读取图片。预读图片以后,浏览器的缓存里就有了图片的 Copy,到真正要把图片放到文档中的时候,图片就可以立刻显示了。现在的网页中经常

13、会有一些图像连接,当鼠标指向它的时候,图像换成另外一幅图像,它们 都是先预读图像的。预读少量图片的 JavaScript 例子:var imagePreload = new Image();imagePreload.src = 001.gif;imagePreload.src = 002.gif;imagePreload.src = 003.gif;大量图片预读则用下面的方式:function imagePreload() var imgPreload = new Image();for (i = 0; i 这样我们就可以通过 document.myImage 或者 document.imag

14、e“myImage来访这个对象。image 对象现在一般常用来预加载一些图片,先将其装入 DOM,等到需要的时候,直接调用,省掉等待的时间,直接显示出来。JavaScript 里的 Image 对象可以很好的实现这一需求,在 FF 下通过 alert(img 对象) 可以看到“object HTMLImageElement“内容,Image 对象可以直接利用 append 添加到 body 里面去,调用十分方便。图像对象:建立图像对象:格式:图像对象名称=new Image(宽度,高度)图像对象的属性:border complete height hspace lowsrc name src

15、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=“http:/ show()alert(“body is loaded“);window.onload=show;运行上面的代码后,在不同的

16、浏览器中进行测试,发现 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 中的问题了。例子见 javascript dom 中的 Image对象图像预加载

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。