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
,图像将立即从浏览器缓存加载(无需调用服务器)。这就是“预加载到缓存”的含义和作用,这就是您使用此代码的方式。