等待图像加载,然后执行所有其他代码
好吧,我对此失去了理智。我确实在 SO 和谷歌上阅读了有关它的内容,我什至设置了预加载器(在 SO 上找到),但我发现的插件/代码都没有帮助我。
我想要做的是:等到所有图像都预加载,然后才执行所有其他 javascript 代码。就我而言,它可以(但不是必须)有“正在加载...”消息。
事实上,我在主体背景中有一个相当大的图像和另外两个也更大的图像,所以我想预加载它们,这样它们就会立即显示,并且不会有那种丑陋的“加载”图像效果。
这就是我现在正在使用的,但它不好:
$(document).ready(function()
{
preloadImages();
...some other code...
function preloadImages(){
imagePreloader([
'images/1.png',
'images/2.jpg',
'images/3.png',
]);
}
function imagePreloader(arrayOfImages) {
$(arrayOfImages).each(function(){
(new Image()).src = this;
});
}
}
我不知道,也许我应该在 .ready() 之外的某个地方调用这个预加载器?或类似的东西,请帮忙...
顺便说一句,是的,我也读过 这篇帖子,我不知道为什么,但 .ready() 对我来说工作得更快:(
编辑:
好吧,我终于让这个东西发挥作用了。我的问题?我把等待的div设置错了。这是我现在的代码:我有一个加载 div,它显示在所有内容之上,然后当所有图像加载时(使用 $(window).load(function(){...}); 正如我所建议的,隐藏该 div。
<div id="loading">
<div id="waiting">
<img class="loadingGif" src="images/loading.gif">
</div>
</div>
#loading
{
background-size: 100%;
background-color:#000;
width: 100%;
height: 100%;
margin: 0px;
padding: 0px;
z-index:999;
}
#waiting
{
margin-left: auto;
margin-right: auto;
position:absolute;
top: 39%;
left: 27.81%;
width: 45%;
height: 150px;
background-color: #FFF;
border: 12px solid #FF771C;
text-align: center;
}
并且我的 jQuery 代码是这样的:
$(window).load(function()
{
$('#loading').addClass('hidden');
...
}
OK, I'm losing my mind over this. I did read here at SO and google about it, I even have the preloader set (found here on SO), but none of the plugins/code I found helped me.
What I want to do is: wait until all images are preloaded and only then execute all other javascript code. As far as I'm concerned it can (but not a must) have a "loading..." message.
The fact is that I have a pretty big image in the body background and 2 other images which are also bigger, and so I would like to preload them so that then they would show instantly and would not have that ugly "loading" image effect.
This is what I'm using now but it's not good:
$(document).ready(function()
{
preloadImages();
...some other code...
function preloadImages(){
imagePreloader([
'images/1.png',
'images/2.jpg',
'images/3.png',
]);
}
function imagePreloader(arrayOfImages) {
$(arrayOfImages).each(function(){
(new Image()).src = this;
});
}
}
I don't know, maybe I should call this preloader somewhere out of the .ready()? or sth like that, please help...
Btw, yes, I also read this post and I don't know why but .ready() works faster for me :(
EDIT:
Ok, so finally I got this thing to work. My problem? I was setting the waiting div wrong. This is my code now: I have the loading div which I show above everything and then when all images load (using $(window).load(function(){...}); as suggested I, hide that div.
<div id="loading">
<div id="waiting">
<img class="loadingGif" src="images/loading.gif">
</div>
</div>
#loading
{
background-size: 100%;
background-color:#000;
width: 100%;
height: 100%;
margin: 0px;
padding: 0px;
z-index:999;
}
#waiting
{
margin-left: auto;
margin-right: auto;
position:absolute;
top: 39%;
left: 27.81%;
width: 45%;
height: 150px;
background-color: #FFF;
border: 12px solid #FF771C;
text-align: center;
}
And my jQuery code is this:
$(window).load(function()
{
$('#loading').addClass('hidden');
...
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您可以不尝试预加载,而只需在...上执行脚本,
直到所有图像加载完毕后才会触发。
Instead of trying to preload, you could just execute your script on...
That doesn't fire until all images have been loaded.
我有一个名为 waitForImages 的插件,可以让您在加载后代图像时附加回调。
就您而言,如果您想等待所有资源下载,
$(window).load()
可能没问题。但你可以用我的插件做得更酷一点:)I have a plugin named waitForImages that lets you attach a callback when descendent images have loaded.
In your case, if you wanted to wait for all assets to download,
$(window).load()
may be fine. But you could do it a bit cooler with my plugin :)我认为您正在寻找的是 javascript:onLoad(),浏览器完成加载后就会调用它。
I think what you're looking for is javascript:onLoad(), which gets called as soon as the browser finishes loading.
您只能在加载图像后才显示图像,如下所示:
You could display the image only once it is loaded like so :
waitForImages 插件是一个有趣的插件,但解决方案可以通过以下方式实现:
The waitForImages pluggin is an interesting one, but the solution can be achieved just with:
我相信最好的 jQuery 选项是使用 ajax get 调用:
I believe the best jQuery option is to use the ajax get call: