我想使循环从数组中加载来自某个页面的所有图像。这是其工作原理:我有一个包含URL的数组。我想将所有这些页面的图像加载到某个DIV,但是jQuery load();
功能仅从array
的一个页面加载图像,并且随机进行。因此,每次我获得不同的图像时,只有一页。
var pages = ["artificial-waterfall.htm", "artificial-waterfall01.htm", "artificial-waterfall02.htm", "artificial-waterfall04.htm", "artificial-waterfall05.htm", "artificial-waterfall07.htm", "artificial-waterfall08.htm"];
pages.forEach(function(value, i) {
$('.slides').append('<div class="slide"></div>')
$('.slide').load('/russian/wild-stonenew/' + pages[i] + " .fancybox", function(){
$('.slide .fancybox').attr('data-fancybox', 'gallery1');
});
});
根据我的评论 - 加载不是随机的,它仅取决于加载页面所需的时间,因为每个载荷都异步。如果要使它同步,则需要将其移出每个循环,然后使用回调功能在第一页完成后加载下一页。
您可以做类似的事情,而不是在每个循环中进行负载:
var pages = ["artificial-waterfall.htm", "artificial-waterfall01.htm", "artificial-waterfall02.htm", "artificial-waterfall04.htm", "artificial-waterfall05.htm", "artificial-waterfall07.htm", "artificial-waterfall08.htm"];
var currentPage = 0; // global counter
var $slidesContainer = $('.slides'); // slide container
addSlide(); // set loop going
function addSlide() {
$slide = $('<div class="slide"></div>'); // create new slide
$slidesContainer.append($slide); // append to container
$slide.load('/russian/wild-stonenew/' + pages[currentPage] + " .fancybox", function() { // load images into slide
$slide.find('.fancybox').attr('data-fancybox', 'gallery1'); // do your fancybox thing
currentPage++; // increment page index
if (currentPage < pages.length) { // load next slide if there is one
addSlide();
}
});
}
您面临的问题是由于.load()
替代了元素的内容。文档说以下内容:
描述:从服务器加载数据,并将返回的HTML放入匹配的元素中。
要解决此问题,您可以做一些事情。最简单的只是将内容附加到元素上而不是更换元素。这可以通过使用例如.get()
而不是.load()
来完成。
请记住,将根据负载速度"随机"放置内容。最慢的数据将最后一次附加,但这可能会随刷新而有所不同。
另一个选项是首先创建占位符,每个URL的内容都应该使用。然后使用.load()
用远程数据替换占位符的内容。这将使已加载的内容以数组的顺序保留,因为您首先保留一个内容,然后将数据加载到其中。