Baseline Widely available *
Ein GroÃteil des heutigen Webinhalts geht davon aus, dass das Zeigegerät des Benutzers eine Maus ist. Da jedoch viele Geräte andere Arten von Zeigeeingabegeräten unterstützen, wie z.B. Stift/Stylus und Touch-Oberflächen, sind Erweiterungen der vorhandenen Zeigegeräte-Ereignismodelle erforderlich. Pointer Events adressieren dieses Bedürfnis.
Pointer Events sind DOM-Ereignisse, die für ein Zeigegerät ausgelöst werden. Sie wurden entwickelt, um ein einzelnes DOM-Ereignismodell zu schaffen, um Zeigegeräte wie Maus, Stift/Stylus oder Touch (wie ein oder mehrere Finger) zu handhaben.
Der Pointer ist ein hardware-unabhängiges Gerät, das auf einen bestimmten Satz von Bildschirmkoordinaten abzielen kann. Ein einzelnes Ereignismodell für Pointer zu haben, kann die Erstellung von Websites und Anwendungen vereinfachen und eine gute Benutzererfahrung unabhängig von der Hardware des Benutzers bieten. Für Szenarien, in denen eine gerätespezifische Behandlung erwünscht ist, definiert Pointer Events eine pointerType
-Eigenschaft, um den Gerätetyp zu überprüfen, der das Ereignis verursacht hat.
Die für die Handhabung allgemeiner Zeigereingaben erforderlichen Ereignisse sind analog zu den Mouse Events (mousedown
/pointerdown
, mousemove
/pointermove
, etc.). Folglich sind Pointer Event-Typen absichtlich ähnlich zu den Mouse Event-Typen.
Darüber hinaus enthält ein Pointer Event die üblichen Eigenschaften, die in Mouse Events vorhanden sind (Client-Koordinaten, Ziel-Element, Button-Zustände, etc.) sowie neue Eigenschaften für andere Eingabeformen: Druck, Kontaktgeometrie, Neigung, etc. Tatsächlich erbt das PointerEvent
-Interface alle Eigenschaften des MouseEvent
und erleichtert so die Migration von Inhalten von Mouse Events zu Pointer Events.
Die Bedingung, wenn ein Pointer einen Wert ungleich null für die buttons
-Eigenschaft hat. Zum Beispiel im Fall eines Stifts, wenn der Stift physischen Kontakt zum Digitalisierer hat oder mindestens ein Knopf gedrückt ist, während man hovert.
Jedes Eingabegerät, das Ereignisse erzeugen kann. Ein Pointer gilt als aktiv, wenn er noch weitere Ereignisse erzeugen kann. Zum Beispiel gilt ein Stift im heruntergeklappten Zustand als aktiv, da er weitere Ereignisse erzeugen kann, wenn der Stift angehoben oder bewegt wird.
DigitalisiererEin Erfassungsgerät mit einer Oberfläche, die Kontakt erkennen kann. Meistens ist das Erfassungsgerät ein Touch-fähiger Bildschirm, der Eingaben von einem Eingabegerät wie einem Stift, Stylus oder Finger erkennen kann. Einige Erfassungsgeräte können die nahe Nähe des Eingabegeräts erkennen, und der Zustand wird als Hover im Sinne der Maus ausgedrückt.
Hit-TestDer Prozess, den der Browser verwendet, um ein Ziel-Element für ein Pointer Event zu bestimmen. Typischerweise wird dies bestimmt, indem die Position des Pointers und auch das visuelle Layout von Elementen in einem Dokument auf Bildschirmmedien berücksichtigt wird.
PointerEine hardware-unabhängige Darstellung von Eingabegeräten, die auf eine bestimmte Koordinate (oder einen Satz von Koordinaten) auf einem Bildschirm abzielen können. Beispiele für Pointer-Eingabegeräte sind Maus, Stift/Stylus und Touch Kontakte.
Pointer CapturePointer Capture erlaubt es, die Ereignisse für einen Pointer auf ein bestimmtes Element umzulenken, abweichend vom normalen Hit-Test-Ergebnis der Pointer-Position. Siehe Erfassung des Pointers für ein Beispiel.
Hinweis:>Pointer Capture ist anders als Pointer Lock, das den Pointer physisch daran hindert, eine Region zu verlassen.
Pointer EventEin DOM-event
, das für einen Pointer ausgelöst wird.
Die hauptsächliche Schnittstelle ist die PointerEvent
-Schnittstelle, die einen constructor
plus mehrere Ereignistypen und zugehörige globale Ereignishandler hat.
Der Standard umfasst auÃerdem einige Erweiterungen für die Element
- und Navigator
-Schnittstellen.
Die folgenden Unterabschnitte enthalten kurze Beschreibungen jeder Schnittstelle und ihrer Eigenschaften.
PointerEvent-SchnittstelleDie PointerEvent
-Schnittstelle erweitert die MouseEvent
-Schnittstelle und hat folgende Eigenschaften.
altitudeAngle
Schreibgeschützt
Repräsentiert den Winkel zwischen einer Wandlerebene (einem Zeiger oder Stylus) und der X-Y-Ebene eines Geräts.
azimuthAngle
Schreibgeschützt
Repräsentiert den Winkel zwischen der Y-Z-Ebene und der Ebene, die sowohl die Wandlerachse als auch die Y-Achse enthält.
PointerEvent.persistentDeviceId
Schreibgeschützt
Eine eindeutige Kennung für das Zeigegerät, das das PointerEvent
erzeugt.
pointerId
Schreibgeschützt
Eine eindeutige Kennung für den Zeiger, der das Ereignis verursacht.
width
Schreibgeschützt
Die Breite (Magnitude auf der X-Achse), in CSS-Pixeln, der Kontaktgeometrie des Pointers.
height
Schreibgeschützt
Die Höhe (Magnitude auf der Y-Achse), in CSS-Pixeln, der Kontaktgeometrie des Pointers.
pressure
Schreibgeschützt
Der normalisierte Druck der Zeigereingabe im Bereich von 0
bis 1
, wobei 0
und 1
den minimalen und maximalen Druck darstellen, den die Hardware erfassen kann.
tangentialPressure
Schreibgeschützt
Der normalisierte tangentiale Druck der Zeigereingabe (auch bekannt als Fassdruck oder Zylinderstress) im Bereich von -1
bis 1
, wobei 0
die neutrale Position der Steuerung ist.
tiltX
Schreibgeschützt
Der Ebenenwinkel (in Grad, im Bereich von -90
bis 90
) zwischen der Y-Z-Ebene und der Ebene, die sowohl die Wandlerachse als auch die Y-Achse enthält.
tiltY
Schreibgeschützt
Der Ebenenwinkel (in Grad, im Bereich von -90
bis 90
) zwischen der X-Z-Ebene und der Ebene, die sowohl die Wandlerachse als auch die X-Achse enthält.
twist
Schreibgeschützt
Die Drehung des Pointers (z.B. Stift-Stylus) um seine Hauptachse im Uhrzeigersinn in Grad, mit einem Wert im Bereich von 0
bis 359
.
pointerType
Schreibgeschützt
Gibt den Gerätetyp an, der das Ereignis verursacht hat (Maus, Stift, Touch, etc.).
isPrimary
Schreibgeschützt
Gibt an, ob der Pointer den primären Zeiger dieses Zeigertyps darstellt.
Pointer Events haben zehn Ereignistypen, sieben davon haben ähnliche Semantik wie ihre Maus-Ereignis-Pendants (down
, up
, move
, over
, out
, enter
, und leave
).
Nachfolgend ist eine kurze Beschreibung jedes Ereignistyps.
Ereignis Beschreibungpointerover
Wird ausgelöst, wenn ein Pointer in die Hit-Test-Grenzen eines Elements bewegt wird. pointerenter
Wird ausgelöst, wenn ein Zeiger in die Hit-Test-Grenzen eines Elements oder eines seiner Nachkommen verschoben wird, einschlieÃlich als Ergebnis eines pointerdown
-Ereignisses von einem Gerät, das Hover nicht unterstützt (siehe pointerdown
). pointerdown
Wird ausgelöst, wenn ein Zeiger in den Zustand der aktiven Buttons wechselt. pointermove
Wird ausgelöst, wenn ein Zeiger die Koordinaten ändert. Dieses Ereignis wird auch verwendet, wenn die Ãnderung des Zeigerzustands nicht durch andere Ereignisse gemeldet werden kann. pointerup
Wird ausgelöst, wenn ein Zeiger nicht mehr im Zustand der aktiven Buttons ist. pointercancel
Ein Browser löst dieses Ereignis aus, wenn er feststellt, dass der Zeiger keine Ereignisse mehr erzeugen kann (zum Beispiel, wenn das zugehörige Gerät deaktiviert wird oder der Browser entschieden hat, die Interaktion als Pan/Zoom zu interpretieren). Informationen zur Steuerung dieses Verhaltens finden Sie im Abschnitt zur CSS-Eigenschaft touch-action
unten. pointerout
Wird aus verschiedenen Gründen ausgelöst, einschlieÃlich: Zeiger wird aus den Hit-Test-Grenzen eines Elements bewegt; Auslösen des pointerup-Ereignisses für ein Gerät, das Hover nicht unterstützt (siehe pointerup); nach dem Auslösen des pointercancel-Ereignisses (siehe pointercancel); wenn ein Stift-Stylus den Hover-Bereich des Digitalisierers verlässt. pointerleave
Wird ausgelöst, wenn ein Zeiger aus den Hit-Test-Grenzen eines Elements bewegt wird. Für Stiftgeräte wird dieses Ereignis ausgelöst, wenn der Stylus den Hover-Bereich des Digitalisierers verlässt. pointerrawupdate
Experimentell Wird ausgelöst, wenn ein Zeiger Eigenschaften ändert, die keine pointerdown
- oder pointerup
-Ereignisse auslösen. gotpointercapture
Wird ausgelöst, wenn ein Element Pointer Capture erhält. lostpointercapture
Wird ausgelöst, nachdem Pointer Capture für einen Pointer freigegeben wurde. Element-Erweiterungen
Es gibt drei Erweiterungen der Element
-Schnittstelle:
hasPointerCapture()
Gibt an, ob das aufgerufene Element Pointer Capture für den durch die gegebene Zeiger-ID identifizierten Zeiger hat.
releasePointerCapture()
Gibt die zuvor für ein bestimmtes Zeigerereignis gesetzte Pointer Capture frei (stoppt).
setPointerCapture()
Bestimmt ein bestimmtes Element als Capture-Ziel zukünftiger Zeigerereignisse.
Die Eigenschaft Navigator.maxTouchPoints
wird verwendet, um die maximale Anzahl gleichzeitiger Berührungspunkte zu bestimmen, die zu einem bestimmten Zeitpunkt unterstützt werden.
Dieser Abschnitt enthält Beispiele für die grundlegende Verwendung der Pointer-Events-Schnittstellen.
Registrierung von EreignishandlernDieses Beispiel registriert einen Handler für jeden Ereignistyp für das gegebene Element.
<div id="target">Touch meâ¦</div>
function over_handler(event) {}
function enter_handler(event) {}
function down_handler(event) {}
function move_handler(event) {}
function up_handler(event) {}
function cancel_handler(event) {}
function out_handler(event) {}
function leave_handler(event) {}
function rawUpdate_handler(event) {}
function gotCapture_handler(event) {}
function lostCapture_handler(event) {}
function init() {
const el = document.getElementById("target");
// Register pointer event handlers
el.onpointerover = over_handler;
el.onpointerenter = enter_handler;
el.onpointerdown = down_handler;
el.onpointermove = move_handler;
el.onpointerup = up_handler;
el.onpointercancel = cancel_handler;
el.onpointerout = out_handler;
el.onpointerleave = leave_handler;
el.onpointerrawupdate = rawUpdate_handler;
el.ongotpointercapture = gotCapture_handler;
el.onlostpointercapture = lostCapture_handler;
}
document.addEventListener("DOMContentLoaded", init);
Ereigniseigenschaften
Dieses Beispiel zeigt das Zugreifen auf alle Eigenschaften eines Pointer Events.
<div id="target">Touch meâ¦</div>
const id = -1;
function process_id(event) {
// Process this event based on the event's identifier
}
function process_mouse(event) {
// Process the mouse pointer event
}
function process_pen(event) {
// Process the pen pointer event
}
function process_touch(event) {
// Process the touch pointer event
}
function process_tilt(tiltX, tiltY) {
// Tilt data handler
}
function process_pressure(pressure) {
// Pressure handler
}
function process_non_primary(event) {
// Non primary handler
}
function down_handler(ev) {
// Calculate the touch point's contact area
const area = ev.width * ev.height;
// Compare cached id with this event's id and process accordingly
if (id === ev.identifier) process_id(ev);
// Call the appropriate pointer type handler
switch (ev.pointerType) {
case "mouse":
process_mouse(ev);
break;
case "pen":
process_pen(ev);
break;
case "touch":
process_touch(ev);
break;
default:
console.log(`pointerType ${ev.pointerType} is not supported`);
}
// Call the tilt handler
if (ev.tiltX !== 0 && ev.tiltY !== 0) process_tilt(ev.tiltX, ev.tiltY);
// Call the pressure handler
process_pressure(ev.pressure);
// If this event is not primary, call the non primary handler
if (!ev.isPrimary) process_non_primary(ev);
}
function init() {
const el = document.getElementById("target");
// Register pointerdown handler
el.onpointerdown = down_handler;
}
document.addEventListener("DOMContentLoaded", init);
Bestimmen des primären Zeigers
In einigen Szenarien kann es mehrere Zeiger geben (zum Beispiel ein Gerät mit Touchscreen und Maus) oder ein Zeiger, der mehrere Kontaktpunkte unterstützt (zum Beispiel ein Touchscreen, der mehrere Fingerberührungen unterstützt). Die Anwendung kann die isPrimary
-Eigenschaft verwenden, um einen Hauptzeiger aus der Menge der aktiven Zeiger für jeden Zeigertyp zu identifizieren. Wenn eine Anwendung nur einen primären Zeiger unterstützen möchte, kann sie alle Zeigerereignisse ignorieren, die nicht primär sind.
Eine Maus hat nur einen Zeiger, sodass sie immer der primäre Zeiger sein wird. Für Touch-Eingaben gilt ein Zeiger als primär, wenn der Benutzer den Bildschirm berührt hat, während keine anderen aktiven Berührungen vorhanden waren. Bei Stift- und Stylus-Eingaben gilt ein Zeiger als primär, wenn der Stift des Benutzers den Bildschirm zuerst berührt hat, während keine anderen aktiven Stifte den Bildschirm berührten.
Bestimmen der Button-ZuständeEinige Zeigegeräte (wie Maus und Stift) unterstützen mehrere Knöpfe, und die Knopfdrücke können akkordiert sein (d.h. das Drücken eines zusätzlichen Knopfes, während ein anderer Knopf des Zeigegeräts bereits gedrückt ist).
Um den Zustand der Knopfdrücke zu bestimmen, verwenden Pointer Events die button
- und buttons
-Eigenschaften des MouseEvent
-Interfaces, von dem PointerEvent
erbt.
Die folgende Tabelle gibt die Werte von button
und buttons
für die verschiedenen Knopfzustände des Geräts an.
-1
â Mausbewegung ohne gedrückte Knöpfe, Stift bewegt sich beim Hovern ohne gedrückte Knöpfe â 0
Linke Maus, Berührungskontakt, Stiftkontakt 0
1
Mittlere Maus 1
4
Rechte Maus, Stift-Fasses-Knopf 2
2
Maus X1 (zurück) 3
8
Maus X2 (vorwärts) 4
16
Stift-Radiergummi-Knopf 5
32
Hinweis: Die button
-Eigenschaft gibt eine Ãnderung im Zustand des Knopfes an. Wie im Fall von Touch, wenn mehrere Ereignisse mit einem Ereignis auftreten, haben alle denselben Wert.
Pointer Capture ermöglicht es den Ereignissen für ein bestimmtes Pointer Event, auf ein bestimmtes Element umgeleitet zu werden, anstatt dem normalen Hit-Test bei der Zeigerposition. Dies kann verwendet werden, um sicherzustellen, dass ein Element weiterhin Zeigerereignisse erhält, selbst wenn der Kontakt des Zeigegeräts das Element verlässt (beispielsweise durch Scrollen oder Ziehen).
Pointer Capture sorgt dafür, dass das Ziel alle nachfolgenden Zeigerereignisse so erfasst, als ob sie über dem erfassten Ziel stattfinden würden. Dementsprechend werden pointerover
, pointerenter
, pointerleave
und pointerout
nicht ausgelöst, solange diese Erfassung eingestellt ist. Für Touchscreen-Browser, die direkte Manipulation unterstützen, wird eine implizite Zeigererfassung auf dem Element aufgerufen, wenn ein pointerdown
-Ereignis ausgelöst wird. Die Erfassung kann manuell durch den Aufruf von element.releasePointerCapture
am Ziel-Element freigegeben werden oder sie wird implizit nach einem pointerup
- oder pointercancel
-Ereignis freigegeben.
Hinweis: Wenn Sie ein Element im DOM verschieben müssen, dann stellen Sie sicher, dass Sie setPointerCapture()
nach den DOM-Bewegungen aufrufen, sodass setPointerCapture()
nicht den Ãberblick darüber verliert. Beispielsweise, wenn Sie Element.append()
verwenden müssen, um ein Element woanders hin zu verschieben, dann stellen Sie sicher, dass Sie setPointerCapture()
darauf nur nach dem Aufruf von Element.append()
aufrufen.
Das folgende Beispiel zeigt die Zeigererfassung, die auf ein Element eingestellt wird.
<div id="target">Touch meâ¦</div>
function downHandler(ev) {
const el = document.getElementById("target");
// Element 'target' will receive/capture further events
el.setPointerCapture(ev.pointerId);
}
function init() {
const el = document.getElementById("target");
el.onpointerdown = downHandler;
}
document.addEventListener("DOMContentLoaded", init);
Das folgende Beispiel zeigt die Freigabe einer Zeigererfassung (wenn ein pointercancel
Ereignis auftritt. Der Browser führt dies automatisch aus, wenn ein pointerup
oder pointercancel
Ereignis auftritt.
<div id="target">Touch meâ¦</div>
function downHandler(ev) {
const el = document.getElementById("target");
// Element "target" will receive/capture further events
el.setPointerCapture(ev.pointerId);
}
function cancelHandler(ev) {
const el = document.getElementById("target");
// Release the pointer capture
el.releasePointerCapture(ev.pointerId);
}
function init() {
const el = document.getElementById("target");
// Register pointerdown and pointercancel handlers
el.onpointerdown = downHandler;
el.onpointercancel = cancelHandler;
}
document.addEventListener("DOMContentLoaded", init);
CSS-Eigenschaft touch-action
Die touch-action
CSS-Eigenschaft wird verwendet, um festzulegen, ob der Browser sein Standard-(natürliches) Touch-Verhalten (wie Zoomen oder Scrollen) in einem Bereich anwenden soll oder nicht. Diese Eigenschaft kann auf alle Elemente angewendet werden, auÃer: nicht ersetzte Inline-Elemente, Tabellenzeilen, Zeilengruppen, Tabellenspalten und Spaltengruppen.
Ein Wert von auto
bedeutet, dass der Browser sein Standard-Touch-Verhalten (auf den angegebenen Bereich) frei anwenden kann, und der Wert none
deaktiviert das Standard-Touch-Verhalten des Browsers für den Bereich. Die Werte pan-x
und pan-y
bedeuten, dass Berührungen, die auf dem angegebenen Bereich beginnen, nur für das horizontale bzw. vertikale Scrollen gelten. Der Wert manipulation
bedeutet, dass der Browser Berührungen, die auf dem Element beginnen, nur für das Scrollen und Zoomen berücksichtigen kann.
Im folgenden Beispiel wird das Standard-Touch-Verhalten für einige button
-Elemente deaktiviert.
button#tiny {
touch-action: none;
}
Im folgenden Beispiel wird, wenn das target
-Element berührt wird, nur in horizontaler Richtung gescrollt.
#target {
touch-action: pan-x;
}
Kompatibilität mit Mausereignissen
Obwohl die Pointer Event-Schnittstellen es Anwendungen ermöglichen, verbesserte Benutzererfahrungen auf zeigerfähigen Geräten zu schaffen, ist die Realität, dass der GroÃteil der heutigen Webinhalte nur für die Arbeit mit Mausteingaben ausgelegt ist. Folglich muss der Browser, selbst wenn er Pointer Events unterstützt, dennoch Mausereignisse verarbeiten, sodass Inhalte, die nur auf Maus-Eingaben ausgelegt sind, unverändert funktionieren. Idealerweise muss eine zeigerfähige Anwendung Mausinhalte nicht explizit handhaben. Da der Browser jedoch Mausereignisse verarbeiten muss, kann es einige Kompatibilitätsprobleme geben, die behandelt werden müssen. Dieser Abschnitt enthält Informationen zur Interaktion von Pointer- und Mausereignissen und den Konsequenzen für Anwendungsentwickler.
Der Browser kann allgemeine Pointer-Eingaben in Mausereignisse für die Kompatibilität mit Maus-basierten Inhalten umsetzen. Diese Umsetzung von Ereignissen wird als Kompatibilitäts-Mausereignisse bezeichnet. Autoren können die Erzeugung bestimmter Kompatibilitäts-Mausereignisse verhindern, indem sie das pointerdown-Ereignis abbrechen, beachten Sie jedoch, dass:
mouseover
, mouseout
, mouseenter
und mouseleave
werden niemals verhindert (selbst wenn der Zeiger gedrückt ist).Hier sind einige Best Practices zu beachten, wenn Sie Pointer Events verwenden:
Einige zusätzliche Werte wurden für die CSS-Eigenschaft touch-action
als Teil der Pointer Events-Spezifikation definiert, aber derzeit haben diese Werte eine begrenzte Implementierungsunterstützung.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4