Signatur
Beschreibung
Die Eigenschaft ctrlKey der Schnittstelle TouchEvent ist schreibgeschützt. Sie ist true, wenn die Strg-Taste (Control) gedrückt war, als das Ereignis erzeugt wurde, sonst false. Sie funktioniert genauso wie die gleichnamigen Eigenschaften von MouseEvent und KeyboardEvent.
Gebraucht wird sie vor allem auf Geräten mit Touchscreen und Tastatur, etwa Convertibles, Tablets mit angedockter Tastatur oder Touch-Laptops. Dort kann man eine Geste mit Modifikator anders auswerten als ohne, zum Beispiel Strg + Tippen für Mehrfachauswahl oder Strg + Ziehen zum Kopieren statt Verschieben.
Der Wert gilt für das ganze Ereignis, nicht für einzelne Berührungspunkte in touches bzw. changedTouches. Zusammen mit shiftKey, altKey und metaKey beschreibt er den vollständigen Zustand der Modifikatortasten.
Rückgabewert
true, wenn beim Auslösen des Ereignisses die Strg-Taste gedrückt war, sonst false.Beispiele
Strg-Status beim Berühren protokollieren
const flaeche = document.querySelector('#zeichenflaeche');
flaeche.addEventListener('touchstart', (event) => {
console.log(`Strg gedrückt: ${event.ctrlKey}`);
});
Mehrfachauswahl mit Strg + Tippen
const liste = document.querySelector('#dateiliste');
liste.addEventListener('touchend', (event) => {
const eintrag = event.target.closest('li');
if (!eintrag) return;
if (event.ctrlKey) {
// Auswahl umschalten, andere Einträge bleiben ausgewählt
eintrag.classList.toggle('ausgewaehlt');
} else {
// Einzelauswahl: zuerst alle anderen abwählen
liste.querySelectorAll('li.ausgewaehlt')
.forEach((li) => li.classList.remove('ausgewaehlt'));
eintrag.classList.add('ausgewaehlt');
}
});
Synthetisches TouchEvent mit ctrlKey erzeugen (z. B. für Tests)
const ziel = document.body;
ziel.addEventListener('touchstart', (e) => {
console.log('ctrlKey:', e.ctrlKey);
}, { once: true });
if ('TouchEvent' in window) {
const ereignis = new TouchEvent('touchstart', {
bubbles: true,
cancelable: true,
ctrlKey: true
});
ziel.dispatchEvent(ereignis);
}
Alle Modifikatoren gemeinsam auswerten
document.addEventListener('touchstart', ({ ctrlKey, shiftKey, altKey, metaKey }) => {
const aktiv = Object.entries({ ctrlKey, shiftKey, altKey, metaKey })
.filter(([, gedrueckt]) => gedrueckt)
.map(([name]) => name);
console.log(aktiv.length ? `Modifikatoren: ${aktiv.join(', ')}` : 'Keine Modifikatoren');
}, { passive: true });
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
event.ctrlKey = truehat keine Wirkung. Den Wert kann man nur beim Erzeugen über das Init-Objekt vonnew TouchEvent()setzen. - Ohne Tastatur immer
false: Auf reinen Smartphones und Tablets ohne Hardware-Tastatur ist der Wert praktisch immerfalse. Wichtige Funktionen sollten deshalb nicht nur über Strg + Berührung erreichbar sein. - macOS/iOS: Auf Apple-Systemen ist die übliche Modifikatortaste Cmd. Diese meldet
metaKey, nichtctrlKey. Für plattformübergreifendes Verhalten prüft man ofte.ctrlKey || e.metaKey. - Kompatibilität:
TouchEventgibt es in Chrome, Edge, Firefox (auf Desktop-Systemen teils nur mit Touch-Hardware) sowie in Safari auf iOS/iPadOS, aber nicht in Desktop-Safari. Vor dem Einsatz mit'TouchEvent' in windowprüfen. Für Maus, Stift und Touch zusammen sindPointerEvents meist die bessere Wahl; sie bieten ebenfallsctrlKey. - Verwendet man in
touchstartbzw.touchmovepreventDefault(), darf der Listener nicht alspassiveregistriert sein.