Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/10/2012, 09:52
m3cubo
Invitado
 
Mensajes: n/a
Puntos:
Aplicar efecto Canvas

Saludos a todos,

tengo unos iconos a los que quiero aplicar un efecto Canvas, en el que estos tengan una tonalidad grisácea y al pasar el cursor por ellos se iluminen (es decir, vuelva a su color original).

El código que uso detecta el primer elemento canvas y aplica el efecto Canvas.
Pero al tener varias imágenes a las que quiero aplicarles el efecto, son ignoradas por ir "detrás" en el DOM. Es decir, el script actual sólo detecta el primer tag "<canvas>" y el resto no.


Este es el código:

Función Javascript para el Canvas:

Código Javascript:
Ver original
  1. (function() {
  2.              var supportsCanvas = !!document.createElement('canvas').getContext;
  3.              supportsCanvas && (window.onload = greyImages);
  4.      
  5.              function greyImages() {
  6.                 var ctx = document.getElementsByTagName('canvas')[0].getContext('2d'),
  7.                 img = document.getElementById('mycanvas'),
  8.                 imageData, px, length, i = 0,
  9.                 red, green, blue, grey;
  10.      
  11.                 ctx.drawImage(img, 0, 0);
  12.      
  13.                 imageData = ctx.getImageData(0, 0, 640, 400);
  14.                 px = imageData.data;
  15.                 length = px.length;
  16.      
  17.                 for ( ; i < length; i+= 4 ) {
  18.                    // rgba
  19.                    grey = 0.3*px[i] + 0.59*px[i+1] + 0.11*px[i+2];
  20.                    px[i] = px[i+1] = px[i+2] = grey;
  21.                 }
  22.      
  23.                 ctx.putImageData(imageData, 0, 0);
  24.              }
  25.           })();



Código HTML.

Código HTML:
Ver original
  1. /*Esta imagen recibe el efecto*/
  2.      
  3.     <img src="imagen1.png" class="icono" [B]id="mycanvas"[/B] />
  4.     [B]<canvas width=50 height=50></canvas>[/B]
  5.      
  6.     /*Esta imagen no recibe el efecto*/
  7.      
  8.     <img src="imagen2.png" class="icono" [B]id="mycanvas"[/B] />
  9.     [B]<canvas width=50 height=50></canvas>[/B]



Me he puesto a toquetear el Javascript, pero nada. También he buscado, pero no he encontrado nada parecido.


En resumen: Lo que quiero es que, teniendo una sola función Javascript, baste con poner la misma clase a una imagen para que aplique a todas las que tengan esa clase en común el mismo efecto de Canvas (de "iluminar" una imagen).


Estoy bastante perdido. ¿Alguien sabe solucionar esto? Gracias.