Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML?

Estas en el tema de ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML? en el foro de Javascript en Foros del Web. Buenas noches. La idea es simple: emular el hover de CSS en javascript. He googleado incansablemente, y buscado aquí en Foros del Web , y ...
  #1 (permalink)  
Antiguo 01/01/2014, 18:21
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Sonrisa ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML?

Buenas noches.

La idea es simple: emular el hover de CSS en javascript.


He googleado incansablemente, y buscado aquí en Foros del Web, y resulta que todos los ejemplos y posts tratan el tema pero usando la propiedad onmouseover en el HTML. Algo así:
Código HTML:
Ver original
  1. <img src="img1.png" name="img" onmouseover='img.src="img2.png"' onmouseout='img.src="img1.png"' />


Pero yo deseo hacerlo todo dentro de las etiquetas <script type="text/javascript"></script>

Desde luego, ya intenté esto:
Código Javascript:
Ver original
  1. var imagen = document.getElementById("img");
  2.  
  3.   if ( imagen.onmouseover )
  4.   {
  5.       alert("Pusiste el cursor encima de la imagen");
  6.   }

Pero no sirve!



Saludos cordiales!

  #2 (permalink)  
Antiguo 01/01/2014, 20:14
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 3 meses
Puntos: 9
Respuesta: ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML?

Podrías utilizar la librería jQuery que te facilita las funciones:

Código Javascript:
Ver original
  1. $(document).on('mouseover', '#imagen', function() {
  2.      alert("Pusiste el cursor encima de la imagen");
  3.      $(this).attr('src', 'imagen2.png');
  4. });
  #3 (permalink)  
Antiguo 02/01/2014, 08:32
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML?

Cita:
Iniciado por SeaPirates Ver Mensaje
Podrías utilizar la librería jQuery que te facilita las funciones:

Código Javascript:
Ver original
  1. $(document).on('mouseover', '#imagen', function() {
  2.      alert("Pusiste el cursor encima de la imagen");
  3.      $(this).attr('src', 'imagen2.png');
  4. });
Creo que el estimado dijo que quería en puro JS, además si hubiera querido usar jQuery hubiera posteado en el foro de jQuery. No?

Estas usando mal los eventos, debes usar listeners para poder capturar un determinado evento en un elemento.

Código HTML:
Ver original
  1. <img src="img1.png" id="img" />

Código Javascript:
Ver original
  1. var imagen = document.getElementById("img");
  2.  
  3. imagen.addEventListener("mouseover", function(){
  4.     alert('Hola');
  5.     imagen.src = "img2.png";
  6. }, false);

Demo: http://jsfiddle.net/Lp5GA/

PD: si quieres dar un soporte cross browser mira este tema

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #4 (permalink)  
Antiguo 02/01/2014, 09:32
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML?

Puedes asignarle el evento de dos formas:

Mediante un evento escuchador
Código Javascript:
Ver original
  1. elemento.addEventListener("mouseover", function(){
  2.   //Instrucciones
  3. }, false);

Sobre el elemento
Código Javascript:
Ver original
  1. elemento.onmouseover = function(){
  2.   //Instrucciones
  3. };

Aquí puedes ver un ejemplo en acción.

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
  #5 (permalink)  
Antiguo 02/01/2014, 14:09
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Sonrisa Respuesta: ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML?

Gracias por responder a los maestros jonni09lo y Alexis88 . También agradezco al compañero SeaPirates, aunque ciertamente no es jQuery lo que estoy buscando sino JS puro (aunque por otro lado también sirve, porque me he dado a la tarea de aprender a manejar un poco de jQuery).

Muy bien, entendido, debo hacerlo con addEventListener.

He visto los ejemplos que ponen en jsfiddle.net y funcionan perfectamente. El caso es que los copio tal cual en mi Dreamweaver, los corro y resulta que no jalan. ¿Por qué?

Me he pasado toda la mañana buscando y aprendiendo esto de los escuchadores. Ya aprendí algo y aún no logro ver por qué no funcionan en local los ejemplos que ustedes ponen en jsfiddle.net. Nota: los ejecuté en las últimas versiones de Chrome, Firefox, Opera y en IE11.

Les pongo el código con el que pruebo:

Código HTML:
Ver original
  1. <div id="miDiv" style="width:400px; height:200px; background-color:black;">
  2.   </div>

