gpt4 book ai didi

javascript - 在加载一组 CSS 背景图像后执行 jquery/javascript 操作

转载 作者:行者123 更新时间:2023-11-28 07:21:26 25 4
gpt4 key购买 nike

我遇到了一个我真的不知道如何解决的问题。

我创建了一个幻灯片,如下图所示

enter image description here

此幻灯片包含 7 张图片,加载时每张图片都依次显示(延迟 700 毫秒),完成后以相同方式显示另一张图片。

每组作品只有一张图片,我的意思是我没有把图片切成碎片,它是一张图片和一层 Div 显示不同的部分图像。这是我的代码:

下面每一个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 的 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 中存储在一个数组中),有时加载图片需要几秒钟,并导致像这样的空白部分

enter image description here

显示空的部分然后等待下次浏览器缓存图像是不好的。第一次加载幻灯片时也会发生这种情况。

我该如何解决这个问题?

是否只有在加载所有背景图像时才加载 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 代码,而不是在页面加载开始时,所以这种方式似乎没有用。

最佳答案

您可以使用这个预加载所有图像:

$.preloadImages = function() {
for (var i = 0; i < arguments.length; i++) {
$("<img />").attr("src", arguments[i]);
}
}

$.preloadImages("image1.jpg","image2.jpg");

关于javascript - 在加载一组 CSS 背景图像后执行 jquery/javascript 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32068933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com