Eventos Del Mouse
Eventos Del Mouse
info/mouse-events-basics
Comprar EPUB/PDF
ES
24 de junio de 2022
Ten en cuenta que tales eventos pueden provenir no sólo del “dispositivo mouse”, sino también de otros
dispositivos, como teléfonos y tabletas, donde se emulan por compatibilidad.
mousedown/mouseup
mouseover/mouseout
mousemove
click
Se activa después de mousedown y un mouseup enseguida sobre el mismo elemento si se usó el botón.
dblclick
Se activa después de dos clicks seguidos sobre el mismo elemento. Hoy en día se usa raramente.
contextmenu
Se activa al pulsar el botón derecho del ratón. Existen otras formas de abrir el menú contextual, por ejemplo:
usando un comando especial de teclado también puede activarse, de manera que no es exactamente un
evento exclusivo del mouse.
Por ejemplo , un click izquierdo primero activa mousedown cuando se presiona el botón, enseguida
1 de 8 24/3/24, 19:16
Eventos del Mouse https://es.javascript.info/mouse-events-basics
En casos así, el orden es fijo. Es decir, los controladores son llamados en el siguiente orden mousedown →
mouseup → click .
Haz click en el botón abajo y verás los eventos. Intenta con doble click también.
En el testeador de abajo todos los eventos quedan registrados. Si hay mas de un segundo de retraso entre
cada uno de ellos quedan separados por una línea horizontal.
Además podemos ver la propiedad de button que nos permite detectar el botón del mouse. Lo
explicaremos a continuación.
Haz click sobre mí con el botón izquierdo o derecho del mouse Clear
Normalmente no la usamos para eventos click y contextmenu events, porque sabemos que ocurren
solo con click izquierdo y derecho respectivamente.
Por otro lado, los controladores mousedown y mouseup pueden necesitar event.button ya que estos
eventos se activan con cualquier botón, y button nos permitirá distinguir entre “mousedown derecho” y
“mousedown izquierdo”.
La mayoría de los dispositivos de ratón sólo tienen los botones izquierdo y derecho, por lo que los valores
posibles son 0 o 2 . Los dispositivos táctiles también generan eventos similares cuando se toca sobre ellos.
También hay una propiedad event.buttons que guarda todos los botones presionados actuales en un
solo entero, un bit por botón. En la práctica, esta propiedad es raramente utilizada. Puedes encontrar más
2 de 8 24/3/24, 19:16
Eventos del Mouse https://es.javascript.info/mouse-events-basics
El obsoleto event.which
El código puede utilizar la propiedad event.which que es una forma antigua no estándar de obtener
un botón con los valores posibles:
● shiftKey : Shift
● altKey : Alt (p Opt para Mac)
● ctrlKey : Ctrl
● metaKey : Cmd para Mac
3 de 8 24/3/24, 19:16
Eventos del Mouse https://es.javascript.info/mouse-events-basics
En la mayoría de las aplicaciones, cuando Windows/Linux usan Ctrl , en Mac se usa Cmd .
Es decir: cuando un usuario de Windows usa Ctrl+Enter o Ctrl+A , un usuario Mac presionaría
Cmd+Enter o Cmd+A , y así sucesivamente.
Entonces si queremos darle soporte a combinaciones como Ctrl +click, entonces para Mac tendría
más sentido usar Cmd +click. Esto es más cómodo para los usuarios de Mac.
Incluso si quisiéramos obligar a los usuarios de Mac a hacer Ctrl +click – esto supone algo de
dificultad. El problema es que: un click izquierdo con Ctrl es interpretado como click derecho en
MacOS, y esto genera un evento contextmenu , no un click como en Windows/Linux.
Así que si queremos que los usuarios de todos los sistemas operativos se sientan cómodos, entonces
junto con ctrlKey debemos verificar metaKey .
Pero si su dispositivo no lo tiene – entonces debería haber una manera de vivir sin teclas modificadoras.
En resumen, las coordenadas relativas al documento pageX/Y se cuentan desde la esquina superior
izquierda del documento y no cambian cuando se desplaza la página, mientras que clientX/Y se cuentan
desde la esquina superior actual. Cambian cuando se desplaza la página.
Por ejemplo, si tenemos una ventana del tamaño 500x500, y el mouse está en la esquina superior izquierda,
entonces clientX y clientY son 0 , sin importar cómo se desplace la página.
Y si el mouse está en el centro, entonces clientX y clientY son 250 , No importa en qué parte del
documento se encuentren. Esto es similar a position:fixed en ese aspecto.
Mueve el mouse sobre el campo de entrada para ver clientX/clientY (el ejemplo está dentro del
iframe , así que las coordenadas son relativas al iframe ):
4 de 8 24/3/24, 19:16
Eventos del Mouse https://es.javascript.info/mouse-events-basics
Por ejemplo, un doble clic en el texto de abajo lo selecciona además de activar nuestro controlador:
Si se pulsa el botón izquierdo del ratón y, sin soltarlo, mueve el ratón, también hace la selección, a menudo
no deseado.
Hay varias maneras de evitar la selección, que se pueden leer en el capítulo Selection y Range.
En este caso particular, la forma más razonable es evitar la acción del navegador mousedown . Esto evita
ambas selecciones:
1 Antes...
2 <b ondblclick="alert('Click!')" onmousedown="return false">
3 Haz doble click en mí
4 </b>
5 ...Después
Ahora el elemento en negrita no se selecciona con doble clic, y al mantener presionado el botón izquierdo y
arrastrar no se iniciará la selección.
Tenga en cuenta: el texto dentro de él todavía es seleccionable. Sin embargo, la selección no debe comenzar
en el texto en sí, sino antes o después. Por lo general, eso está bien para los usuarios.
5 de 8 24/3/24, 19:16
Eventos del Mouse https://es.javascript.info/mouse-events-basics
Previniendo copias
Si queremos inhabilitar la selección para proteger nuestro contenido de la página del copy-paste,
entonces podemos utilizar otro evento: oncopy .
Querido usuario, El copiado está prohibida para ti. Si sabes JS o HTML entonces
puedes obtener todo de la fuente de la página.
Seguramente el usuario tiene acceso a la fuente HTML de la página, y puede tomar el contenido desde
allí, pero no todos saben cómo hacerlo.
Resumen
Los eventos del mouse tienen las siguientes propiedades:
● Botón: button .
● Si quieres controlar las acciones de la tecla Ctrl no te olvides de los usuarios de Mac que
generalmente usan Cmd , de manera que es mejor verificar con la condicional: if (e.metaKey ||
e.ctrlKey) .
● Coordenadas relativas a la ventana: clientX/clientY .
La acción predeterminada del navegador mousedown es la selección del texto, si no es bueno para la
interfaz, entonces debe evitarse.
En el próximo capítulo veremos más detalles sobre los eventos que siguen al movimiento del puntero y cómo
rastrear los cambios de elementos debajo de él.
Tareas
Lista seleccionable
6 de 8 24/3/24, 19:16
Eventos del Mouse https://es.javascript.info/mouse-events-basics
importancia: 5
Cree una lista donde los elementos son seleccionables, como en los administradores de archivos.
● Un clic en un elemento de la lista selecciona solo ese elemento (agrega la clase .selected ),
deselecciona todos los demás.
● Si se hace un clic con Ctrl ( Cmd para Mac), el estado seleccionado/deseleccionado cambia para ese
solo elemento, los otros elementos no se modifican.
Demo:
• Christopher Robin
• Winnie-the-Pooh
• Tigger
• Kanga
• Rabbit. Just rabbit.
PD: Para esta tarea, podemos suponer que los elementos de la lista son solo de texto. No hay etiquetas
anidadas.
PPD: Evita la selección nativa del navegador del texto en los clics.
solución
Abrir la solución en un entorno controlado.
Comentarios
● Si tiene sugerencias sobre qué mejorar, por favor enviar una propuesta de GitHub o una solicitud
de extracción en lugar de comentar.
● Si no puede entender algo en el artículo, por favor explique.
7 de 8 24/3/24, 19:16
Eventos del Mouse https://es.javascript.info/mouse-events-basics
● Para insertar algunas palabras de código, use la etiqueta <code> , para varias líneas –
envolverlas en la etiqueta <pre> , para más de 10 líneas – utilice una entorno controlado
(sandbox) (plnkr, jsbin, codepen…)
8 de 8 24/3/24, 19:16