Signatur
Beschreibung
Das mouseup-Ereignis ist das Gegenstück zu mousedown. Es wird ausgelöst, sobald eine Maustaste (links, Mitte, rechts oder eine Zusatztaste) über einem Element losgelassen wird. Das Ereignis ist vom Typ MouseEvent, steigt im DOM auf (Bubbling) und lässt sich abbrechen.
Registrieren kannst du einen Handler entweder per element.addEventListener("mouseup", handler) oder über die Eigenschaft element.onmouseup = handler. Mit addEventListener kannst du mehrere Handler anhängen und sie gezielt mit removeEventListener wieder entfernen. Die on-Eigenschaft nimmt immer nur einen Handler auf.
Typische Einsatzfälle sind Drag-and-Drop-Logik, Zeichenflächen, eigene Schieberegler und Auswahlwerkzeuge, also alles, bei dem der Zeitpunkt des Loslassens zählt. Welche Taste losgelassen wurde, steht in event.button (0 = links, 1 = Mitte, 2 = rechts). event.buttons gibt die Tasten an, die danach noch gedrückt sind.
Die Reihenfolge der Ereignisse bei einem normalen Klick ist mousedown → mouseup → click. click wird aber nur ausgelöst, wenn Drücken und Loslassen auf demselben Element stattfinden. mouseup kommt dagegen immer bei dem Element an, über dem sich der Zeiger beim Loslassen befindet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Der Ereignisname "mouseup". |
|
| $handler Pflicht | (event: MouseEvent) => void | Callback, der ein MouseEvent erhält, u. a. mit button, buttons, clientX/clientY, offsetX/offsetY, target und den Zusatztasten-Flags shiftKey, ctrlKey, altKey und metaKey. |
|
| $options | boolean | { capture?: boolean, once?: boolean, passive?: boolean, signal?: AbortSignal } | false | Optionale Listener-Optionen. once: true entfernt den Listener nach dem ersten Aufruf automatisch. Mit signal lässt er sich über einen AbortController entfernen. |
Rückgabewert
addEventListener gibt nichts zurück. Der Rückgabewert des Handlers wird ignoriert. Standardverhalten unterdrückst du mit event.preventDefault().Beispiele
Losgelassene Taste per addEventListener erkennen
const box = document.querySelector('#box');
const tastenNamen = ['links', 'mitte', 'rechts', 'zurück', 'vor'];
box.addEventListener('mouseup', (event) => {
const name = tastenNamen[event.button] ?? `Taste ${event.button}`;
console.log(`Losgelassen: ${name} bei (${event.offsetX}, ${event.offsetY})`);
});
Drag-Vorgang robust beenden (mouseup auf document)
const griff = document.querySelector('.slider-griff');
let ziehen = false;
const onMove = (e) => {
if (!ziehen) return;
griff.style.left = `${e.clientX}px`;
};
const onUp = () => {
ziehen = false;
document.removeEventListener('mousemove', onMove);
document.removeEventListener('mouseup', onUp);
console.log('Ziehen beendet');
};
griff.addEventListener('mousedown', (e) => {
e.preventDefault(); // Textauswahl verhindern
ziehen = true;
// Auf document lauschen, damit das Loslassen auch außerhalb des Griffs ankommt
document.addEventListener('mousemove', onMove);
document.addEventListener('mouseup', onUp);
});
Handler über onmouseup setzen und wieder entfernen
const button = document.querySelector('#aufnahme');
button.onmousedown = () => console.log('Aufnahme läuft …');
button.onmouseup = () => {
console.log('Aufnahme gestoppt');
// Nach dem ersten Mal deaktivieren
button.onmouseup = null;
};
Textauswahl nach dem Loslassen auslesen
const artikel = document.querySelector('article');
artikel.addEventListener('mouseup', () => {
const auswahl = window.getSelection()?.toString().trim();
if (auswahl) {
console.log(`Markiert: "${auswahl}"`);
}
});
// Wichtig · Fallstricke
- Loslassen außerhalb des Elements: Lässt der Nutzer die Taste außerhalb des Elements oder sogar außerhalb des Browserfensters los, bekommt das Element kein
mouseup. Bei Drag-Logik lauschst du deshalb aufdocumentoderwindowoder verwendest Pointer Events mitsetPointerCapture(). - Touch und Stift: Auf Touch-Geräten erzeugt der Browser
mouseupnur als Kompatibilitätsereignis, oft verzögert und nicht bei allen Gesten. Für Eingaben mit Maus, Touch und Stift istpointerupdie bessere Wahl. - Rechte Maustaste: Bei
button === 2öffnet sich je nach Betriebssystem das Kontextmenü, und zwar schon beimousedown(macOS) oder erst nachmouseup(Windows). Unterdrücken lässt es sich über das EreigniscontextmenumitpreventDefault(). buttonundbuttons:event.buttonnennt die losgelassene Taste.event.buttonsist eine Bitmaske der Tasten, die danach noch gedrückt sind, und ist nach dem Loslassen der einzigen Taste meist0.- Deaktivierte Elemente: Auf deaktivierten Formularelementen (
disabled) feuern Mausereignisse in vielen Browsern nicht oder uneinheitlich. - Kompatibilität: Wird von allen gängigen Browsern seit Jahren unterstützt. Das Ereignis steigt auf (Bubbling), lässt sich abbrechen und hat die Schnittstelle
MouseEvent.