`
Breese
  • 浏览: 62872 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

js判断一个图片是否已经存在于缓存

 
阅读更多

【解决】js判断一个图片是否已经存在于缓存(兼容IE各版本及FF)

【一】、如下片段是当晚在IE7、8及FF测试执行成功的:

-----------------------------------------------------------------------------------------

如下代码:


01 var url = "http://......../image.jpg";
02 var img = new Image();
03 img.src = url;
04   
05 if(img.complete) {
06     alert('该图片已经存在于缓存之中,不会再去重新下载');
07 }else{
08     alert('图片不存在缓存之中');
09     img.onload = function() {
10         alert('图片下载成功!');
11     }
12 }


使用Image对象的complete属性来判断指定图片是否已经存在缓存之中,当complete属性为true是该图片则已经存在于缓存之中,否则反之。

-----------------------------------------------------------------------------------------

 

 

【二】、今早使用IE9中测试竟然无效,判断img.complete总为false,是的确未缓存么?但之后的load事件并未执行,说明浏览器的确缓存了这些图片。但为何img.complete返回为false呢?

请看如下对img.complete属性的解释

-----------------------------------------------------------------------------------------

img.onload事件和img.complete属性的简介和应用

img.onload是当一张图片被加载完成后所触发的事件
实现图片显示功能;
<div>
<img id="img"/>
</div>

js部分:

 

1 img.src="图片";
2 img.onload=showImg;
3 function showImg()
4 {
5    代码部分。。。。
6  
7 }
对于 complete 属性来讲,IE是根据图片是否显示过来判断,就是说当加载的图片显示出来后,complete 属性的值才为 true ,否则一直是 false ,和以前是否加载过该张图片没有关系,即和缓存没有关系!这里要注意,显示与否和img.style.display无关

JS部分:

 

 

1 alert(img.complete);//返回false
2 img.src="图片";
3 alert(img.complete);//如果上面“图片”获取的时间比JS代码顺序执行的时间要常,那么这里就是false,否则就是true

 

-----------------------------------------------------------------------------------------

 

于是乎,你懂了,为什么在IE9中无效了。。。。再于是,你对发表第一个片段日志的码农想说一句:咋这么不负责呢?(看来,盗版的东西还是不太可靠啊,必须自己动手测试才行)

 

【三】、最终解决方案

 

1 var url = "http://......../image.jpg";
2 var img = new Image();
3 img.src = url;
4  
5 if(img.complete||img.width) {
6     alert('该图片已经存在于缓存之中,不会再去重新下载');
7  
8 }

 

于是你又发现,你竟然只加了一个或判断。。

解释一下,添加img.naturalWidth获取图片原始尺寸,当图片未加载(未缓存、或加载失败)时该值为0,当然如果有缓存的话,返回的就是图片的原始尺寸。

所以img.complete||img.naturalWidth 在js onload事件之前,如果图片已经显示,或获取的尺寸大于零,表示图片onload之前已经加载完成。

 PS:naturalWidth只有高版本浏览器支持(safari,firefox,chrome,与opera10+),低版本的话,直接用img.width

分享到:
评论
1 楼 丁香花 2013-05-31  
楼主写得不错,之前工作上也是遇到这种,后面发现问题很多,直接用占位符。

相关推荐

    js判断图片加载完成后获取图片实际宽高的方法

    在这种情况下,可能需要采取其他策略来判断图片是否已经被缓存并决定如何处理。 以上就是使用JavaScript获取图片实际尺寸的基本方法和注意事项。通过理解这些知识点,我们可以在Web开发中更加灵活和准确地处理图片...

    ASP.NET缓存剖析

    当用户首次访问一个网页时,浏览器会下载所有静态资源(如图片、CSS和JavaScript文件),并将它们存储在本地。随后的访问,浏览器会检查这些文件是否已过期或未改变,如果未改变,浏览器直接从缓存中加载,无需再次...

    js 判断图片是否加载完以及实现图片的预下载

    创建一个Image对象,实现图片的预下载,如果图片已经存在于浏览器缓存,直接调用回调函数,使用onload事件可以判断图片是否加载完成 function loadImage(url, callback) { var img = new Image(); //创建一个Image...

    jQuery:图片缓存 10 jQuery Image Cache Plugins and Scripts

    这个插件(对应压缩包中的`jquery-cacheimage-master`)允许开发者预先加载图片,以便当用户滚动到可见区域时,图片已经存在于浏览器缓存中。它通过创建一个不可见的img元素来预加载图片,一旦图片加载完成,再将其...

    js缓存系统

    本文将深入探讨“js缓存系统”,一个用于提升网页加载速度和交互效率的技术,使用户能够享受到更流畅、更快速的浏览体验。 #### 什么是js缓存系统? js缓存系统是一种基于JavaScript实现的数据存储解决方案,它...

    浏览器HTTP缓存机制

    3. **重新验证**: 如果资源已经过期,浏览器将向服务器发送一个新的请求,附带`If-Modified-Since` 或 `If-None-Match` 头部,询问资源是否已被修改。如果资源未更改,则服务器返回304 Not Modified状态码,表明可以...

    react_native图片缓存2.zip

    在React Native中,图片缓存是一个重要的性能优化策略,它涉及到网络请求、本地存储和UI渲染等多个方面。本文将深入探讨React Native中的图片缓存机制,以及如何有效地管理和利用这一功能来提升应用的用户体验。 ...

    php强制更新图片缓存的方法

    如果cookie存在,函数则输出另一个JavaScript代码片段,该片段负责动态地创建新的`Image`对象,并指定它们的源地址,从而绕过缓存加载新版本的图片。 最后,文章通过实例演示了如何调用`force_reload_file`函数。...

    网站缓存机制的例子

    当用户再次访问同一页面时,浏览器会首先检查这些资源是否已经存在于缓存中,如果存在且未过期,则直接从缓存读取,无需再次向服务器请求。 2. **HTTP缓存机制**:浏览器缓存主要依赖HTTP协议中的Cache-Control、...

    浏览器缓存策略Httpwatch

    在Web应用程序的层次结构中,缓存可以存在于多个级别,如数据库缓存、持久层缓存(如Hibernate的一级和二级缓存)、业务层缓存以及浏览器缓存。浏览器缓存,即HTTP Cache,主要针对用户界面层,对提高用户体验有着...

    Vue+mui实现图片的本地缓存示例代码

    Vue+mui实现图片的本地缓存示例代码 ...本篇文章提供了一个使用Vue+mui实现图片的本地缓存的实例代码,代码中使用了mui框架的plus对象和Vue框架的mutations概念,演示了如何将图片缓存在本地,并提供了错误处理机制。

    网页缓存提取器

    当用户访问一个网页时,浏览器会将网页的各个部分(如图片、脚本、样式表等)存储在本地硬盘的缓存中。下次再次访问相同网页时,浏览器会首先检查这些资源是否在缓存中,如果存在且未过期,就会直接从缓存加载,无需...

    js判断背景图片是否加载成功使用img的width实现

    虽然对于直接的`&lt;img&gt;`标签,我们可以利用`onload`和`onerror`事件来判断图片是否加载成功,但是对于作为背景图片的图像,情况就有所不同。在给定的标题和描述中,提到了一种使用`Image`对象和检查`width`属性来判断...

    JavaScript & jQuery完美判断图片是否加载完毕

    上述代码定义了一个`isImgLoad`函数,该函数通过查找所有类名为`cover`的图片元素,并检查它们的高度是否为0,以此来判断图片是否已经加载。如果所有图片的高度都不为0,则认为图片加载完成,否则通过定时器每隔一段...

    完美兼容多浏览器的js判断图片路径代码汇总

    接下来,我们将详细介绍如何使用JavaScript代码来判断图片路径是否存在于多种浏览器环境中,并提供几种不同方法的详细说明。 首先,我们来看看第一种实现方式。此方法通过创建一个Image对象,并将图片地址设置给该...

    博客旋转图片

    这可以通过JavaScript实现,通过计算图片距离窗口的距离来判断是否需要加载。 4. 响应式设计:考虑到不同设备的屏幕尺寸,旋转图片应具备响应式布局。可以利用CSS3的媒体查询(`media queries`),根据设备屏幕大小...

    一个从数据库取图片而且动态的代码

    总结来说,这个代码示例涵盖了数据库存储、动态查询、流处理、响应式设计等多个方面的知识点,是构建动态、高效Web应用的一个实例。理解并掌握这些技术,对于开发能够处理大量图片数据的现代Web应用至关重要。

    javascript图片预加载完整实例

    实例中的`imgReady`函数则是另一种实现图片预加载的方法,它使用了定时器来不断检查图片尺寸的变化,以此来判断图片是否已经完全加载。这种方法在图片未被缓存时尤其有用,因为浏览器可能不会触发onload事件。此外,...

    JS实现图片预加载无需等待

    如果图片已经存在于缓存中,complete属性为true,这时可以直接调用回调函数,并返回不再处理onload事件。如果图片不在缓存中,则监听onload事件,在事件触发时执行回调函数。 预加载图片的函数通常定义为loadImage...

    ie6下的背景图片缓存

    需要注意的是,虽然上述方法可以解决IE6下的背景图片缓存问题,但鉴于IE6已经是一个非常过时的浏览器,微软已经在2016年停止了对该浏览器的支持,因此在现代web开发中,建议鼓励用户升级到更高版本的浏览器以获得更...

Global site tag (gtag.js) - Google Analytics