Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/10/2012, 10:32
m3cubo
Invitado
 
Mensajes: n/a
Puntos:
Aplicar efecto Canvas a varios elementos

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).

Me funciona para que una imagen reciba el efecto, pero mi pregunta es, ¿se puede aplicar un efecto Canvas a varios elementos, como si fuese una clase CSS?
¿Cómo puedo hacerlo?

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 (Imágenes).

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


Me he puesto a toquetear el Javascript, pero nada. También he buscado, pero no he encontrado nada parecido. Tengo poca experiencia con Canvas, pero supongo que lo que quiero hacer es perfectamente factible.


Saludos!