html+js实现图片预加载(异步加载)

在前端设计时,为了让某县页面的图片即使缓存到浏览器中,一般使用预加载技术,但更为确切的应该称为异步加载,因为对线程不会造成阻塞。

核心代码

<script type="text/javascript">

  function loadImage(id,src,callback)
  {
	var img = new window.Image();
	//当图片成功加载到浏览器缓存
	img.onload =function(evt)  
	{
		if(typeof(img.readyState)==‘undefined‘)
		{
		    img.readyState = ‘undefined‘;
		}
		//在IE8以及以下版本中需要判断readyState而不是complete
		if ((img.readyState==‘complete‘||img.readyState=="loaded")||img.complete==true) 
		{ 
		   callback({‘msg‘:‘ok‘,‘src‘:src,‘id‘:id});
		}else{
		   img.onreadystatechange(e);
		}
	};
	img.onerror = function(evt)
	 {
	    callback({‘msg‘:‘error‘,‘id‘:id});
	 }
                       
	img.onreadystatechange = function(e)
	{ 
	    //次方法只有IE8以及一下版本会调用
	} 
   img.src=src;
}
</script>

深情的测试一下吧。

<!doctype html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>异步(预加载)加载图片</title>
		<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1.0" />
	</head>
	<body>

 <img src="loading.gif" id="display_images">
<script type="text/javascript">

  function loadImage(id,src,callback)
  {
	var img = new window.Image();
	//当图片成功加载到浏览器缓存
	img.onload =function(evt)  
	{
		if(typeof(img.readyState)==‘undefined‘)
		{
			img.readyState = ‘undefined‘;
		}
		//在IE8以及以下版本中需要判断readyState而不是complete
		if ((img.readyState==‘complete‘||img.readyState=="loaded")||img.complete==true) 
		{ 
		    callback({‘msg‘:‘ok‘,‘src‘:src,‘id‘:id});
		}else{
		    img.onreadystatechange(e);
		}
	};
	img.onerror = function(evt)
	 {
		callback({‘msg‘:‘error‘,‘id‘:id});
	 }
                       
	img.onreadystatechange = function(e)
	{ 
		  //次方法只有IE8以及一下版本会调用
	} 
	img.src=src;
}

var loadResult = function(data)
{
	data =   data ||{} ;
	if(typeof(data.msg)!=‘undefined‘)
	{
		if(data.msg==‘ok‘)
		{
        		//这里使用了id获取元素,有点死板,建议使用这自行改造吧
        		document.getElementById(‘‘+data.id).src=data.src;//这里从缓存读取数据
		}else{
			//这里图片加载失败,我们可以显示其他图片,防止大红叉
			document.getElementById(‘‘+data.id).src=‘unload.png‘;
		}
	}
}
var s = ‘http://web.2008php.com/2014_Website_appreciate/2014-10-31/20141031133134.jpg‘;
loadImage(‘display_images‘,s,loadResult);
</script>
	</body>
</html>

注意:这种用法过于简单,没有发挥出性能,请读者自行改造后,预加载20张1024*780图片,然后自动播放。如果是预加载的,播放时看不见卡顿或显示不完全的现象。

try doing it.

时间: 2024-10-21 07:16:10

html+js实现图片预加载(异步加载)的相关文章

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

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

js本地图片预览代码兼容所有浏览器

html代码 <div id="divPreview" style="width: 160px; height: 170px"><img id="imgHeadPhoto" src="www.niyuewo.com" style="width: 160px; height: 170px;border: solid 1px #d2e2e2;" /> </div> <a

兼容ie[6-9]、火狐、Chrome、opera、maxthon3、360浏览器的js本地图片预览

html代码: <div id="divPreview"> <img id="imgHeadPhoto" src="Images/Headphoto/noperson.jpg" style="width: 160px; height: 170px;border: solid 1px #d2e2e2;" alt="" /> </div> <asp:FileUpload

js本地图片预览,兼容ie[6-9]、火狐、Chrome17+、Opera11+、Maxthon3

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title></title> </head> <body> <div id="divPrevie

基于vue.js的图片预览组件2.0.1

基于vue.js的图片预览组件 Github github 安装 npm install enlargeimg --save-dev import enlargeimg from 'enlargeimg'; 基础用法 <enlargeImg :data="files"></enlargeImg> export default { name: 'hello', data () { return { msg: 'Welcome to Your Vue.js App'

常用js,解决 textarea换行,图片预览,等待加载

/** 解决在textarea中输入的数据存入数据库后读到页面没有换行效果* textarea_info是显示在页面内容区域的class* 使用方法:直接在相应的区域加上class="textarea_info"* 在js中调用textarea_br()即可* */    function textarea_br(){        var element = $(".textarea_info");        element.each(function(){ 

关于SpringMvc中js和图片路径正确但是不能加载的问题

SpringMvc中,在没有设置拦截特殊的请求时,会默认拦截所有请求,包括js和图片等静态请求,造成资源查询失败404错误(http://localhost:8080/SSHA/js/jquery.js Failed to load resource: the server responded with a status of 404 (Not Found)). 较好的解决方案是设置SpringMvc拦截特定请求,如设置只拦截以.do结尾的请求: 原文地址:https://www.cnblogs

js实现图片预显示

html页面代码 <div id="localImag" style="display:none"><img  id="preview" width="150" height="150"  /></div> <input type='file' name='file' id='doc' onclick='javascript:setImagePreview()'&g

js本地图片预览

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <meta http-equiv="Content-Type" c