Ich schreibe eine Website, die sowohl von Desktops als auch von Tablets verwendet werden soll. Wenn es von einem Desktop aus besucht wird, sollen die anklickbaren Bereiche des Bildschirms mit :hover
Effekten (unterschiedliche Hintergrundfarben usw.) beleuchtet werden. Bei einem Tablet gibt es keine Maus, daher möchte ich keine Hover-Effekte.
Das Problem ist, wenn ich auf etwas auf dem Tablet tippe, hat der Browser offensichtlich eine Art "unsichtbaren Mauszeiger", der sich an die Stelle bewegt, auf die ich getippt habe, und ihn dann dort belässt - also leuchtet das Ding, auf das ich gerade getippt habe, mit einem auf Hover-Effekt, bis ich auf etwas anderes tippe.
Wie kann ich die Hover-Effekte erzielen, wenn ich die Maus verwende, sie jedoch unterdrücken, wenn ich den Touchscreen verwende?
Falls jemand daran gedacht hat, es vorzuschlagen, möchte ich kein User-Agent-Sniffing verwenden. Das gleiche Gerät könnte sowohl einen Touchscreen als auch eine Maus haben (vielleicht nicht so häufig heute, aber viel mehr in Zukunft). Ich interessiere mich nicht für das Gerät, ich interessiere mich dafür, wie es derzeit verwendet wird: Maus oder Touchscreen.
Ich habe bereits versucht , die Einhaken touchstart
, touchmove
und touchend
Ereignisse und ruft preventDefault()
auf allen von ihnen, die nicht unterdrückt die „unsichtbare Maus - Cursor“ einen Teil der Zeit; Wenn ich jedoch schnell zwischen zwei verschiedenen Elementen hin und her tippe, bewegt sich nach ein paar Fingertipps der "Mauszeiger" und die Hover-Effekte leuchten trotzdem auf - es ist, als würde ich preventDefault
nicht immer geehrt. Ich werde Sie nicht mit den Details langweilen, es sei denn, dies ist notwendig - ich bin mir nicht einmal sicher, ob dies der richtige Ansatz ist. Wenn jemand eine einfachere Lösung hat, bin ich ganz Ohr.
Bearbeiten: Dies kann mit Moor-Standard-CSS reproduziert werden :hover
, aber hier ist eine kurze Repro als Referenz.
<style>
.box { border: 1px solid black; width: 150px; height: 150px; }
.box:hover { background: blue; }
</style>
<div class="box"></div>
<div class="box"></div>
Wenn Sie mit der Maus über eines der Felder fahren, wird ein blauer Hintergrund angezeigt, den ich möchte. Wenn Sie jedoch auf eines der Felder tippen, wird auch ein blauer Hintergrund angezeigt, was ich verhindern möchte.
Ich habe auch eine Probe geschrieben hier , dass die oben tut und auch Haken jQuery Mausereignisse. Sie können damit sehen, dass Tap-Ereignisse ebenfalls ausgelöst werden mouseenter
, mousemove
und mouseleave
.