用Javascript预加载图片?没有jQuery

Coo*_*Guy 4 javascript image preload

在论坛中有几个问题,但我无法得到我需要的好答案.

我正在进入Canvas和Javascript,我想在游戏打开后立即预加载一些图像.我做了一个我想要构建的方法的例子(并没有工作)

我有3个文件:"main.html",其中画布(在这个例子中只有一个)被声明,我尝试加载图像,"ImagePreloader.js"我预加载所有图像和"Variables.js"在哪里我有我的变数.

任何人都可以请这个图像预加载metod,或建议我一个可行的?我认为图像没有加载,因为我没有使用onLoad()函数,我在目前为止阅读的教程中无法理解(我知道如何将其应用于图像,但不是图像数组)

main.html中:

<!DOCTYPE HTML>
<html>
  <body>
    <canvas id="myCanvas" width="800" height="600"></canvas>

    <script type="text/javascript" src="Variables.js"></script>
    <script type="text/javascript" src="ImagePreloader.js"></script>
    <script>
    // Basic canvas info
    var canvas = document.getElementById('myCanvas');
    var context = canvas.getContext('2d');

    // Draw one of the images. Somehow it doesn't work :(
    context.drawImage(imageArray[3], x, y, width, height);
    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

ImagePreloader.js

// This should preload the images in imageArray[i] with 0 <= i <= 5 ... right?
function preloader() 
 {
     for(var i=0; i<5; i++) 
     {
          imageArray[i].src=images[i];
     }
 } 
Run Code Online (Sandbox Code Playgroud)

Variables.js

// array of sources of my images
images = new Array();
images[0]="img1.jpg"
images[1]="img2.jpg"
images[2]="img3.jpg"
images[3]="img4.jpg"
images[4]="img5.jpg"

// Stuff to draw the image
var x = 50;
var y = 50;
var width = 256;
var height = 256;

// Is this actually an array of images?
imageArray = new Image();
Run Code Online (Sandbox Code Playgroud)

提前致谢!

e-s*_*shi 9

好吧,你会想要使用一个在某个点加载图像的函数,所以你也可以尝试理解onLoad.这并不难理解.

"onload"是在加载某些内容后立即发生的javascript事件.换句话说:onLoad就像一个javascript-native函数,在加载某些东西时触发.那东西可以是一个窗口(例如:window.onload)或文档.您想要的是文档onLoad事件,因为它在加载文档时触发.

让我们为您提供一个简单的例子......

<body onload="preloadMyImages();">
Run Code Online (Sandbox Code Playgroud)

这告诉浏览器"当你加载文档时,运行preloadMyImages函数".

您所要做的就是使用该功能将图像加载到客户端的浏览器缓存中.

function preloadMyImages() 
{
    var imageList = [
        "image.gif",
        "example/image.jpg",
        "whatever/image.png"
    ];
    for(var i = 0; i < imageList.length; i++ ) 
    {
        var imageObject = new Image();
        imageObject.src = imageList[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

这实际上包装了它并为您提供了一个完整的例子.请享用!

编辑

因为 - 根据您的评论 - 您正在寻找更多帮助,我想指向/sf/answers/72686701/,其中(作为众多示例中的一个)展示了您可以如何(和可能应该 - 取决于你计划在画布上绘制的内容)也使用img.onload.

然而,正如我在评论中所述:它将取决于你想要把它带到哪里.您越是深入研究Javascript编码,您就越能理解正在发生的事情.有几本好的(部分免费)书籍解释了如何编写Javascript代码,使用HTML5画布,创建预加载器,动画,讨论范围等.

快速检查大G的搜索引擎会提供大量的示例和教程,这对您有所帮助.许多例子中的一个:" 如何在HTML5画布上绘制图像 ",它显示了在简短而清晰的教程中预加载和循环动画.

但请不要指望我们为您编写所有代码 - 它不会发生.这是一个不那么罕见的案例,"边做边学"实际上会让你更聪明.如果您在前往最终目标的路上遇到其他问题,则可以随时发布与该新问题相关的新问题.