Me tropecé con un problema extraño. El siguiente código hace que la imagen se desvanezca porque está sobregirada por un rectificador semiopaco una y otra vez.rgba fillStyle con alfa no se vuelve completamente opaco si se aplica varias veces
Pero al menos en la 10 ª iteración de draw();
la imagen debe estar completamente sobregirado, porque el rect debe ser completamente opaco para entonces, ¿no? Pero en realidad nunca desaparece por completo.
Este efecto es peor en Chrome que en Firefox. Pero cuidado: las malas pantallas pueden ocultar este comportamiento defectuoso =)
También hice un demo en jsFiddle.
$(function() {
var canvas = $("#mycanvas"),
ctx = canvas[0].getContext("2d"),
imgUrl = "http://it-runde.de/dateien/2009/august/14/25.png";
var image = new Image();
image.src = imgUrl ;
$(image).load(function() {
ctx.drawImage(image, 0, 0, canvas.width(), canvas.height());
draw();
});
function draw() {
ctx.fillStyle = "rgba(255, 255, 255, 0.1)";
ctx.fillRect(0,0,canvas.width(),canvas.height());
setTimeout(draw, 100);
}
});
El efecto uno puede desear alcanzar es que, digamos que un objeto se mueve por todo el lienzo, y las posiciones ya dibujadas obtener descubierto sólo ligeramente después de iluminarse de efecto después de decoloración. Pero este resultado es simplemente fugly.
¿Hay alguna solución para esto?
Recuerde que funciona sin lienzo "recordar" al estado anterior. Por lo tanto, un alfa de '0.1' no significa que después de 10 veces lo haya hecho completamente opaco, sino que la opacidad será '(1 - 0.1) * (1 - 0.1) * ...' que nunca alcanzará '0'. – pimvdb