Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

background image's fadeInOut transitions produces weird effect in white all the texts

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?

like image 787
Toni Michel Caubet Avatar asked Dec 13 '11 11:12

Toni Michel Caubet


2 Answers

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.

like image 184
daan Avatar answered Oct 11 '22 06:10

daan


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.

like image 22
PicoCreator Avatar answered Oct 11 '22 08:10

PicoCreator