如何均匀地计时衰落过渡?
How to evenly time fading transitions?
所以我正在尝试从头开始创建一个简单的幻灯片放映,到目前为止我能够让全屏图像无限淡出和淡入,但出于某些奇怪的原因使用 setInterval(function(){fade(var)}, 3500);
didn ' 工作,也许有人可以解释为什么第一张和最后一张图片褪色的时间超过 3.5 秒。同时,我试图通过在 fade()
中实现回调函数来解决该问题。我的例子有四张图片,它们开始淡出直到到达第一张图片,然后不淡出第一张图片并开始淡出第二张图片直到第四张图片,一直这样做,这是我最近尝试实现回调功能:
var i = 4;
$(document).ready(function(){
fade(i, fade);
});
var fadeIN = false;
function fade(objectID, callbackfn){
var fadeTime = 3500;
if(!fadeIN){
$("#slide-"+objectID).fadeOut(fadeTime);
i--;
if(i === 1) {
fadeIN = true;
}
}
else{
i++;
$("#slide-"+objectID).fadeIn(fadeTime);
if(i === 4){
fadeIN = false;
}
}
if(arguments[1]){
callbackfn(i);
}
}
但这不起作用,它淡出图像 4、图像 3 并停在图像 2 上。也许有一种方法可以使用 setIntervel()
均匀地计时淡入淡出的过渡,如果有人可以告诉我如何?感谢任何帮助。
这是代码的 JSFiddle:http://jsfiddle.net/8kgc0chq/ 它不起作用。
这是 .fadeOut()
的文档
有一个可选参数complete
:
A function to call once the animation is complete.
把下一个动画放在那里,他们也有一个complete
(回调)函数。
$("#id").fadeOut(fadeTime, function() {
// code to execute after animation complete
});
你需要用 javascript 正确地完成它。简单的方法在最后一个元素之后失败。
所以这是我的解决方案。是否可以进一步改进,我认为是的..但它现在确实有效。并且在某种程度上是面向未来的。
我清理了 css 并稍微更改了 html 结构。
演示: http://jsfiddle.net/8kgc0chq/3/
$(document).ready(function () {
$(window).resize(function () {
realTimeHeight();
});
realTimeHeight();
startSlides();
});
function startSlides() {
var fadeTime = 1000,
delay = 1300,
i = 0,
slides = $("#hero-slider > .slide"),
len = slides.length;
slides.hide();
var pF = $('<div class="slide">'), pB = pF.clone();
pF.attr('id', slides.eq(i).attr('id'));
$('#hero-slider').prepend(pF).prepend(pB);
setInterval(fadeThisIn, fadeTime + delay);
function fadeThisIn() {
pB.attr('id', pF.attr('id'));
i = ++i % len;
pF.hide().attr('id', slides.eq(i).attr('id')).fadeIn(fadeTime);
}
}
function realTimeHeight() {
var altura = $(window).height();
$("#hero-slider").css("height", altura);
}
所以我正在尝试从头开始创建一个简单的幻灯片放映,到目前为止我能够让全屏图像无限淡出和淡入,但出于某些奇怪的原因使用 setInterval(function(){fade(var)}, 3500);
didn ' 工作,也许有人可以解释为什么第一张和最后一张图片褪色的时间超过 3.5 秒。同时,我试图通过在 fade()
中实现回调函数来解决该问题。我的例子有四张图片,它们开始淡出直到到达第一张图片,然后不淡出第一张图片并开始淡出第二张图片直到第四张图片,一直这样做,这是我最近尝试实现回调功能:
var i = 4;
$(document).ready(function(){
fade(i, fade);
});
var fadeIN = false;
function fade(objectID, callbackfn){
var fadeTime = 3500;
if(!fadeIN){
$("#slide-"+objectID).fadeOut(fadeTime);
i--;
if(i === 1) {
fadeIN = true;
}
}
else{
i++;
$("#slide-"+objectID).fadeIn(fadeTime);
if(i === 4){
fadeIN = false;
}
}
if(arguments[1]){
callbackfn(i);
}
}
但这不起作用,它淡出图像 4、图像 3 并停在图像 2 上。也许有一种方法可以使用 setIntervel()
均匀地计时淡入淡出的过渡,如果有人可以告诉我如何?感谢任何帮助。
这是代码的 JSFiddle:http://jsfiddle.net/8kgc0chq/ 它不起作用。
这是 .fadeOut()
的文档有一个可选参数complete
:
A function to call once the animation is complete.
把下一个动画放在那里,他们也有一个complete
(回调)函数。
$("#id").fadeOut(fadeTime, function() {
// code to execute after animation complete
});
你需要用 javascript 正确地完成它。简单的方法在最后一个元素之后失败。
所以这是我的解决方案。是否可以进一步改进,我认为是的..但它现在确实有效。并且在某种程度上是面向未来的。
我清理了 css 并稍微更改了 html 结构。
演示: http://jsfiddle.net/8kgc0chq/3/
$(document).ready(function () {
$(window).resize(function () {
realTimeHeight();
});
realTimeHeight();
startSlides();
});
function startSlides() {
var fadeTime = 1000,
delay = 1300,
i = 0,
slides = $("#hero-slider > .slide"),
len = slides.length;
slides.hide();
var pF = $('<div class="slide">'), pB = pF.clone();
pF.attr('id', slides.eq(i).attr('id'));
$('#hero-slider').prepend(pF).prepend(pB);
setInterval(fadeThisIn, fadeTime + delay);
function fadeThisIn() {
pB.attr('id', pF.attr('id'));
i = ++i % len;
pF.hide().attr('id', slides.eq(i).attr('id')).fadeIn(fadeTime);
}
}
function realTimeHeight() {
var altura = $(window).height();
$("#hero-slider").css("height", altura);
}