Well this problem is kind of weird,
I have a website where the background image changes with a fadeIn/Out transition
Video: http://www.screenr.com/ZCvs
Web in action: http://toniweb.us/gm
The markup:
<div class="fondo" onclick="descargar(2,500);descargar(1,500);"></div>
<div id="headerimgs">
<div id="headerimg1" class="headerimg"></div>
<div id="headerimg2" class="headerimg"></div>
</div>
<!-- Inicio Cabecera -->
CSS:
.headerimg {
background-position: center top; background-repeat: no-repeat; width:100%;position:absolute;height:100%;cursor:pointer;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
.headerimg img{
min-width:100%; width:100%; height:100%;
}
.fondo{
position:absolute;
z-index:1;
width:100%;
height:100%;
cursor:pointer;
}
Javascript:
/*Gestion de pase de imágenes de fondo*/
$(document).ready(function() {
/*controla la velocidad de la animación*/
var slideshowSpeed = 3000;
var transitionSpeed = 2000;
var timeoutSpeed = 500;
/*No tocar*/
var interval;
var activeContainer = 1;
var currentImg = 0;
var animating = false;
var navigate = function(direction) {
// Si ya estamos navegando, entonces no hacemos nada!
if(animating) {
return;
}
currentImg++;
if(currentImg == photos.length + 1) {
currentImg = 1;
}
// Tenemos dos, uno en el que tenemos la imagen que se ve y otro d?nde tenemos la imagen siguiente
var currentContainer = activeContainer;
// Esto puedo optimizarlo con la funci?n modulo, y cambiar 1 y 2 por 0 y 1-> active = mod2(active + 1)
if(activeContainer == 1) {
activeContainer = 2;
} else {
activeContainer = 1;
}
// hay que decrementar el ?ndice porque empieza por cero
cargarImagen(photos[currentImg - 1], currentContainer, activeContainer);
};
var currentZindex = -1;
var cargarImagen = function(photoObject, currentContainer, activeContainer) {
animating = true;
// Nos aseguramos que el nuevo contenedor está siempre dentro del cajon
currentZindex--;
//if(currentZindex < 0) currentZindex=1;
// Actualizar la imagen
$("#headerimg" + activeContainer).css({
"background-image" : "url(" + photoObject + ")",
"display" : "block",
"z-index" : currentZindex
});
// FadeOut antigua
// Cuando la transición se ha completado, mostramos el header
$("#headerimg" + currentContainer).fadeOut(transitionSpeed,function() {
setTimeout(function() {
$("#headertxt").css({"display" : "block"});
animating = false;
}, timeoutSpeed);
});
};
//ver la primera
navigate("next");
//iniciar temporizador que mostrará las siguientes
interval = setInterval(function() {
navigate("next");
}, slideshowSpeed);
});
there is also an overlay div (class fondo) (height and width 100%) so i can dectect when the background has been clicked (i can not use directly the background div because the transition makes it have negative z-index)
the problem is that this transition produces a weird effect in all white texts
any idea what am i missing?
I don't know what caused the glitches on your computer, I can't reproduce it: I test using IE7,8,9, latest Chrome and Firefox on Windows 7. Please provide us with more information about your setup. Did you visit a 3d-enabled website before testing your own site? It seems like a graphics-card bug. Did you use the latest browser and graphics card drivers?
On a side note, something you might want to consider is making your fade animation easier: it stutters a bit in Chrome after initial load.
The easiest animation that can do this thing is a window.setInterval with the following code executing:
function(){
var container = $('#headerimgs');
var current = container.children('div:visible:first');
var next = (current.next().length > 1) ? current.next() : container.children('div:visible');
current.fadeOut(300);
next.fadeIn(300);
}
Fiddle a bit with the durations to get the exact effect you want. Note, you'll need to position the .headerimg divs absolutely, so they overlap completely.
Trace your fade in / out start and ending...
Chances are it might be an asyncronous error, in which more then one fade in / out is occurring or is left occurring at the same time, that may have been set incorrectly...
This is more of a conjuncture then an answer, however these flickering issues with fadeIn / out, tend to boil down to this (from experience, 90+% of the time).
Also check if you have any mouseover / mouseenter CSS properties / events.
Apologies that i cant trace it myself: as i cant seem to repro the error either.
Random : Chrome sometimes do not show these asyncronous errors, due to it being too fast. The error can end up being a frame (or none), that is effectively invisible to the eye. Likewise for really fast computers.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With