预装载以及JavaScript Image()对象

2016-02-19 13:44 2 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的预装载以及JavaScript Image()对象懂设计的网友们快点来了解吧!

【 tulaoshi.com - Web开发 】

    大量采用高解析度的图像的确可以让一个Web站点容光焕发。但同样也会造成站点访问速度下降——图片是文件,文件就要占用带宽,而带宽直接同访问等待时间相关。现在,让我们来学习一种名为图像预装载(image preloading)的小技巧来提高图像访问速度。

    一些浏览器试图通过在本地缓存中保存这些图片来解决此问题。这样一来可以顺序调用这些图片——但对于首次使用这些图片的时候仍然会存在延时。预装载就是一种在需要图片之前就将图片下载到缓存的技术。采用这样的方式可以使当确实需要显示图片时迅速将其从缓存中恢复回来并立即显示。

Image()对象
最简单的图像预装载办法是使用javascript新建一个新的Image()对象,然后将希望预装载的图片URL传递给此对象。假设我们拥有一个名为/images/NullPic.gif的图片文件,我们希望当用户鼠标指针移动到一张已有的图片上时显示此文件。为了能更快的对此文件进行预装载,我们简单的创建了一个名为heavyImage的新Image() 对象,然后将其通过onLoad()事件句柄同步装载到页面上。

html

head

script language = "JavaScript"

function preloader()

{

     heavyImage = new Image();

     heavyImage.src = "/images/NullPic.gif";

}

/script

/head

body

a href="#"

img name="img01" src="/images/NullPic.gif"/a

/body

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

/html


    注意,图片的标签(tag)本身并不处理onMouseOver()以及onMouseOut()事件,这也正是上面示例中的img标签被包括在a标签中的原因。标签a则包括了对这些事件类型的支持。

通过数组(arrays)装载多个图片

在实际情况中,你很有可能需要预装载不止一张的图片;比如,对于包括多个图片的菜单条,或者希望实现平滑的动画效果。要实现这些并不困难,只需要利用JavaScript的数组,如下例所示:

script language="JavaScript"

 
 
function preloader()

{

     // counter

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

     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[],每一个数组元素将存储需要预装载图片的地址d

function imagesLoaded()

{   

     document.location.href='index2.html';

}

/script

/head

body

Please wait, loading images...

/body

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

/html

当然,你也可以创建一个图片数组,然后循环,对每个元素进行预装载,然后跟踪每个阶段所装载的图片数量。一旦所有的图片都被装载,可以对事件句柄编程,以将浏览器带入下一个阶段(或完成其他的任务)。

预装载和多状态(Multi-State)菜单
现在,如何将刚刚学习到的所有理论知识应用到实际的应用程序中?下面是一段我最近编写的代码——一个包括按钮(图片链接)的菜单条,每一个按钮都可能处于三种状态中的一种:正常、鼠标悬浮和单击。由于按钮具有多种状态,所以必须使用图片预装载来确保菜单能足够快的对状态改变进行响应。列表A中的代码显示了如何实现此功能:

 
列表A中的HTML代码建立了一个包括四个按钮的菜单条,每一个按钮都有三种状态:正常、鼠标悬浮和单击。触发条件如下:

鼠标指针移动到处于正常状态的按钮,按钮则变为鼠标悬浮状态。鼠标移出按钮区域之后,按钮返回到正常状态。

鼠标单击按钮,按钮则变为单击状态。在另一按钮被单击之前,它将保持在此状态。

如果单击了某个按钮,其他任何按钮不能处于单击状态,只能是处于鼠标悬浮或正常状态。

每次只能单击一个按钮。

每次只能有一个按钮处于鼠标悬浮状态。

首要任务是设置存储菜单每种状态图片的数组。数组元素相应的元素img同样在HTML文档主体中创建,并且按照顺序命名。请注意,数组值的索引序列是从0开始,而相应的img元素则从1开始命名——这就要求在脚本的后半段要对相应数值作运算调整。

函数preloadImages()负责将所有图片装载到缓存中,因此留给鼠标的响应时间就会很少。循环for()被用来在第一阶段重复完成图片创建操作,并随后对每个图片进行预装载。

函数resetAll()是将所有图片重置为正常状态的非常方便的方法。这是必需的,因为当菜单上某个按钮被单击的时候,菜单上面其他所有按钮在被单击按钮改变状态前必须恢复到正常状态。

函数setNormal()、setHover()以及setClick()负责将特定图像(图像编号将作为函数参数传递)的图片源改变为相应正常、鼠标悬浮或单击状态的图片源。由于被单击的图像在另一图像被单击之前必须保持状态(参考规则#2),因此被单击图片将暂不接受鼠标动作。函数setNormal()以及setHover()代码仅完成图片不在单击状态的情况下改变图片状态的动作。

以上只是通过使用预装载技术加速JavaScript效果响应多种办法中的一种。在站点中可以使用以上技术,并且根据实际情况进行调整。祝一切顺利!

来源:https://www.tulaoshi.com/n/20160219/1605070.html

延伸阅读
标签: Web开发
公司要求我在一个办公系统上加上提示功能, 我研究了很久,尝试了很多种方法.使用window.open来定时提示, 可是不过多久,客户就不耐烦得说,弹出窗口太繁了.于是我想到了用CreatePopup()的方法,不过问题来了,既然是一个办公系统,要考虑到兼容性问题,不考虑到网景浏览器,我们得考虑 IE 5.0 和 IE 5.5的问题.IE 5.0不支持CreatePopup的方法,还是只...
标签: Web开发
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
标签: Web开发
1)使用构造函数创建对象的实例 在JAVASCRIPT中构造函数和其它面向对象的语言一样,不可以直接调用,在用 new 关键字创建一个对象时自动的调用. 以下是JAVASCRIPT中使用构造函数的新示例。 var myObject = new Object(); // 创建没有属性的通用对象。var myBirthday = new Date(1961, 5, 10); // 创建一个 Date 对象。var myCa...
标签: Web开发
本章描述了文档及其关联对象 document、Layer、Link、Anchor、Area、Image 和 Applet。 表 5.1 本章用到的对象总览。 表 5.1 文档对象 对象 描述
标签: Web开发
JS中定义类的方式有很多种: 1、工厂方式   function Car(){    var ocar = new Object;    ocar.color = "blue";    ocar.doors = 4;    ocar.showColor = function(){     doc...

经验教程

693

收藏

67

精华推荐

Javascript教程:delete删除对象

Javascript教程:delete删除对象

291960297

JavaScript中的Function对象

JavaScript中的Function对象

八零兴伟

javascript时间对象的练习

javascript时间对象的练习

我的男友是黄瓜

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部