jQuery:一旦加载了图像的子集,就执行函数
jQuery: Execute function as soon as a subset of images have loaded
我有一个幻灯片,需要用jQuery初始化。初始化需要所有的幻灯片图像都被完全加载,这样我就可以得到它们的实际宽度和高度。我不能改变这部分。
考虑以下布局:
<div class="slideshow">
<img />
<img />
<img />
</div>
<img />
<img />
<img />
我需要在幻灯片容器中的三个图像加载完毕后立即初始化幻灯片。我等不及页面上的其他图像都加载好了,因为可能有成千上万的图像。
你知道我该怎么解决这个问题吗?
根据我的评论,您可以将检查/加载行为封装在jQuery插件中,并返回一个类似的承诺:
$.fn.imagesLoaded = function () {
var def = $.Deferred();
var count = this.length;
this.each(function () {
if (this.complete) {
if (!--count) {
def.resolve();
}
} else {
$(this).load(function () {
if (!--count) {
def.resolve();
}
});
}
});
return def.promise();
}
然后简单地使用如下:
$('.slideshow img').imagesLoaded().done(function () {
alert("loaded");
});
以下是我最终使用的内容,比我希望的要复杂得多:
// Prepare the slideshow as soon as all of its images have been loaded
var slideshowImages = $('.slideshow img');
var slideshowImagesLoadedCount = 0;
// Check how many images have already been loaded
slideshowImages.each(function() {
if(this.complete) {
slideshowImagesLoadedCount++;
}
});
// If all the images have loaded already, prepare the slideshow
if(slideshowImagesLoadedCount === slideshowImages.length) {
prepareSlideshow();
} else {
// Otherwise wait until all images have been loaded
slideshowImages.load(function() {
slideshowImagesLoadedCount++;
if(slideshowImagesLoadedCount === slideshowImages.length) {
prepareSlideshow();
}
});
}
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JavaScript执行暂时挂起页面
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 当js函数's已执行
- 哪个先执行
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- HTML表单提交时未执行外部函数
- 在Safari执行javascript之前对其进行修改
- Amd,希望确保某个东西总是最后执行
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何做到这一点,使代码在不传递条件后执行函数
- 如何在执行此特定onclick事件时执行JavaScript函数
- 如何在从浏览缓存加载页面时执行javascript
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- Jquery:代码在rails中的页面加载时未执行
- 如何防止jQueryonclick事件中的Ruby方法在页面刷新时执行
- JavaScript动画从不执行
- 为什么onsubmit函数似乎没有执行
- jQuery:一旦加载了图像的子集,就执行函数