`

js 实现图片预加载 (js操作 Image对象属性complete ,事件onload 异步加载...

阅读更多
通过js操纵DOM很多情况下都是为了实现和当前页html元素的异步载入,我谈谈对Image对象的一些认识。
看个例子:
<input type="button" name="" value="载入图片" onclick="addImg('tt.jpg')" />
<script type="text/javascript">
<!--
    function addImg(isrc)
    {
        var Img = new Image();
        Img.src = isrc;
        Img.onload = function ()
        {
              document.body.appendChild(Img);
        }
    }
//-->
</script>
当包含上述代码的页面打开时并不载入 “tt.jpg” ,当点击按钮时候才载入。当载入完成后触发onload事件显示到页面上。如果你是第一次加载 “tt.jpg" 这张图片的话,运行正常。点击按钮加载并显示一张图片,如果重复点击会怎么样呢?
IE、Opera中,除了第一次加载 图片时候显示正常,之后再点击就没有反应了,刷新也一样。难道它们只触发一次 ”onload“ 事件?是缓存机制?
FF、Chrom中,每点击一次加载一张该图片。

稍微修改下:
<input type="button" name="" value="载入图片" onclick="addImg('tt.jpg')" />
<script type="text/javascript">
<!--
    function addImg(isrc)
    {
        var Img = new Image();
        Img.onload = function ()
        {
              document.body.appendChild(Img);
        }
        Img.src = isrc;
    }
//-->
</script>
运行后发现,奇怪的事情发生了。所有的浏览器都一致了,都是每点击一次加载一张图片。这又是什么原因?由此可以见 IE、Opera 执行过程中并不是只触发一次 onload 事件!

联想一下 Image 对象的一些属性看看,complete、readyState(IE专属值[uninitialized,complete]) (为防止缓存影响效果请更换图片名称!)
<input type="button" name="" value="complete" onclick='alert("complete : "+Img.complete +"\nreadyState : "+Img.readyState)' />
<input type="button" name="" value="载入图片" onclick="addImg('mtm.jpg')" />
<script type="text/javascript">
<!--
    var Img;
    function addImg(isrc)
    {
        Img = new Image();
        //Img.src = isrc;
        Img.onload = function ()
        {
            alert("complete : "+Img.complete +"\nreadyState : "+Img.readyState)
            document.body.appendChild(Img);
        }
        Img.src = isrc;
    }
//-->
</script>
经过以上测试,可以看出一些不同点,对于 complete 属性来讲,IE是根据图片是否显示过来判断,就是说当加载的图片显示出来后,complete 属性的值才为 true ,否则一直是 false ,和以前是否加载过该张图片没有关系,即和缓存没有关系!但是其它浏览器表现出来的确不一样,只要以前加载过该图,浏览器有缓存,complete 就为 true ,这和IE的 readyState 属性的表现一致!
至此,可以肯定的是所有的浏览器都会缓存图片!可是上面的问题到底是什么原因导致的呢?
众所周知,从缓存里加载东西的速度是很快的,那么在
...
Img.src = isrc;
Img.onload = ...
...
的过程中,难道 IE、Opera 加载的速度快到,来不及追加事件?

这回加载一张根本不存在的图片看看效果:
<input type="button" name="" value="complete" onclick='alert("complete : "+Imgttmt.complete +"\nreadyState : "+Imgttmt.readyState)' />
<input type="button" name="" value="载入图片" onclick="addImg('mtmttyt.jpg')" />
<script type="text/javascript">
<!--
    var Imgttmt;
    function addImg(isrc)
    {
        Imgttmt = new Image();
        Imgttmt.src = isrc;
        alert("complete : "+Imgttmt.complete +"\nreadyState : "+Imgttmt.readyState)
        Imgttmt.onload = function ()
        {
            alert("impossible")
        }
    }
//-->
</script>
可以肯定的是所有浏览器都不触发 onload 事件。从是否缓存或已经加载过图片的角度讲,IE、Opera表现正常,complete 始终为 false ;IE的 readyState 始终为uninitialized 。令人疑惑的是FF,其中 Imgttmt.complete 的值一直是 true ;更令人困惑的是 Chrom,它是在最初 new Imgttmt() 的时候 Imgttmt.complete 值为 false。而之后 Imgttmt.complete 值就一直为 true 了!如果换一张从来没有加载过的图片,FF和Chrom 的行为就一致了,都是一开始加载时, Imgttmt.complete 值为false, 之后为 true!

测试的过程中还发现,脚本的执行顺序的确会影响到类似于 onload 等事件的追加,如果在其显示后在追加事件就没有什么实际意义了!基于 javascript 这种解释性语言的特性,在追加事件的时候一定要注意把事件追加在触发该事件的句柄之前。 

 

分享到:
评论

相关推荐

    js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)

    总结来说,通过JavaScript实现图片预加载的关键点包括正确使用Image对象,处理onload事件以及正确理解并使用complete和readyState属性。此外,要注意不同浏览器间的缓存行为差异,可能需要根据实际情况进行适当处理...

    JS实现图片预加载

    "JS实现图片预加载" 图片预加载是指在浏览器中预先加载图片,以提高用户体验和减少流量...通过使用 Image 对象和 onload 事件,可以实现图片的预下载,并且可以结合容器的宽和高,按照一定的缩放比例使图片显示出来。

    图片预加载js

    JavaScript中,我们可以创建一个新的`Image`对象,并设置其`src`属性为要预加载的图片URL。例如: ```javascript function preloadImage(url) { var img = new Image(); img.src = url; } preloadImage('path/to/...

    js的image onload事件使用遇到的问题

    标题中所提到的知识点是“js的image onload事件使用遇到的问题”,这涉及到JavaScript中Image对象的onload事件处理。在Web前端开发中,onload事件是一个非常重要的概念,主要用于处理图片或者其他资源加载完成后的...

    图片预加载特效

    2. **异步预加载**:通过JavaScript创建`Image`对象并设置其`src`属性,这样可以在后台加载图片,不会阻塞页面渲染。例如: ```javascript var img = new Image(); img.src = 'path/to/image.jpg'; ``` 3. **...

    js图片预加载

    JavaScript图片预加载是一种优化网页性能的技术,特别是在网页中包含大量图片或者有动态加载图片需求时。这种方法通过在用户实际查看图片之前,提前加载图片资源,减少用户等待时间,提升用户体验。这里我们将深入...

    JavaScript与Image加载事件(onload)、加载状态(complete)

    在网页开发中,我们经常需要动态加载图片,这时就需要利用到Image对象的加载事件(onload)和加载状态(complete)属性。这两个特性可以帮助我们实时监控图片的加载进度,从而实现更灵活的交互效果。 首先,`onload...

    【JavaScript源代码】javascript实现图片预加载和懒加载.docx

    ### JavaScript 实现图片预加载与懒加载技术解析 #### 一、引言 在现代Web开发中,优化页面加载速度及提升用户体验是非常重要的环节。图片作为网页内容的重要组成部分,其加载方式直接影响着整个页面的性能表现。...

    Jquery实例--图片预加载

    首先,jQuery是一个广泛使用的JavaScript库,它简化了JavaScript的DOM操作、事件处理、动画制作等任务。在本例中,我们使用的jQuery版本为1.3,虽然这是一个较旧的版本,但其核心功能依然足够完成图片预加载的任务。...

    jQuery实现的图片异步加载和预加载特效源码.zip

    1. **使用`new Image()`对象**:创建一个新的Image对象,设置其src属性为需要预加载的图片URL,图片会被加载到浏览器缓存。 2. **监听图片加载状态**:使用`onload`和`onerror`事件来确认图片是否成功加载。 3. **...

    图片预加载loading

    这个函数会遍历图片列表,为每张图片创建一个新的`Image`对象,然后将图片的URL设置为`src`属性。这样,浏览器就会在后台开始下载这些图片,而不会阻塞其他页面元素的加载。 例如,以下是一个简单的预加载函数示例...

    图片预加载学习(一):无序加载之图片切换

    - **异步加载**:利用JavaScript创建Image对象,设置图片URL,并监听其`onload`事件,当图片加载完成后触发事件处理函数。 - **利用CSS背景图像**:通过CSS设置元素的背景图像为待加载图片,浏览器会在渲染页面时...

    javascript事件加载与预加载共9页.pdf.zip

    事件加载和预加载是JavaScript优化用户体验的关键技术。本文将深入探讨这两个概念,并提供相关实践策略。 首先,我们来理解“事件加载”。在网页中,事件是指用户与页面交互时发生的事情,比如点击按钮、滚动页面等...

    图片预加载的js

    基本的JavaScript图片预加载方式是创建一个`&lt;img&gt;`元素,设置其`src`属性为待加载图片的URL,然后将其添加到DOM中。如下所示: ```javascript function preloadImage(url) { var img = new Image(); img.src = ...

    图片预加载学习(二):有序加载之图片切换

    2. 图片对象:使用HTML `&lt;img&gt;` 标签的 `src` 属性和 `onload` 事件,以及JavaScript中的 `Image` 对象进行预加载。 3. 队列管理:有序加载可能涉及到一个队列系统,将图片按顺序加入队列,然后逐个加载。 4. 进度...

    wpf 异步加载图片完成后再显示

    - 在ViewModel中创建一个异步加载图片的方法,该方法返回一个包含图片的`ImageSource`对象。 - ViewModel中声明一个依赖属性,用于存储图片源。当图片加载完成时,通过数据绑定更新UI中的Image控件的Source属性。 ...

    图片预加载 Loading效果。

    - 使用JavaScript的`Image`对象创建一个新的图片实例,设置其`src`属性为数组中的一个URL,然后监听`onload`事件。 - 当图片加载完成时,触发`onload`事件,更新加载进度并检查是否所有图片都已经加载完成。 - 在...

    javascript图片预加载完整实例

    JavaScript图片预加载可以分为不同的方式,其中最常见的是使用JavaScript来创建一个Image对象,并将其src属性设置为要加载的图片地址,这种方式可以异步地下载图片而不会影响页面其他元素的加载。 在上述给出的实例...

    PreLoad一个图像预加载插件以实现有序加载和无序加载

    1. **创建 Image 对象**:JavaScript 的 Image 对象可以用来在后台加载图片,不阻塞页面的其他操作。PreLoad 插件会为每个需要预加载的图片创建一个新的 Image 对象,并设置其 `src` 属性为图片的 URL。 2. **监听...

Global site tag (gtag.js) - Google Analytics