当前位置: 首页 > 面试题库 >

在HTML上快速加载许多图像

慎望
2023-03-14
问题内容

我正在编写一个脚本,用户可以在其中选择一系列数据,然后从服务器中获取一堆图像(超过150张),然后循环通过它们来制作电影。我想知道的是在移动图像槽时加载防止滞后的最有效方法。

目前,我正在使用Ajax从服务器获取图像,并将其存储在JavaScript上的Image对象数组中。在HTML中,我有一个div标签,希望在其中放置图像。在数组中创建所有Image对象(并设置其适当的src)后,我将执行以下操作:

imgElem = document.createElement('img');
document.getElementById('loopLocation').appendChild(imgElem);
imgElem.src = images[0].src;

之后,我只做最后一个调用,但是更改了循环索引。我每400毫秒执行一次。循环有效,但有时会滞后,并在图像上冻结的时间更长。我想知道我是否能够从客户端改进此功能,或者只需要响应速度更快的服务器即可。


问题答案:

您可能想要考虑将所有图像整合为一张大图像的拼版。这样,您只需要加载一个大图像,然后为每个场景重新定位即可。

或者,您可能还需要在实际使用之前预加载这150张图像。您可以使用JS数组存储Image对象,然后遍历该数组以获取图片。

var images = [];
var expectLoaded = 150;

for(var i = 0; i<expectLoaded;i++){
    (function(i){

        //new image object
        var img = new Image();

        //onload hander
        img.onload = function(){

            //after load, push it into the array
            images.push[img];

            //and check if the all has loaded
            if(images.length === expectLoaded){
                //preload done
            }
        }

        //start loading this image
        img.src = //path to image[i];

    },(i));
}

循环会阻塞UI线程。JS是单线程的,这意味着代码以线性方式执行,一个接一个地执行。该循环语句之后的所有内容都将等待,直到循环完成。如果该循环需要很长时间…请喝杯咖啡。另外,由于您正在处理DOM,因此由于UI线程被阻止,您看不到更改。

但是有很多方法可以绕开它,其中一种方法是使用超时来延迟和排队代码,以便在JS不忙时执行。

function animate(frameNo){

    //animate frame[frameNo];

    if(frameNo < total_frames){    //make the UI breate in between frames
        setTimeout(function(){   //so that changes reflect on the screen
            animate(++frameNo);  //then animate next frame
        },200);                  
    }
}

//start
animate(0);


 类似资料:
  • 当我通过VS代码运行我的网页时,我的所有图片都会显示出来,但由于某种原因,当我通过localhost运行网页时,没有任何图片或CSS被发送。这是我下面的代码,任何帮助都将不胜感激。我曾试图在网上找到解决方案,但迄今为止似乎没有任何效果。 这是我的文件结构

  • 我有一个带有父类id的categories表来存储类别和子类别。该类别可以是多级的,这意味着一个类别可以有子类别,每个子类别可以有子类别,依此类推。而且它是动态的,因此级别数量不受限制。我在类别模型中定义了一个函数,名称如下: 现在我想急切加载的类别与子类别 工作伟大,但它只得到一个级别的子类别,我想急于加载所有级别。差不多 有办法吗?要获得所有类别级别?如果没有,如何在一个集合中获得所有级别的子

  • 我面临毕加索无法快速加载图像的问题。 有3个显示左、中、右图像。在快进/后退时,对于给定的时间点,选择左、中、右并显示在三个框中。 这是初始化。缓存是100MB以及99MB的 窗口移动的图像数是3000。所以我将图像预加载为 平均图像大小为10KB-320x180,因此达到35MB,小于99MB。 当快速循环工作时,许多图像是(来自)和(来自),但在几个快速循环之后,3个图像冻结或变得非常慢。此时

  • 我使用spring boot并尝试加载图像到我的html页面。 文件的完整路径:file:///d:/dyplom%20project/src/main/resources/static/slove.png当我在浏览器中运行时,所有工作和图像都在上传。 而当我转到localhost-welcomepage时,我有它: 控制台错误: 这与路径错误

  • 问题内容: 我正在使用以下代码将单个图像上传到服务器: 如何通过编辑此代码在单个参数中上传多张图片? 问题答案: Swift 3 只需在图像上传参数中使用“ []”即可使其成为图像数组。

  • 问题内容: 我正在尝试把我的头围住Swift语言。使用Objective-C在代码中构建视图时,常见的模式是覆盖UI属性并像这样延迟加载它们: 这允许将UIElement的配置包含在其设置中,但是不会导致每次都对其进行重新配置。 看来我们无权访问Swift中的后备存储,并且关键字实际上没有相同的语义。 我很好奇是否有人在Swift中找到了类似的模式,该模式允许人们以一种简洁的语法方式将变量和常量的