我遇到了一个问题,我真的不知道如何解决它。
我创建了一个幻灯片,如下图所示
这个幻灯片包含7个,当它被加载时,每个图像一个接一个地显示(700毫秒时间延迟),并在完成后以相同的方式显示另一个图像。
每一件作品只有一张图片,我的意思是我没有把图片切成碎片,这是一张图片,一层Div
s正在显示不同的图像片段。这是我的代码:
以下DIV
中的每一个都包含一张图片
<div class='slider-container'>
<div class="slider-section slider-section1"></div>
<div class="slider-section slider-section2"></div>
<div class="slider-section slider-section3"></div>
<div class="slider-section slider-section4"></div>
<div class="slider-section slider-section5"></div>
<div class="slider-section slider-section6"></div>
</div>
它是两个DIV
s的CSS
.slider-container > div{
position: absolute;
box-shadow : 2px 3px 21px #303030;
display: none;
}
.slider-section1{
background: repeat scroll -32px -42px / 470px 360px rgba(0, 0, 0, 0);
height: 138px;
width: 188px;
left:32px;
top : 42px;
}
.slider-section2{
background: repeat scroll -222px -2px / 470px 360px rgba(0, 0, 0, 0);
height: 178px;
width: 80px;
left:222px;
top : 2px;
}
.
.
.
现在通过将背景图片设置为.slider-container > div
,我可以为所有DIV
设置图片,每个图片都会显示其中的一部分。
加载背景图片时出现延迟问题。因为背景图像是由Javascript更改的(背景图像的url存储在Javsscript中的数组中),有时加载图像需要几秒钟,这会导致像这样的空白部分
显示空的一组部分然后等待下次浏览器缓存图像是不好的。第一次加载幻灯片时也会发生这种情况。
如何解决此问题?
是否仅在加载了所有背景图像时加载slider-container
?或任何其他方法来防止空节?
感谢。
更新
这是javascript(背景图片的网址存储在.preload-image span.field-content
元素中)
(function($)
{
var imageArray= [];
var rate = 700;
var imagePointer=0;
var imageCounter=0;
$(document).ready(function()
{
function slider(){
var time=300;
$(".slider-container > div").css("background-image","url('"+imageArray[imagePointer]+"')");
imagePointer++;
if(imageCounter == imagePointer)
imagePointer=0;
setTimeout(
function()
{
$(".slider-section1").fadeIn(time);
}, rate);
setTimeout(
function()
{
$(".slider-section2").fadeIn(time);
}, rate * 2);
setTimeout(
function()
{
$(".slider-section3").fadeIn(time);
}, rate * 3);
setTimeout(
function()
{
$(".slider-section4").fadeIn(time);
}, rate * 4);
setTimeout(
function()
{
$(".slider-section5").fadeIn(time);
}, rate * 5);
setTimeout(
function()
{
$(".slider-section6").fadeIn(time);
}, rate * 6);
setTimeout(
function()
{
$(".slider-section7").fadeIn(time);
}, rate * 7);
setTimeout(
function()
{
$(".slider-container > div").fadeOut(time);
}, rate * 12);
}
$(".preload-image span.field-content").each(function() {
var src = $(this).text();
imageArray[imageCounter++] = src;
});
slider();
setInterval(function() {
slider();
},rate * 12.5);
});
})(jQuery);
imageArray
数组包含一组网址和imagePointer
指向当前图片。
我还尝试了$(window).load(function()
或$(document).load(function()
函数,但由于背景图像是由某些JavaScript代码加载的,而不是在页面加载开始时加载,所以这种方式似乎没用。
答案 0 :(得分:0)
您可以使用以下方法预加载所有图像:
$.preloadImages = function() {
for (var i = 0; i < arguments.length; i++) {
$("<img />").attr("src", arguments[i]);
}
}
$.preloadImages("image1.jpg","image2.jpg");