Start · Sprachen · JavaScript · Referenz · MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN

MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN

Eigenschaft

Proprietäre, statische, schreibgeschützte WebKit-Konstante mit der Mindestkraft, ab der ein Klick als Force-Klick gilt (Wert: <code>2</code>).

seit JavaScript Nicht standardisiert: nur Safari (macOS) ab Versio Kategorie: webapi

Signatur

MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN

Beschreibung

MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN ist eine statische Zahlenkonstante am Konstruktor MouseEvent. Sie gehört zur Force-Touch-Erweiterung von Apple in Safari. Ihr Wert gibt an, ab welcher Druckstärke das Trackpad einen „Force-Klick“ (tiefer Klick) erkennt. In Safari hat sie den Wert 2. Die Schwelle für einen normalen Klick liefert MouseEvent.WEBKIT_FORCE_AT_MOUSE_DOWN (Wert 1).

Nützlich ist die Konstante zusammen mit der Instanz-Eigenschaft event.webkitForce, die die aktuelle Kraft angibt. Im Event webkitmouseforcechanged kann man webkitForce mit den beiden Schwellen vergleichen. So lässt sich z. B. anzeigen, wie nah der Nutzer am Force-Klick ist, oder eine Aktion vorzeitig auslösen.

Weil die Konstante statisch ist, liest man sie direkt über MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN aus, nicht über ein Event-Objekt. In allen anderen Browsern ist sie undefined. Deshalb sollte man immer prüfen, ob sie vorhanden ist, bevor man sie benutzt.

Rückgabewert

Typ
number | undefined
Beschreibung
In Safari die Zahl 2, also die Mindestkraft für einen Force-Klick. In Browsern ohne Unterstützung undefined.

Beispiele

Prüfen, ob Force Touch unterstützt wird

const supportsForceTouch = typeof MouseEvent !== 'undefined' &&
  'WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN' in MouseEvent;

console.log('Force Touch verfügbar:', supportsForceTouch);
console.log('Schwelle Force-Klick:', MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN);
Safari (macOS): Force Touch verfügbar: true / Schwelle Force-Klick: 2 Andere Browser: Force Touch verfügbar: false / Schwelle Force-Klick: undefined

Druckstärke als Fortschrittsbalken anzeigen

const button = document.querySelector('#preview');
const bar = document.querySelector('#force-bar');

const MIN = MouseEvent.WEBKIT_FORCE_AT_MOUSE_DOWN ?? 1;
const MAX = MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN ?? 2;

button.addEventListener('webkitmouseforcechanged', (event) => {
  // Anteil zwischen normalem Klick und Force-Klick (0 bis 1)
  const ratio = Math.min(Math.max((event.webkitForce - MIN) / (MAX - MIN), 0), 1);
  bar.value = ratio;
  if (event.webkitForce >= MAX) {
    console.log('Force-Klick erreicht:', event.webkitForce.toFixed(2));
  }
});
Force-Klick erreicht: 2.03

Force-Klick mit Fallback für andere Browser

const link = document.querySelector('#details-link');
const openQuickLook = () => console.log('Schnellvorschau geöffnet');

if ('WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN' in MouseEvent) {
  // Standardvorschau von Safari verhindern
  link.addEventListener('webkitmouseforcewillbegin', (e) => e.preventDefault());
  link.addEventListener('webkitmouseforcedown', openQuickLook);
} else {
  // Fallback: langes Drücken per Pointer Events
  let timer;
  link.addEventListener('pointerdown', () => { timer = setTimeout(openQuickLook, 500); });
  link.addEventListener('pointerup', () => clearTimeout(timer));
  link.addEventListener('pointerleave', () => clearTimeout(timer));
}
Schnellvorschau geöffnet

// Wichtig · Fallstricke

  • Nicht standardisiert: Die Konstante gehört zu keiner Spezifikation. Sie gibt es nur in Safari auf macOS, und nur Geräte mit Force-Touch-Trackpad erzeugen passende Werte. Chrome, Firefox und Edge kennen sie nicht. In Produktivcode sollte man sich nicht darauf verlassen.
  • Statisch, nicht pro Event: Man liest sie über MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN aus. Über ein Event-Objekt (event.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN) ist sie in der Regel nicht erreichbar. Die aktuelle Kraft steht in event.webkitForce.
  • Nur lesbar: Wer der Konstante einen Wert zuweist, ändert nichts. Im strikten Modus kann die Zuweisung einen TypeError auslösen.
  • Standard-Alternative: Pointer Events bieten mit PointerEvent.pressure einen browserübergreifenden Druckwert zwischen 0 und 1. Diese API ist zu bevorzugen.
  • Barrierefreiheit: Force-Klick-Aktionen immer zusätzlich über normale Bedienelemente anbieten, denn viele Nutzer haben kein druckempfindliches Eingabegerät.