大量采用高解析度的图像的确可以让一个Web站点容光焕发。但同样也会造成站点访问速度下降——图片是文件,文件就要占用带宽,而带宽直接同访问等待时间相关。现在,让我们来学习一种名为图像预装载(image preloading)的小技巧来提高图像访问速度。 一些浏览器试图通过在本地缓存中保存这些图片来解决此问题。这样一来可以顺序调用这些图片——但对于首次使用这些图片的时候仍然会存在延时。预装载就是一种在需要图片之前就将图片下载到缓存的技术。采用这样的方式可以使当确实需要显示图片时迅速将其从缓存中恢复回来并立即显示。 Image()对象 <html> <head> <script language = "JavaScript"> function preloader() { heavyImage = new Image(); heavyImage.src = "http://www.okasp.com/techinfo/heavyimagefile.jpg"; } </script> </head> <body onLoad="javascript:preloader()"> <a href="#" onMouseOver="javascript:document.img01.src='http://www.okasp.com/techinfo/heavyimagefile.jpg'"> <img name="img01" src="http://www.okasp.com/techinfo/justanotherfile.jpg"></a> </body> </html>
通过数组(arrays)装载多个图片 在实际情况中,你很有可能需要预装载不止一张的图片;比如,对于包括多个图片的菜单条,或者希望实现平滑的动画效果。要实现这些并不困难,只需要利用JavaScript的数组,如下例所示: <script language="JavaScript"> { // counter var i = 0; // create object imageObj = new Image(); // set image list images = new Array(); images[0]="image1.jpg" images[1]="image2.jpg" images[2]="image3.jpg" images[3]="image4.jpg" // start preloading for(i=0; i<=3; i++) { imageObj.src=images[i]; } } </script> 在上面的例子中,定义了变量i以及名为imageObj的Image()对象。然后定义了新数组images[],每一个数组元素将存储需要预装载图片的地址来源。最后,使用一个for()循环来遍历整个数组,并对每个元素指定Image()对象,以此将图片都预装载到缓存中。 Next page Preloading and the JavaScript Image() object onLoad()事件句柄(event handler) <head> <script language="JavaScript"> // create an image object objImage = new Image();
// set what happens once the image has loaded objImage.onLoad=imagesLoaded();
// preload the image file objImage.src='http://www.okasp.com/techinfo/images/image1n.gif'; // function invoked on image load function imagesLoaded() { document.location.href='index2.html'; } </script> </head> <body> Please wait, loading images... </body> </html> 当然,你也可以创建一个图片数组,然后循环,对每个元素进行预装载,然后跟踪每个阶段所装载的图片数量。一旦所有的图片都被装载,可以对事件句柄编程,以将浏览器带入下一个阶段(或完成其他的任务)。 预装载和多状态(Multi-State)菜单 鼠标指针移动到处于正常状态的按钮,按钮则变为鼠标悬浮状态。鼠标移出按钮区域之后,按钮返回到正常状态。 鼠标单击按钮,按钮则变为单击状态。在另一按钮被单击之前,它将保持在此状态。 如果单击了某个按钮,其他任何按钮不能处于单击状态,只能是处于鼠标悬浮或正常状态。 每次只能单击一个按钮。 每次只能有一个按钮处于鼠标悬浮状态。 首要任务是设置存储菜单每种状态图片的数组。数组元素相应的元素<img>同样在HTML文档主体中创建,并且按照顺序命名。请注意,数组值的索引序列是从0开始,而相应的<img>元素则从1开始命名——这就要求在脚本的后半段要对相应数值作运算调整。 函数preloadImages()负责将所有图片装载到缓存中,因此留给鼠标的响应时间就会很少。循环for()被用来在第一阶段重复完成图片创建操作,并随后对每个图片进行预装载。 函数resetAll()是将所有图片重置为正常状态的非常方便的方法。这是必需的,因为当菜单上某个按钮被单击的时候,菜单上面其他所有按钮在被单击按钮改变状态前必须恢复到正常状态。 函数setNormal()、setHover()以及setClick()负责将特定图像(图像编号将作为函数参数传递)的图片源改变为相应正常、鼠标悬浮或单击状态的图片源。由于被单击的图像在另一图像被单击之前必须保持状态(参考规则#2),因此被单击图片将暂不接受鼠标动作。函数setNormal()以及setHover()代码仅完成图片不在单击状态的情况下改变图片状态的动作。 以上只是通过使用预装载技术加速JavaScript效果响应多种办法中的一种。在站点中可以使用以上技术,并且根据实际情况进行调整。祝一切顺利! |
温馨提示:喜欢本站的话,请收藏一下本站!