【发布时间】:2015-08-18 18:17:06
【问题描述】:
我遇到了一个我真的不知道如何解决的问题。
我创建了一个幻灯片,如下图所示
此幻灯片包含 7 张图片,加载时每张图片依次显示(有 700 毫秒的时间延迟),完成后以相同方式显示另一张图片。
每组图片只有一个图片,我的意思是我没有将图片切成小块,它是一个图片,Divs 的一层正在显示图片的不同部分。这是我的代码:
以下每一个DIVs 都包含一张图片
<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>
是两个DIVs的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,我可以为所有DIVs 设置图像,每个都将显示其中的一部分。
问题在于加载背景图像时延迟。因为背景图片是由 Javascript 更改的(背景图片的 url 存储在 Javsscript 中的数组中),有时加载图片需要几秒钟,它会导致像这样的空白部分
显示空的部分然后等待浏览器在下一次缓存图像是不好的。第一次加载幻灯片时也会发生这种情况。
我该如何解决这个问题?
是否只有在加载所有背景图像时才加载slider-container?或任何其他方法来防止空白部分?
谢谢。
更新:
这是javascript(背景图片的url存储在.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 数组包含一组 url,imagePointer 指向当前图像。
我也试过$(window).load(function()或$(document).load(function()函数,但由于背景图片是由一些JavaScript代码加载的,而不是在页面加载的开头,所以这种方式似乎没用。
【问题讨论】:
-
你是如何加载图像的?即您如何在 JavaScript 中更改它们? this 可能会有所帮助。
-
@TahirAhmed 我更新了问题并包含了更改的图像代码
-
@TahirAhmed 谢谢,我会努力的
标签: javascript html css image background