Código Javascript:
Ver original
  1. elemento = document.getElementById("miDiv");
  2.     elemento.addEventListener("mouseover", function(){
  3.       alert("Pusiste el cursor encima del DIV");
  4.     }, false);

...y no funciona.

Saludos
  #6 (permalink)  
Antiguo 02/01/2014, 14:15
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML?

@berkeleyPunk has probado colocando el codigo javascript dentro de:

Código Javascript:
Ver original
  1. window.onload=function(){
  2.    //código
  3. }

O antes de cerrar body?

Recuerda de que se ejecuta de arriba a abajo el código y si no haces ninguna de las dos cosas antes mencionadas no funcionara ya que javascript no podrá acceder a un elemento que aun no se ha cargado

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #7 (permalink)  
Antiguo 02/01/2014, 14:31
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Sonrisa Respuesta: ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML?

Cita:
Iniciado por jonni09lo Ver Mensaje
@berkeleyPunk has probado colocando el codigo javascript dentro de...

Hubiera jurado que sí probé hacerlo, aunque sin fruto alguno... pero lo acabo de hacer en atención a tu indicación... y funcionó!

Ok, ya sé cómo manejar eventos en JS.

Ya nada más para terminar, comentas:
Cita:
Iniciado por jonni09lo Ver Mensaje
... si no haces ninguna de las dos cosas antes mencionadas no funcionara ya que javascript no podrá acceder a un elemento que aun no se ha cargado
Ojalá puedas aclararme esto, que al parecer no tengo aún muy clara la relación entre terminar de cargarse una página y el buen funcionamiento de los scripts.

Entiendo que un documento web termina de cargarse cuando todos y cada uno de sus elementos se han descargado del servidor en el cliente: la estructura HTML, imágenes, scripts, lo que sea, todo. Entiendo que si tenemos una página con innumerable cantidad de imágenes y de gran tamaño, por ejemplo una web porno, va a tardar algo en cargarse la página, así que en este caso se entiende que no funcionen algunos scripts hasta que no se descarguen todas las imágenes. Pero bueno, supongamos que esperamos 1 largo minuto a que efectivamente se descargue toda la página. Una vez que todo está ya descargado en el cliente, ¿por qué no habrían de funcionar los scripts JS si ya se descargó completamente la página? Entiendo que no jalen cuando todavía está en proceso de descarga, pero ¿por qué no después de terminada la descarga?

Estas preguntas se aplican al ejemplo con el que estoy aprendiendo addEventListener: ok, no funciona el script porque igual y todavía no se descarga la imagen completa, pero ¿por qué no funciona después que ya se descargó?

Saludos

Última edición por berkeleyPunk; 02/01/2014 a las 14:39
  #8 (permalink)  
Antiguo 02/01/2014, 14:40
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML?

Hay dos conceptos que debes de tener en cuenta, uno de ellos es la carga del DOM y la otra es la carga de los elementos de la pagina web. Hay una sutil diferencia. Cuando se carga el DOM, significa que todos los elementos html se han cargado y son accesibles, aún si sus contenidos no están totalmente cargados (como las imagenes por ejemplo)

window.load lo que hace es que cuando se cargue tanto el DOM como los contenidos de la pagina se ejecute la función que determinamos (en este caso añadir un listener a un div). Si no quieres hacer esto para no esperar la "eternidad" a que este disponible todo tienes dos opciones.

1. Ejecutar las acciones cuando el DOM este listo (usando la función domReady de la respuesta aceptada).

2. Colocar los scripts antes de cerrar body para garantizar que los elementos del DOM que queremos acceder ya estén disponibles (recuerda de que el DOM se carga de arriba a abajo)

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #9 (permalink)  
Antiguo 02/01/2014, 14:53
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: ¿Cómo trabajar onmouseover con puro JS sin la propiedad en HTML?

Cita:
Iniciado por jonni09lo Ver Mensaje
Hay dos conceptos que debes de tener en cuenta, uno de ellos es la carga del DOM y la otra es la carga de los elementos de la pagina web. Hay una sutil diferencia...

Justamente ayer estaba leyendo algo sobre lo que comentas. Y para asegurarme que el script funcione hasta que termine de cargarse la página, uso el window.onload, que tiene precisamente esa función, a saber, que se ejecuten las instrucciones que se le pongan dentro, una vez que se haya terminado de cargar la página.

Bien, todo más claro ahora.

Gracias a todos y hasta luego.

Etiquetas: eventos, listeners
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 05:13.