In diesem Artikel werden zuverlässige Methoden zur Erkennung von Benutzereingabegeräten (Touch, Maus, Stift) in der Webentwicklung untersucht, die über unzuverlässige Techniken wie Bildschirmgrößenprüfungen oder User-Agent-Sniffing hinausgehen. Der Schwerpunkt liegt auf der Nutzung von CSS-Medienabfragen, insbesondere pointer
, hover
und any-pointer
, für eine genaue Gerätefähigkeitserkennung. Diese Abfragen liefern genaue Informationen über Eingabemodalitäten und führen zu zugänglicheren und reaktionsschnelleren Webanwendungen.
Obwohl einfachere Ansätze bequem erscheinen mögen, führen sie oft zu ungenauen Ergebnissen. Wenn beispielsweise ein Benutzer eine Maus mit einem Smartphone verbindet, werden größenbasierte Annahmen ungültig. CSS Media Queries bieten eine überlegene Lösung und liefern präzise Daten basierend auf tatsächlichen Geräteeigenschaften.
CSS-Medienabfragen: Ein zuverlässiger Ansatz
Dieser Artikel befasst sich mit pointer
und hover
Medienabfragen und demonstriert deren Implementierung als React-Hooks.
pointer
Medienabfrage
Die pointer
Medienabfrage ermittelt das Vorhandensein und die Präzision eines Zeigegeräts. Es gibt einen von drei Werten zurück:
-
none
: Kein Zeigegerät verfügbar (z. B. sprachgesteuerte Geräte). -
coarse
: Ein Zeigegerät ist vorhanden, aber es mangelt an Präzision (z. B. Finger auf einem Touchscreen). -
fine
: Ein hochpräzises Zeigegerät ist verfügbar (z. B. Maus).
Die window.matchMedia
-Methode bietet bequemen Zugriff auf Medienabfrageergebnisse innerhalb des Codes.
useMatchMedia
Haken
Um Coderedundanz zu vermeiden, wird ein benutzerdefinierter useMatchMedia
-Hook erstellt, um Medienabfrageergebnisse abzurufen und zu verfolgen. Dieser Hook nutzt window.matchMedia
und fügt einen Ereignis-Listener hinzu, um Änderungen im Übereinstimmungsstatus der Abfrage zu erkennen. Eine Bereinigungsfunktion stellt sicher, dass der Listener entfernt wird, wenn die Bereitstellung der Komponente aufgehoben wird oder sich die Abfrage ändert.
export const useMatchMedia = (query: string) => { const [matches, setMatches] = useState(false); useEffect(() => { const media = window.matchMedia(query); if (media.matches !== matches) { setMatches(media.matches); } const listener = () => setMatches(media.matches); media.addEventListener('change', listener); return () => media.removeEventListener('change', listener); }, [matches, query]); return matches; };
Erkennung primärer Zeigerfähigkeiten
Der usePrimaryPointerQuery
-Hook bestimmt den primären Zeigertyp. Es ruft useMatchMedia
mit Abfragen für die Zeigertypen none
, coarse
und fine
auf und gibt den entsprechenden Wert aus einer Pointers
-Aufzählung zurück.
import { useMatchMedia } from './useMatchMedia.ts'; import { Pointers } from './types.ts'; export const usePrimaryPointerQuery = () => { const isNone = useMatchMedia('(pointer: none)'); const isCoarse = useMatchMedia('(pointer: coarse)'); const isFine = useMatchMedia('(pointer: fine)'); if (isNone) { return Pointers.none; } else if (isCoarse) { return Pointers.coarse; } else if (isFine) { return Pointers.fine; } };
Erkennen zusätzlicher Zeigerfunktionen
Während nur ein primärer Zeiger vorhanden ist, können Geräte sekundäre Zeiger haben (z. B. Bluetooth-Tastatur, Joystick). Die any-pointer
Medienabfrage prüft die Genauigkeit aller verfügbaren Zeiger. Der useAnyPointerQuery
-Hook akzeptiert einen Zeigertyp und verwendet useMatchMedia
mit einer dynamisch generierten Abfragezeichenfolge.
export const useMatchMedia = (query: string) => { const [matches, setMatches] = useState(false); useEffect(() => { const media = window.matchMedia(query); if (media.matches !== matches) { setMatches(media.matches); } const listener = () => setMatches(media.matches); media.addEventListener('change', listener); return () => media.removeEventListener('change', listener); }, [matches, query]); return matches; };
Funktionierende Demo
Eine vollständige Demo mit den Haken ist verfügbar:
Erweiterte Erkennung: hover
und any-hover
hover
und any-hover
Medienabfragen verfeinern die Erkennung weiter, indem sie auf Hover-Funktionen prüfen. Die Kombination mit pointer
-Abfragen ermöglicht eine genauere Geräteidentifizierung.
Pointer value | Hover value | Device |
---|---|---|
coarse | none | Modern touch screens |
fine | none | Stylus-based devices |
coarse | hover | Joystick or TV remote |
fine | hover | Mouse |
Beispiel: Erkennen eines Stifts als primäre Eingabe:
import { useMatchMedia } from './useMatchMedia.ts'; import { Pointers } from './types.ts'; export const usePrimaryPointerQuery = () => { const isNone = useMatchMedia('(pointer: none)'); const isCoarse = useMatchMedia('(pointer: coarse)'); const isFine = useMatchMedia('(pointer: fine)'); if (isNone) { return Pointers.none; } else if (isCoarse) { return Pointers.coarse; } else if (isFine) { return Pointers.fine; } };
Dieser Ansatz gewährleistet eine robustere und genauere Erkennung von Benutzereingabegeräten, was zu einer besseren Benutzererfahrung und Zugänglichkeit führt.
Das obige ist der detaillierte Inhalt vonSo erkennen Sie Touch-Geräte mithilfe von Browser-Medienabfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Für eine Weile war iTunes der große Hund im Podcasting. Wenn Sie also "Abonnieren Sie Podcast" verlinkt haben, um zu mögen:

Wir haben die Oper verloren, als sie 2013 Chrome gingen. Gleiches Geschäft mit Edge, als es Anfang dieses Jahres auch Chrome ging. Mike Taylor nannte diese Veränderungen a "abnehmend

Von trashigen Clickbait -Websites bis hin zu den meisten August der Veröffentlichungen sind die Teilen von Schaltflächen seit langem im gesamten Web allgegenwärtig. Und doch ist es wohl diese diese

In der Roundup der Woche geht Apple in Webkomponenten, wie Instagram Insta-Loading-Skripte und einige Lebensmittel für das Denken für selbsthosting kritische Ressourcen sind.

Als ich die Dokumentation von Git -Befehlen durchschaut hatte, bemerkte ich, dass viele von ihnen eine Option hatten. Ich dachte anfangs, dass dies nur ein war

Klingt ein bisschen wie ein schweres Problem. Ist es nicht? Wir haben oft keine Produktaufnahmen in Tausenden von Farben, sodass wir das mit dem mit umdrehen können. Wir auch nicht

Ich mag es, wenn Websites eine dunkle Modusoption haben. Der dunkle Modus erleichtert mir das Lesen von Webseiten und hilft meinen Augen, sich entspannter zu fühlen. Viele Websites, einschließlich

Ich schaue mir das HTML -Element zum ersten Mal an. Ich habe es für eine Weile dessen bewusst, aber Haven ' Es wurde es noch nicht für einen Dreh genommen. Es hat einige ziemlich cool und


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung