Foros del Web » Programando para Internet » Javascript »

MouseOver en rectángulos de canvas

Estas en el tema de MouseOver en rectángulos de canvas en el foro de Javascript en Foros del Web. Buenos días, tengo creado un gráfico con canvas con varios rectángulos en horizontal uno detrás de otro. Me gustaría poder hacer "mouseover" encima de cada ...
  #1 (permalink)  
Antiguo 07/01/2014, 02:20
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 19 años, 2 meses
Puntos: 0
MouseOver en rectángulos de canvas

Buenos días,

tengo creado un gráfico con canvas con varios rectángulos en horizontal uno detrás de otro.

Me gustaría poder hacer "mouseover" encima de cada rectángulo para mostrar, por ejemplo una div.

Gracias.

Saludos
  #2 (permalink)  
Antiguo 07/01/2014, 02:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: MouseOver en rectángulos de canvas

Tomas el elemento a afectar con el evento mouseover y le añades dicho evento, en donde, cuando se produzca, ejecute una función.

Código HTML:
Ver original
  1. <canvas id = "miCanvas"></canvas>
  2. <div id = "miDiv"></div>

Código CSS:
Ver original
  1. #miDiv {
  2.     display: none;
  3. }

Código Javascript:
Ver original
  1. var miCanvas = document.getElementById("miCanvas"),
  2.     miDiv = document.getElementById("miDiv");
  3.  
  4. //Para mostrar el Div
  5. miCanvas.addEventListener("mouseover", function(){
  6.     miDiv.style.display =  "block";
  7. }, false);
  8.  
  9. //Para ocultar el Div
  10. miCanvas.addEventListener("mouseout", function(){
  11.     miDiv.style.display =  "none";
  12. }, false);

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 07/01/2014, 02:51
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: MouseOver en rectángulos de canvas

Hola,

gracias por la respuesta pero lo necesitaría para cada rectángulo dibujado.

Saludos
  #4 (permalink)  
Antiguo 07/01/2014, 03:26
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: MouseOver en rectángulos de canvas

Hola:

No he visto como poner dinamismo a las imágenes canvas (supongo que será posible), pero con el formato svg sí que se puede hacer: SVG: creación dinámica...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 07/01/2014, 05:01
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: MouseOver en rectángulos de canvas

Hola,

sino encuentro solución para canvas intentaré pasarlo a svg

Saludos

gracias.
  #6 (permalink)  
Antiguo 07/01/2014, 11:32
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: MouseOver en rectángulos de canvas

Si lo necesitas para cada figura, pues toma todos los elementos canvas y aplícales los eventos.

Código HTML:
Ver original
  1.     <canvas></canvas>
  2.     <div>UNO</div>
  3.  
  4.     <canvas></canvas>
  5.     <div>DOS</div>
  6.  
  7.     <canvas></canvas>
  8.     <div>TRES</div>

Código Javascript:
Ver original
  1. var misCanvas = document.getElementsByTagName("canvas"),
  2.     misDivs = document.getElementsByTagName("div");
  3.  
  4. for (i = 0, limite = misCanvas.length; i < limite; i++) {
  5.     (function(fig){
  6.         //Formamos la figura
  7.         var figura = misCanvas[fig].getContext("2d");
  8.         figura.fillStyle = "#f00";
  9.         figura.fillRect(0, 0, 80, 100);
  10.        
  11.         //Para mostrar el Div
  12.         misCanvas[fig].addEventListener("mouseover", function(){
  13.             misDivs[fig].style.display =  "block";
  14.         }, false);
  15.  
  16.         //Para ocultar el Div
  17.         misCanvas[fig].addEventListener("mouseout", function(){
  18.             misDivs[fig].style.display =  "none";
  19.         }, false);
  20.     })(i);  
  21. }

Básicamente, tomo todos los canvas y Divs del documento y con ayuda de un bucle, voy formando las figuras de los canvas y les aplico los eventos mouseover y mouseout para que se muestre el Div respectivo al posar el puntero del mouse en cada figura. Utilizo una función anónima auto-ejecutable para aplicar correctamente los eventos y creación de figuras a cada canvas.

