Cómo hacer que un div sea visible al pasar el mouse pero desaparezca al hacer clic

En este artículo, abordaremos un problema común en el desarrollo web: hacer que un menú desplegable (dropdown) sea visible al pasar el mouse sobre él y que desaparezca al hacer clic en una opción del menú. A continuación, presentaremos una solución que combina CSS y JavaScript.

Problema

Al hacer clic en una opción del menú desplegable, el menú sigue visible hasta que el mouse se mueve fuera de él. El objetivo es hacer que el menú desaparezca inmediatamente después de hacer clic, como si el mouse se hubiera movido.

Código Actual

Aquí está el código que se está utilizando actualmente:

<div class="dropdown">
   <button class="dropbtn">Mouse Actions</button>
   <div class="dropdown-content_Mouse">
      <a href="javascript:foo();">Cancel</a>
      <a href="javascript:foo();">Reset to Original</a>
      <a href="javascript:foo();">Vertical Line</a>
      <!-- Otras opciones -->
  </div>
</div>
.dropdown-content_Mouse {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  z-index: 2;
}

.dropdown:hover .dropdown-content_Mouse {
  display: block;
}
function foo() {
  // Aquí va la lógica que se debe ejecutar
}

Solución Propuesta

Para resolver el problema, podemos modificar la función foo() para que altere el estilo del menú desplegable y lo oculte cuando se hace clic en una opción. A continuación, se muestra la implementación completa:

<div class="dropdown">
   <button class="dropbtn" onclick="toggleDropdown()">Mouse Actions</button>
   <div class="dropdown-content_Mouse" id="myDropdown">
      <a href="javascript:foo();">Cancel</a>
      <a href="javascript:foo();">Reset to Original</a>
      <a href="javascript:foo();">Vertical Line</a>
      <!-- Otras opciones -->
  </div>
</div>
.dropdown-content_Mouse {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  z-index: 2;
}

.dropdown:hover .dropdown-content_Mouse,
.dropdown-content_Mouse.show {
  display: block;
}
function toggleDropdown() {
    document.getElementById("myDropdown").classList.toggle("show");
}

function foo() {
    // Lógica que debe ejecutarse
    toggleDropdown(); // Ocultar el dropdown cuando se hace clic
}

Explicación de los Cambios

  1. Agregar Función toggleDropdown: Esta función alterna la visibilidad del menú desplegable usando una clase CSS llamada show.

  2. Modificar el CSS: Se ha agregado una regla para mostrar el menú desplegable cuando tiene la clase show, además de la regla existente que permite mostrarlo al pasar el mouse.

  3. Actualizar el evento de clic: La función foo() ahora llama a toggleDropdown(), lo que asegura que el menú se oculta inmediatamente al hacer clic en una opción.

Conclusión

Con estos cambios, el menú desplegable se volverá invisible inmediatamente al hacer clic en una opción, sin necesidad de mover el mouse fuera del área del menú. Esta solución mejora la experiencia del usuario al interactuar con el menú.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *