[Resolvido] Bug do Google Chrome!
Fiz um slideshow em JavaScript simples. O php carrega umas imagens e dados da base e passa para o javascript que fica clareando e escurecendo uma div atrás da outra dando a sensação de slideshow - nada que não tenha pilhas de exemplos por aí, mas eu quis fazer a minha!
Funciona perfeito no Safari e no FireFox, mas nada de rodar no Google Chrome (para Mac)!
Após examinar o comportamento de cada variável descobri o bug na forma do número 1.3877787807814457e-16 que é a subração sucessiva da opacidade da div em 0.1.
Ou seja, a div começa com 1 (opaco) e eu vou subraindo 0.1 a cada 100ms até que dá zero (transparente) e passa para a próxima div que eu vou acrescendo 0.1 a partir do zero até chegar a 1 - voilá!
Esta é a parte que trava:
id_slide = 'slide_'+String(slideShowSlide);
slideShowJan = document.getElementById(id_slide);
slideShowJanOpc = Number(slideShowJan.style.opacity);
if(slideShowJanOpc>0){
slideShowJanOpc -= 0.1;
slideShowJan.style.opacity = String(slideShowJanOpc);
} else {
slideShowJan.style.visibility = 'hidden';
slideShowSlide = slideShowNext;
slideShowTimer = slideShowDelay;
}
Como 1.3877787807814457e-16 é maior que zero, ele repete a subtração mas não arredonda para zero. Um bug duplo pois o conjunto utilizado é 1 a 0, então um número negativo deveria gerar um erro ou ser considerado zero (é o que os outros navegadores fazem) além do fato da subtração 0.1 sucessiva gerar este bizarro resultado.
Segue a correção:
id_slide = 'slide_'+String(slideShowSlide);
slideShowJan = document.getElementById(id_slide);
slideShowJanOpc = Number(slideShowJan.style.opacity);
if(slideShowJanOpc>=0.1){
slideShowJanOpc -= 0.1;
slideShowJan.style.opacity = String(slideShowJanOpc);
} else {
slideShowJan.style.visibility = 'hidden';
slideShowSlide = slideShowNext;
slideShowTimer = slideShowDelay;
}
Ou seja, se chegar próximo de zero, eu já mando pro próximo!
No ActionScript eu já me habituei a trabalhar com <= >= mas no JavaScript ainda não tinha aparecido este tipo de problema!
Discussão (2)
Carregando comentários...