JS缓存图片实例

现有JS功能越来强大了,很多基于JS的Web Game做得都非常好。但JS程序不像客户端程序,很多程序里需要使用到的图片、资源等都要从远程服务器获取。因此如果等程序要用到时再从远程服务器下载的话可能来不及。对用户体验来讲影响很大。因此就需要提前为JS程序缓存需要用到的资源文件。下面就来介绍一下最常用的图片缓存。

首先大家可以看一下这个 示例 ,这是一个简单的抽奖程序,点开始时不断的重复显示13张扑克牌,点结束时就暂停以显示结果。

image

如果我们直接用for循环或者用随机函数直接调用文件的话则有些图片由于没有加载成功所以会显示个大大的叉(你懂的Smile),而且不管你是在本地运行该文件或者把时隔时间调成多长都会存在这个问题。

因此我们需要提前缓存图片对像,但由于图像有13个所以我们创建了一个图像数组进行加载。当计数器显示成功加载完成的图像跟总数相符时则开始程序。以下为详细的代码。

复制代码
var Imgvalue;
var Count =13;
var Imgs = new Array(Count);
var ImgLoaded =0;

//预加载图片
function preLoadImgs()
{
alert(
'图片加载中请稍等......');
for(var i=0;i<Imgs.length;i++){
Imgs[i]
=new Image();
downloadImage(i);
}
}

//加载单个图片
function downloadImage(i)
{
    
var imageIndex = i+1//图片以1开始
    Imgs[i].src = "images/"+imageIndex+".jpg";
    Imgs[i].onLoad
=validateImages(i);
}

//验证是否成功加载完成,如不成功则重新加载
function validateImages(i){
if (!Imgs[i].complete)
    {
     window.setTimeout(
'downloadImage('+i+')',200);    
    }
else if (typeof Imgs[i].naturalWidth != "undefined" && Imgs[i].naturalWidth == 0)
    {
    window.setTimeout(
'downloadImage('+i+')',200);
    }
    
else 
    {
        ImgLoaded
++
        
if(ImgLoaded == Count)
        {
            document.getElementById(
'BtnStart').disabled=false;
            document.getElementById(
'BtnStop').disabled=false;
            alert(
'图片加载完毕!');
        }
    }
}

//开始
function RandStart()
{
    Init 
= setInterval('SetRand()',50);    
}
//随机显示
function SetRand()
{
    imageIndex 
= Math.floor(Math.random()*Count);
    document.getElementById(
"ImgView").src = Imgs[imageIndex].src;
}

//结束
function RandStop()
{
    window.clearInterval(Init);;
}
复制代码

 

 
另外介绍两款不错的JS网页游戏
1.http://www.zentastic.com/temp/apophis2029/
2.http://www.paulbrunt.co.uk/bert/

posted on   Gary Zhang  阅读(23687)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
历史上的今天:
2008-02-22 EasyUC博客助手 [支持:博客园,MSN/Live空间,CSDN, 博客之家,PJBlog,Z-Blog...]

导航

点击右上角即可分享
微信分享提示