• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

287
Vistas
Javascript: ¿llamar a una función para el mismo evento diferente del elemento?

Estoy tratando de hacer esto más abstracto. Necesito encontrar una manera de usar una función para el mismo elemento y diferentes eventos. También me gustaría poder pasar un argumento de elemento, pero sé que no puedo hacer esto con una devolución de llamada. Esto es lo que tengo hasta ahora:

 const divElement = document.querySelector('#test'); divElement.addEventListener( 'mouseenter', (event) => { divElement.classList.add('shadow'); console.log(event); }, false ); divElement.addEventListener( 'mouseleave', (event) => { divElement.classList.remove('shadow'); console.log(event); }, false );
over 3 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Utilice CSS en su lugar. Nunca use JS para lo que se puede lograr en CSS.

 #test { background-color: white; padding: 30px; transition: all 0.4s ease; } #test:hover { box-shadow: 0 0 10px #000; }
 <div id="test"> Lorem ipsum dolor sit amentur. </div>

Si por alguna razón no reveló que necesita que esté basado en detectores de eventos, esto es lo que haría:

 const divElement = document.querySelector('#test'); function handleMouseAction({type}) { this.classList.toggle('shadow', type === 'mouseenter'); } divElement.addEventListener('mouseenter', handleMouseAction, false); divElement.addEventListener('mouseleave', handleMouseAction, false);
 #test { padding: 30px; transition: all 0.4s ease; } .shadow { box-shadow: 0 0 10px #000; }
 <div id="test"> Lorem ipsum dolor sit amentur. </div>

over 3 years ago · Juan Pablo Isaza Denunciar

0

Puede escribir una función auxiliar y llamarla desde las dos devoluciones de llamada:

 const divElement = document.querySelector('#test'); function handleEvent(event, action) { divElement.classList[action]('shadow'); console.log(event); } divElement.addEventListener('mouseenter', (event) => handleEvent(event, 'add'), false); divElement.addEventListener('mouseleave', (event) => handleEvent(event, 'remove'), false);

Alternativamente, puede usar una aplicación parcial con cierres para crear las dos devoluciones de llamada a partir de una función abstracta:

 const divElement = document.querySelector('#test'); function makeEventHandler(action) { return (event) => { divElement.classList[action]('shadow'); console.log(event); }; } divElement.addEventListener('mouseenter', makeEventHandler('add'), false); divElement.addEventListener('mouseleave', makeEventHandler('remove'), false);

Por supuesto, @Wyck tiene razón y, en este ejemplo en particular, debe hacer todo solo con CSS :-)

over 3 years ago · Juan Pablo Isaza Denunciar

0

Mi manera de hacer eso:

 const divElement = document.querySelector('#test'); const events = ["mouseenter", "mouseleave"] events.forEach(event => { divElement.addEventListener(event, (e) => { // TODO put logic here. divElement.classList.add('shadow'); console.log(event); }) })

Otra forma de hacerlo es usando la etiqueta onmouseenter="" y la etiqueta onmouseleave="" y permitiéndoles usar la misma callback de llamada.

 const callback = (element) => { element.classList.add("shadow"); }
 .shadow { display: block; box-shadow: 0 0 10px black; }
 <div onmouseenter="callback(this)" onmouseleave="callback(this)">Hello World</div>

over 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda