Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不查询服务器的情况下将图像调用到DOM中?_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 如何在不查询服务器的情况下将图像调用到DOM中?

Javascript 如何在不查询服务器的情况下将图像调用到DOM中?,javascript,jquery,dom,Javascript,Jquery,Dom,给定一些图像(动画帧),我想预取它们,然后根据需要在网页上显示它们 我尝试过几种预取方法,包括,但这里有一种非常简单的方法: <div class="animation-container"></div> <div class="holding-container" style="display:none"></div> <script> $('.holding-container').append('<img src="Im

给定一些图像(动画帧),我想预取它们,然后根据需要在网页上显示它们

我尝试过几种预取方法,包括,但这里有一种非常简单的方法:

<div class="animation-container"></div>

<div class="holding-container" style="display:none"></div>

<script>
$('.holding-container').append('<img src="Image1.png" />');
$('.holding-container').append('<img src="Image2.png" />');
</script>

$('.holding container')。追加('');
$('.holding container')。追加('');
在Firebug或developer工具的Network选项卡中,我看到这些调用导致对服务器的查询,并且成功地获取了图像

现在,我想实际使用这些图像。下面是一些非常简化的代码:

$('.animation-container').prepend('<img src="Image1.png"/>');
$('.animation container').prepend('');

这就是问题所在。网络选项卡显示浏览器再次查询服务器(未修改)。这将导致图像显示前约200毫秒的延迟。为什么会发生这种情况?我能做些什么?

您正在创建一个新的DOM对象,而不是重新使用预先获取的DOM对象

为每个图像添加一个id以唯一标识它-

<div class="animation-container"></div>
<div class="holding-container" style="display:none"></div>
<script>
    $('.holding-container').append('<img src="Image1.png" id="img1" />');
    $('.holding-container').append('<img src="Image2.png" id="img2" />');
</script>

您正在创建一个新的DOM对象,而不是重新使用预先获取的DOM对象

为每个图像添加一个id以唯一标识它-

<div class="animation-container"></div>
<div class="holding-container" style="display:none"></div>
<script>
    $('.holding-container').append('<img src="Image1.png" id="img1" />');
    $('.holding-container').append('<img src="Image2.png" id="img2" />');
</script>

以下是两种预加载图像的方法:


在这两种情况下,它们都会将图像预加载到缓存的图像中。然后,当您在网页中的任何其他位置使用这些图像URL时,它们将立即加载(从浏览器缓存中加载)。

以下是两种预加载图像的方法:


在这两种情况下,它们都会将图像预加载到缓存的图像中。然后,当您在网页中的任何其他位置使用这些图像URL时,它们将立即加载(从浏览器缓存中加载)。

也许CSS精灵会对您有所帮助。这些对动画非常有用,如果你没有足够的图像编辑技能,还有一大堆免费的在线生成器。

也许CSS精灵会帮助你。这些工具对于动画非常有用,如果您没有足够的图像编辑技能,可以使用一整套免费的在线生成器。

您正在创建一个新的图像元素。尝试将其从
.holding容器
中转移。如果您在附加引用时保留引用,它将是最快的:
var img1=$(“”).appendTo(“.holding container”)
然后像这样做前置:
img1.prependTo('.animation container')
您正在创建一个新的图像元素。尝试将其从
.holding容器
中转移。如果您在附加引用时保留引用,它将是最快的:
var img1=$(“”).appendTo(“.holding container”)
然后像这样做预处理:
img1.prependTo('.animation container')
我确信这两个都是优秀的预取器,但它们遗漏了一点关键信息——一旦获取图像,您实际如何使用它们?它们是否可以从对象中调用,或者将它们放入DOM是否会导致服务器查询(根据我上面的问题,返回304 Not Modified)?@MartinBurch-图像预加载后,我试图解释您只是创建了一个图像对象,将图像URL指定为图像
src
,图像将立即从浏览器缓存加载(无需调用服务器)。这就是“预加载到缓存”的含义和作用,这就是你如何使用这段代码。我相信这两个都是优秀的预取器,但它们遗漏了一点关键信息——一旦图像被提取,你实际上如何使用它们?它们是否可以从对象中调用,或者将它们放入DOM是否会导致服务器查询(根据我上面的问题,返回304 Not Modified)?@MartinBurch-图像预加载后,我试图解释您只是创建了一个图像对象,将图像URL指定为图像
src
,图像将立即从浏览器缓存加载(无需调用服务器)。这就是“预加载到缓存”的含义和作用,这就是您使用此代码的方式。