搜索
首页web前端js教程JS实现图片预加载无需等待_javascript技巧

网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考虑流量的话,大可以像pconline一样每个页面只显示一张图片,让用户每看一张图片就需要重新下载一下整个页面。不过,在web2.0时代,更多人愿意用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片。

知道了一张图片的地址,需要把它在一个固定大小的html容器(可以是div等)里边显示出来,最重要的当然是需要知道这张即将显示的图片的宽和高,然后再结合容器的宽和高,按照一定的缩放比例使图片显示出来。因此,实现图片预加载就成为图片浏览器的核心功能了。

做过图片翻转效果的朋友其实都知道,要让图片轮换的时候不出现等待,最好是先让图片下载到本地,让浏览器缓存起来。这时,一般都会用到js里边的Image对象。一般的手段无非这样:

复制代码 代码如下:

function preLoadImg(url) {
var img = new Image();
img.src = url;
}

通过调用preLoadImg函数,传入图片的url,就能使图片预先下载下来了。实际上,这里用到的预下载功能也和这基本一致。图片预下载下来后,通过 img的width和height属性,就能知道图片的宽和高了。但是需要考虑到,在做图片浏览器功能时,图片都是实时显示的。比如你点了显示的按钮,这个时候才会调用上边类似的代码来加载图片。因此,如果你直接用img.width的时候,图片还没有完全下载下来。因此,需要用一些异步的方法,等到图片下载完毕的时候才会再对img的width和height进行调用。

实现这样的异步方法实际上不难,图片的下载完毕事件也很简单,就是简单的onload事件。因此,我们可以写出下面的代码:
复制代码 代码如下:

function loadImage(url, callback) {
var img = new Image();
img.src = url;
img.onload = function(){ //图片下载完毕时异步调用callback函数。
callback.call(img); // 将callback函数this指针切换为img。
};
}

好了,再来写一个测试用例。
复制代码 代码如下:

function imgLoaded(){
alert(this.width);
}


在firefox中测试一下,发现不错,果然和预想的效果一样,在图片下载后,就会弹出图片的宽度来。无论点击多少次或者刷新结果都一样。

不过,做到这一步,先别高兴太早——还需要考虑一下浏览器的兼容性,于是,赶紧到ie里边测试一下。没错,同样弹出了图片的宽度。但是,再点击load的时候,情况就不一样了,什么反应都没有了。刷新一下,也同样如此。

经过对多个浏览器版本的测试,发现ie6、opera都会这样,而firefox和safari则表现正常。其实,原因也挺简单的,就是因为浏览器的缓存了。当图片加载过一次以后,如果再有对该图片的请求时,由于浏览器已经缓存住这张图片了,不会再发起一次新的请求,而是直接从缓存中加载过来。对于 firefox和safari,它们视图使这两种加载方式对用户透明,同样会引起图片的onload事件,而ie和opera则忽略了这种同一性,不会引起图片的onload事件,因此上边的代码在它们里边不能得以实现效果。

怎么办呢?最好的情况是Image可以有一个状态值表明它是否已经载入成功了。从缓存加载的时候,因为不需要等待,这个状态值就直接是表明已经下载了,而从http请求加载时,因为需要等待下载,这个值显示为未完成。这样的话,就可以搞定了。

经过一些分析,终于发现一个为各个浏览器所兼容的Image的属性——complete。所以,在图片onload事件之前先对这个值做一下判断即可。最后,代码变成如下的样子:
复制代码 代码如下:

