【发布时间】:2014-01-19 14:08:26
【问题描述】:
我使用以下函数制作带有淡入淡出效果的图像幻灯片。
var project_photos = ['image1.jpg', 'image2.jpg', 'image3.jpg'];
var project_photo_index = 0;
function nextPhoto() {
$('#background').fadeOut();
$('#background').css('background-image',
"url('images/" + project_photos[project_photo_index] + "')");
$('#background').fadeIn();
timer = setTimeout(function() {
if (project_photo_index+1 > project_photos.length) {
project_photo_index = 0;
} else {
project_photo_index++;
}
nextPhoto();
}, 5000);
}
但是,我想稍微调整一下函数以删除fadeOut() 和fadeIn() 之间的白色时刻。我想要实现的是:
假设淡入淡出时间为400ms,每张图片的显示时间为5s
- 图像 1 在屏幕上显示 0 到 5 秒,从 5 到 5.4 秒开始淡出
- 图像2首先隐藏,从4.8s开始淡入到5.2s(为了填补淡入和淡出之间的空白),从5.2s保持到10.2s,然后从10.2s开始淡入到10.6s
- 图3先隐藏,10.4s到10.8s开始淡入,10.8s到15.8s保持,15.8s到16.2s开始淡出
- (并且图像 1 以类似的逻辑返回,永远循环,直到计时器清零)
如何调整代码以使其按描述工作?
【问题讨论】:
-
您可以编辑jsfiddle.net/arunpjohny/HcfyD/1 以重新创建案例
-
setInterval 的使用也有一个 bug - 应该是 setTimeout
-
空白可能是因为图像的加载时间......你预加载修复它
-
更改了
setTimeout()并重新添加了fadeOut()
标签: jquery