网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考虑流量的话,大可以像pconline一样每个页面只显示一张图片,让用户每看一张图片就需要 重新下载一下整个页面。不过,在web2.0时代,更多人愿意用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片。
知道了一张图片的地址,需要把它在一个固定大小的html容器(可以是div等)里边显示出来,最重要的当然是需要知道这张即将显示的图片的宽和高,然后再结合容器的宽和高,按照一定的缩放比例使图片显示出来。因此,实现图片预加载就成为图片浏览器的核心功能了。
做过图片翻转效果的朋友其实都知道,要让图片轮换的时候不出现等待,最好是先让图片下载到本地,让浏览器缓存起来。这时,一般都会用到js里边的Image对象。一般的手段无非这样:
var img = new Image();
img.src = url;
}
通过调用preLoadImg函数,传入图片的url,就能使图片预先下载下来了。实际上,这里用到的预下载功能也和这基本一致。图片预下载下来后,通过 img的width和height属性,就能知道图片的宽和高了。但是需要考虑到,在做图片浏览器功能时,图片都是实时显示的。比如你点了显示的按钮,这 个时候才会调用上边类似的代码来加载图片。因此,如果你直接用img.width的时候,图片还没有完全下载下来。因此,需要用一些异步的方法,等到图片 下载完毕的时候才会再对img的width和height进行调用。
实现这样的异步方法实际上不难,图片的下载完毕事件也很简单,就是简单的onload事件。因此,我们可以写出下面的代码:
var img = new Image();
img.src = url;
img.onload = function () { // 图片下载完毕时异步调用callback函数。
callback.call(img); // 将callback函数this指针切换为img。
} ;
}
好了,再来写一个测试用例。
alert(this.width);
}
< input type ="button" value ="loadImage" onclick ="loadImage('aaa.jpg',imgLoaded)" />
在firefox中测试一下,发现不错,果然和预想的效果一样,在图片下载后,就会弹出图片的宽度来。无论点击多少次或者刷新结果都一样。
不过,做到这一步,先别高兴太早——还需要考虑一下浏览器的兼容性,于是,赶紧到ie里边测试一下。没错,同样弹出了图片的宽度。但是,再点击load的时候,情况就不一样了,什么反应都没有了。刷新一下,也同样如此。
经过对多个浏览器版本的测试,发现ie6、opera都会这样,而firefox和safari则表现正常。其实,原因也挺简单的,就是因为浏览器的缓存 了。当图片加载过一次以后,如果再有对该图片的请求时,由于浏览器已经缓存住这张图片了,不会再发起一次新的请求,而是直接从缓存中加载过来。对于 firefox和safari,它们视图使这两种加载方式对用户透明,同样会引起图片的onload事件,而ie和opera则忽略了这种同一性,不会引 起图片的onload事件,因此上边的代码在它们里边不能得以实现效果。
怎么办呢?最好的情况是Image可以有一个状态值表明它是否已经载入成功了。从缓存加载的时候,因为不需要等待,这个状态值就直接是表明已经下载了,而从http请求加载时,因为需要等待下载,这个值显示为未完成。这样的话,就可以搞定了。
经过一些分析,终于发现一个为各个浏览器所兼容的Image的属性——complete。所以,在图片onload事件之前先对这个值做一下判断即可。最后,代码变成如下的样子:
var img = new Image(); // 创建一个Image对象,实现图片的预下载
img.src = url;
if (img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数
callback.call(img);
return ; // 直接返回,不用再处理onload事件
}
img.onload = function () { // 图片下载完毕时异步调用callback函数。
callback.call(img); // 将回调函数的this替换为Image对象
} ;
} ;
经过这么一番折腾,总算是让各个浏览器都能满足我们的目标了。虽然代码很简单,但是却把图片浏览器中最核心的问题解决掉了,接下来你所要做的,仅仅是图片如何呈现的问题了。
相关推荐
【图片浏览器——JS】是一种基于JavaScript技术实现的用于展示和浏览图片的应用程序。在网页设计中,图片浏览器常被用来创建交互式的图片展示效果,如幻灯片展示、图片轮播等,为用户提供友好的浏览体验。在这个项目...
这种技术允许网页只在用户实际看到的区域,即浏览器可视范围内加载图片,而不是一次性加载所有图片。这样可以显著减少初次页面加载时的数据量,提高页面加载速度,进而改善用户浏览体验。 图片懒加载的核心原理是...
在性能方面,考虑到大量图片的处理可能会消耗大量系统资源,DEMO可能采用了内存管理和图片预加载策略。对于大图,可能使用了分块加载技术,只加载当前显示部分,其余部分在需要时再加载。这样的设计有助于减少内存...
QueryLoader2的主要功能是通过预加载页面上的图片,并在加载过程中显示自定义的加载动画。这不仅能够告知用户页面正在加载,还能避免用户看到未完全加载的页面,从而提高网站的专业性和用户体验。 使用QueryLoader2...
一些浏览器试图通过在本地缓存中保存这些图片来解决此问题。这样一来可以顺序调用这些图片——但对于首次使用这些图片的时候仍然会存在延时。预装载就是一种在需要图片之前就将图片下载到缓存的技术。采用这样的...
2. **图片加载与显示**:JavaScript 可以通过`<img>`标签或者创建`Image`对象来加载图片,并根据需要显示或隐藏。在图片查看器中,通常会预先加载图片,以便在用户请求时快速响应。 3. **DOM操作**:Document ...
5. **调整图片和多媒体设置**:在浏览器设置中,可以控制是否加载图片和视频等多媒体内容。禁用这些可以加快页面加载速度,但可能导致部分功能无法正常使用。 6. **使用开发者工具**:"世界之窗"提供开发者工具,...
本文将详细介绍基于jQuery的图片预加载插件——ydxLazyLoad.js。 ### 1. 图片延迟加载(懒加载) 懒加载(Lazy Load)是一种优化网页性能的技术,它只加载视窗内或接近视窗的图片,当用户滚动页面时,再加载其他...
此外,可能还涉及到图片的预加载技术,确保图片在用户滚动到视窗范围内时已经准备就绪,避免延迟和卡顿。 土豆网的“豆单”是一个视频集合的概念,这里的“豆单列表”可能是指一系列包含图片和标题的条目,每个条目...
而现代Web 2.0应用倾向于使用JavaScript预加载图片,利用浏览器缓存机制提前下载图片,并在需要时直接显示,避免等待时间。 在实现图片预加载的JavaScript代码中,通常会使用Image对象,这是一个内置的JavaScript...
**JavaScript的图片浏览器——深入解析"imagesee"** 在当今互联网世界中,图像处理和展示是不可或缺的一部分。JavaScript,作为浏览器端最常用的脚本语言,为开发者提供了丰富的功能来实现各种交互式的图像浏览体验...
1. **预加载**:对于关键的图片,如首屏图片,可以在页面加载时预先加载。 2. **使用WebP或JPEG 2000格式**:这些格式能提供更好的压缩效果,减小图片大小,进一步提高加载速度。 3. **异步加载**:避免阻塞主线程,...
通过JavaScript,我们可以实现广告图片的自动化管理,例如自动轮播、手动点击切换、预加载下一张图片等功能,从而提高网页的互动性和视觉吸引力。 【标签】:“Javascript” 【知识点】: 1. **DOM操作**:...
4. 图片加载优化:可能涉及预加载技术,以确保图片在切换时能够快速显示,减少延迟感。 5. 响应式设计:为了兼容不同尺寸的屏幕和浏览器,可能采用了媒体查询或Flexbox/Gird布局等技术。 6. 浏览器兼容性:可能使用...
这种离线存储对于教育领域的e-learning应用特别有益,学生可以在没有网络的环境下继续学习,如观看预加载的视频教程,访问离线阅读材料等。 3. 应用场景与优势 HTML5的离线存储技术提高了移动应用的可用性和用户...
11. **性能优化**:包括预加载技术、资源加载优先级设定、内存管理等,都是提升浏览器性能的关键。 12. **第三方库集成**:为了增强功能,如广告拦截、下载管理等,开发者可能会集成第三方库,如AdBlocker或...
2. **图片预加载(Preloading)**:当用户需要查看原图时,可以先预加载图片,减少点击后等待的时间。预加载可以通过JavaScript的`Image`对象实现,创建一个新的`Image`实例并设置其`src`属性为原图URL,这样图片就...
8. **性能优化**:如缓存机制、内存管理、页面预加载等,这些都是提高浏览器性能的重要方面。 9. **用户交互**:如手势操作、下拉刷新、滑动切换页面等,这些都需要通过监听器和触摸事件来实现。 10. **安全考虑**...
预加载图片时,需要注意浏览器缓存的影响。某些浏览器可能会缓存图片,使得一旦加载过的图片再次请求时不会再发起新的HTTP请求,而是直接从缓存中取。因此,需要一种方法判断图片是否真的被加载到浏览器中。可以使用...
【标题】"VR探索之——aframe框架 在浏览器显示全景照片"揭示了如何利用Web技术展示虚拟现实(VR)内容,特别是通过aframe框架在浏览器上实现全景照片的展示。aframe是Mozilla开源的一个WebVR框架,它基于HTML,使得...