Aquí puedes ver cómo funciona esto.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 07/01/2014 a las 11:50
  #7 (permalink)  
Antiguo 07/01/2014, 11:55
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: MouseOver en rectángulos de canvas

Hola,

muchas gracias por el trabajo pero solo estoy creando un canvas y en él dibujo varios rectángulos:


Código HTML:
context=canvas.getContext("2d");

for....
    context.fillStyle = color;
    context.fillRect(izquierda,arriba,ancho,alto); 
..
Necesito el onmouseover y onmouseout de cada rectángulo (por ejemplo 6 rectángulos) dibujados en 1 canvas.

Saludos
  #8 (permalink)  
Antiguo 07/01/2014, 12:21
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: MouseOver en rectángulos de canvas

Normalmente, lo que se hace es obtener las coordenadas del mouse sobre el canvas (para eso pueden usarse offsetLeft y offsetTop o las poropidades de event: layerX y layerY u offsetX y offsetY -estas últimas para Explorer-). Una vez que se tienen las coordenadas del mouse, con la propiedad data de getImageData podés obtener el color del pixel sobre el que se encuentra el mouse y así manejar el rollOver de manera condicional:
Código:
//en pseudocódigo:
if(color==rojo){
    hacer lo que quiero que pase cuando estoy en rectángulo rojo
}else if(color==verde){
     hacer lo que quiero que pase cuando estoy en rectángulo verde
}
  #9 (permalink)  
Antiguo 07/01/2014, 12:51
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 10 meses
Puntos: 206
Respuesta: MouseOver en rectángulos de canvas

Los rectángulos de tu gráfica se describirán y se dibujarán por su coordenada superior izquierda, un ancho y un alto.
Por otro lado, ya te han dicho cómo obtener la posición del ratón sobre un elemento CANVAS. Oséase, un punto, una coordenada.

Pues bien, con un sencillísimo algoritmos de detección de colisiones entre un rectángulo y un punto, que cualquiera debería poder programar, podrás saber sobre qué rectángulo tiene el usuario colocado el ratón.

De hecho, así funciona el motor interno de todas las aplicaciones gráficas que quieran detectar eventos del ratón, incluídos navegadores, escritorios de sistemas operativos, aplicaciones de escritorio, etc.
  #10 (permalink)  
Antiguo 07/01/2014, 14:19
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: MouseOver en rectángulos de canvas

Hola,

gracias por las respuestas.

Esperaba encontrar algo como lo que comentó caricatos con SVG y el ejemplo del enlace que publicó pero si no hay otra opción lo haré por la posición del ratón y píxeles tal como decís.

Saludos
  #11 (permalink)  
Antiguo 07/01/2014, 17:20
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: MouseOver en rectángulos de canvas

Hola:

No sé las razones para usar canvas, pero lo que quieres supongo que puede conseguirse de otras maneras... cuadrados pueden simularse con simples capas (div) con posicionamiento absoluto... o con los clásicos mapas de imágenes... sabiendo las coordenadas (si creas un canvas, seguro que las sabes...)

En mi página también puedes encontrar un mapa de España con imágenes de sustitución para el efecto rollover...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #12 (permalink)  
Antiguo 08/01/2014, 01:35
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: MouseOver en rectángulos de canvas

Buenos días,

la idea era hacer un gráfico de barras horizontal acumulativo en una misma fila (como una barra de progreso).

Miré con canvas la facilidad de hacer rectángulos y me puse a ello. Una vez lo tengo todo montado me doy cuenta que necesitaría algo de interactividad como pasar el ratón por encima e indicar valores y esas cosas.

Bueno ahora tengo varios casos para probar. O puedo hacer con svg o mediante coordenadas/pixeles.

Quizás otra opción podrían ser las simples divs utilizando ...addEventListener("mouseover", function(){...

Gracias por las respuestas.

Saludos

Etiquetas: canvas, mouseover
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:20.