mouseover, mousemove, mouseout, mousedown, mouseup

Javascript onmouseover und onmouseout vs Touchscreens

mouseover feuert, wenn die Maus über einem Element bewegt wird. mouseover entdeckt die Bewegung der Maus, sobald der Cursor die Grenze zum Element passiert hat (mousemove hingegen bereits an der Grenze zum Element).

23-02-02 SITEMAP

Touch-Events

Über viele Jahre haben onmouseover / onmouseout und ihr CSS-Pendant :hover dem Benutzer gezeigt, dass hier Aktionen und Effekte ausgelöst werden können und Benutzerschnittstellen verständlich rübergebracht. Heute müssen wir für Touchscreens alternative Mittel einsetzen.

Touch-Pads am Notebook und Smartphones und Touchscreens reagieren nicht unbedingt und schon gar nicht wie einst auf Maus-Events, sondern auf Touch-Events und auf Gesten.

HOVER!
Over / Out

Es ist nicht einmal möglich, die Reaktion vorauszusagen. Vielleicht reagiert der Touchscreen auf CSS :hover, vielleicht nicht. Vielleicht wechselt der Hover-Button die Farbe wie beim Hovern mit der Maus, vielleicht friert der Effekt auf dem Touchscreen ein. Die Ära von :hover ist vorbei.

Kaum anders sieht es mit dem altgedienten mouseover und mouseout aus. Das Hovern mit der Maus kann also nicht einfach mit onmouseover und onmouseout ersetzt ersetzt werden, sondern die Javascript-Variante braucht zusätzlich touch-Events.

onmousedown, onmouseup

Javascript mouseup ruft einen Event Handler auf, wenn eine Maustaste über einem Element losgelassen wird. onmousedown ruft einen Event-Handler auf, wenn der Benutzer eine Taste der Maus über einem Element herunterdrückt.

Das Herunterdrücken einer Maustaste erzeugt immer drei Ereignisse: mousedown, mouseup und click, die in dieser Reihenfolge nacheinander abgearbeitet werden. Jedes Ereignis muss abgearbeitet sein, bevor das nächste Ereignis beginnen kann.

onmousedown – schnellere Reaktion bei Animationen

Auf den ersten Blick scheint onmousedown viel mit dem onclick-Event gemeinsam zu haben. Der entscheidende Unterschied: Das Event onmousedown feuert bereits, wenn der Benutzer die Maustaste herunterdrückt. Das Event onclick feuert, wenn die Taste heruntergedrückt und losgelassen wurde. onclick ist also eine Kombination aus onmousedown und onmouseup. mousedown anstelle von click kann dem Benutzer eine viel schnellere Reaktion bescheren als click.

onmousedown wird nicht oft verwendet, denn in den meisten Programmen kann der Benutzer den versehentlichen Klick auf ein Element noch zurücknehmen, indem er mit der bereits gedrückten Maustaste das Element wieder verläßt. Das funktioniert beim onclick-Event, nicht aber beim onmousedown-Event.

Hier ist also nichts mit »schnell noch runter vom Button«. Der Button reagiert bereits, wenn der Benutzer die Maustast auf dem Button herunterklickt, noch bevor die Maustaste wieder losgelassen wird.

document.getElementById('theButton').onmousedown = function (evt) {
   let  elem = evt.target;
   document.getElementById('thisBox').innerHTML = 
         'event.target = ' + elem.tagName + 
         ' event.type = ' + evt.type + 
         ' event.button ' + evt.button;
}

Auf die Box klicken, um die Hintergrundfarbe zu ändern

document.getElementById('thisBox').onmouseup = function (event) {
   this.setAttribute ('style','background: #E4F1F9');
}

Reagiert erst, wenn der Mausbutton losgelassen wird.

onmousemove

Javascript onmousemove ruft einen Event Handler auf, wenn die Maus über einem Element bewegt wird. mousemove feuert bei jedem Pixel, um den die Maus bewegt wird.

onmousemove bleibt aktiv, solange sich der Mauszeiger innerhalb des Elements befindet. Wenn der Mauszeiger das Element verlässt, wird onmouseout feuern.

<div id="theInput"></div>
<p id="thisBox"></p>
document.getElementById('theInput').onmousemove = function(evt) {
   let  elem = evt.target;
   let  redbox = document.getElementById('redbox');
   redbox.innerHTML = 'pageX ' + evt.pageX + 
                     ' pageY ' + evt.pageY + 
                     ' clientX ' + evt.clientX + 
                     ' clientY ' + evt.clientY + ' ' + mousedown;
}

mousedown ist die Abfrage, ob ein Button der Maus gedrückt ist, während die Maus über einem Bereich hovert.

let mouseDown = 0;
document.body.onmousedown = function() { 
  ++mouseDown;
}
document.body.onmouseup = function() {
  --mouseDown;
}

Quelle: JavaScript: Check if mouse button down? auf stackoverflow.com

mouseover: woher kam die Maus?

Nicht nur das Entdecken eines mouseover ist interessant, sondern auch die Frage, woher die Maus kam.

mouse over entdecken
<div><img src="submarine.webp" id="image1" /></div>
<p id="response"></p>
document.getElementById('image1').onmouseover = function (evt) {
    let  theBox = this.parentNode;
    let  elem = evt.target;
    let  relTarget = evt.relatedTarget;
    let  response = document.getElementById ('response');
    response.style.display = "block";
    response.innerHTML = ' Maus kommt von ' + relTarget.tagName + 'Auslösendes Element ist ' + elem.tagName; 
    if (this.src == 'img/mouseout.png') {
        this.src = 'img/mouseover.png';
    } else {
        this.src = 'img/mouseout.png';
    } 
}

onmouseout

Javascript onmouseout löst einen Event Handler aus, wenn die Maus aus einem Element herausbewegt wird. Das mouseout-Event feuert in dem Augenblick, in dem der Mauszeiger die Grenze des Elements von innen nach außen überquert.

Das onmouseout-Event liefert im Parameter »relatedTarget« auch das Element, das die Maus beim Event betritt.

Vorsicht: Meist erwarten wir ein mouseover-Ereignis, aber hier tritt das Ereignis erst ein, wenn die Maus aus dem Bild herausbewegt wird.

Bildeffekt bei mouseout
const lion = document.querySelector("#lionout");
lion.addEventListener ("mouseout", function () {
	this.classList.add ("lionisout")
}); 

Eigenschaften von Mouse Events

button
die Maustaste, die das Ereignis auslöst
relatedTarget
Beim mouseover das Element, das die Maus verlässt, wenn sie das Ereignis-auslösende Element betritt, beim mouseout-Ereignis das Element, das die Maus betritt, wenn sie das Ereignis-auslösende Element verlässt.
type
Typ des Ereignisses
target
Objekt zu dem das Ereignis ursprünglich gesendet wurde
eventPhase
Phase, in der das Ereignis bearbeitet wird: AT_TARGET, BUBBLING_PHASE, CAPTURING_PHASE
bubbles
true, wenn das Ereignis nach oben steigen kann
cancelable
true, wenn die Aktion des Ereignis verhindert werden kann
timeStamp
Zeit in Millisekunden, zu der das Ereignis eingetreten ist
screenX, screenY, clientX, clientY
Position des Mauszeigers zum Zeitpunkt des Ereignisses
altKey, ctrlKey, shiftKey, metaKey
zusätzlich gedrückte Tasten