function loadImage(url, callback) {
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 瀹
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何优化Vue开发中的图片加载失败显示问题如何优化Vue开发中的图片加载失败显示问题Jun 29, 2023 am 10:51 AM

如何优化Vue开发中的图片加载失败显示问题在Vue开发中,经常会遇到需要加载图片的场景。然而,由于网络不稳定或者图片不存在的原因,很有可能会出现图片加载失败的情况。这样的问题不仅影响了用户体验,还可能导致页面呈现混乱或者出现空白的情况。为了解决这个问题,本文将分享一些优化Vue开发中图片加载失败显示的方法。使用默认图片:在Vue组件中,可以设置一个默认图片,

如何解决Edge浏览器无法加载图片的问题如何解决Edge浏览器无法加载图片的问题Jan 30, 2024 am 10:54 AM

edge浏览器图片加载不出来怎么办?edge浏览器是很多小伙伴用于上网的默认浏览器,可以为用户们提供便捷的上网服务。但有些小伙伴在上网的过程中,发现edge浏览器的网页中图片无法正常加载出来,在排除了网络问题之后,最大的可能是设置的问题,如果你想解决这个问题的话,就随小编一起来看看图片无法显示的解决方法吧。edge浏览器图片加载不出来怎么办1、点击左下角开始,右击“Microsoftedge”。2、选择“更多”,点击“应用设置”。3、下滑找到“图片”。4、将图片下方的开关打开即可。

Vue懒加载图片失败问题解决方案Vue懒加载图片失败问题解决方案Jun 29, 2023 pm 10:42 PM

Vue开发中如何解决图片懒加载失败的问题懒加载(LazyLoad)是现代Web开发中常用的优化技术之一,特别在加载大量图片和资源时,可以有效减轻页面的负担,提升用户体验。然而,在使用Vue框架进行开发时,有时候我们可能会遇到图片懒加载失败的问题。本文将介绍一些常见的问题和解决方案,以便开发者能够更好地应对这个问题。图片资源路径错误首先,我们需要确保图片资源

vue的keep-alive组件如何优化图片加载体验vue的keep-alive组件如何优化图片加载体验Jul 22, 2023 am 08:09 AM

Vue是一种流行的JavaScript框架,可以帮助我们构建交互式的Web应用程序。在开发过程中,我们常常遇到需要加载大量图片的情况,而这往往会导致页面加载速度变慢,影响用户体验。本文将介绍如何利用Vue的keep-alive组件来优化图片的加载体验。为什么需要优化图片加载体验?图片在网页中扮演着非常重要的角色,可以增加网页的吸引力和可读性,提升用户体验。然

Win11微软商店图片加载不出来如何解决Win11微软商店图片加载不出来如何解决Jun 29, 2023 pm 03:43 PM

  Win11微软商店图片加载不出来如何解决?在微软商店里,我们可以轻松地搜索下载各种软件和游戏,但是近期有部分Win11用户发现电脑上的微软商店图片加载不出来了,十分影响使用体验,那么对于这一情况有没有什么方法可以解决呢?下面我们来看看小编是如何解决的吧。  Win11微软商店图片加载不出来的解决方法  1、右击下方的开始菜单进入。  2、点击选择网络和Internet进入。  3、可以查看自己的网络是否连接正常。  4、可以将网络配置从专用改成公用即可。

如何使用PHP开发缓存优化图片加载速度如何使用PHP开发缓存优化图片加载速度Nov 08, 2023 pm 05:58 PM

如何使用PHP开发缓存优化图片加载速度随着互联网的快速发展,网页加载速度成为用户体验的重要因素之一。而图片加载速度是影响网页加载速度的重要因素之一。为了加速图片的加载,我们可以使用PHP开发缓存来优化图片加载速度。本文将介绍如何使用PHP开发缓存来优化图片加载速度,并提供具体的代码示例。一、缓存的原理缓存是一种存储数据的技术,通过将数据临时保存在高速存储器中

解决网页图片无法加载的方法解决网页图片无法加载的方法Jan 08, 2024 pm 01:45 PM

很多小伙伴在用打开网页的时候,发现网页的图片加载不出来,显示一个×的标志,这是怎么一回事呢?可能是你的网速过低,等待一会就可以了,也可能是设置里面没有开启相关模式,下面就带来了网页图片加载不出来解决方法一起来看看吧。网页图片加载不出来:1、网速问题网页显示不出图片有可能是因为电脑的网速比较慢,电脑中开启的软件比较多,而我们访问的图片比较大,这就可能因为加载超时,导致图片显示不出来,可以将比较占网速的软件将关掉,可以去任务管理器查看一下。2、访问人数过多网页显示不出图片还有可能是因为我们访问的网页

win7浏览图片加载不出来怎么办win7浏览图片加载不出来怎么办Jul 19, 2023 pm 02:57 PM

当你浏览网页时,你有没有遇到过图片无法加载的情况,那么原因是什么呢?如果win7浏览图片无法加载怎么办?有这个问题的用户,看看下面小边为您分享win7浏览图片无法加载的解决方案。1.首先,我们首先确定网页是否设置了不显示图片。我们点击浏览器右上角的工具-Internet选项,然后切换到高级。如果我们把它拖到多媒体上,就会有一个显示图片的选项,这需要在前面勾选。2.接下来,让我们检查flashplayer版本是否是最新版本。检测方法。点击开始,然后选择控制面板,在控制面板中找到flashplaye

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),