Browser-Anbieter scheinen :hover
in sehr gebrochenen Weise umzusetzen: Sie einziges Element Zustände, wenn die Maus bewegt, aber nicht wenn Elemente Bewegung (CSS-Animationen, etc.) ändern. Wenn Sie also beispielsweise auf ein Element klicken, das über eine Hover-Regel verfügt, die es aufleuchtet, und durch Klicken auf eine CSS-Animation, die das Element vom Mauszeiger entfernt, , bleibt das Element weiterhin im Status: Hover, was natürlich völlig falsch ist.Hover Zustand auf animierte Elemente
Ich habe jetzt meine eigene Mouseover-Behandlung in einem requestAnimationFrame
Callback implementiert, wo ich alle Elemente gegen die Mausposition überprüfe, aber ernsthaft, das kann nicht notwendig sein? Gibt es keine Möglichkeit, :hover
zu beheben?
Voll Beispiel:
div {
position: absolute;
top: 5rem;
left: 10rem;
width: 3rem;
height: 3rem;
background: red;
transition: left 0.5s;
}
div.moved {
left: 30rem;
}
div:hover {
background: green;
}
<div onclick="this.classList.toggle('moved')"></div>
ich die Argumente in den Kommentaren Zyklen in Bezug auf Wasting CPU gelesen habe ständig die Hover-Zustände aller Elemente auf der Seite zu überprüfen. Wie ich bereits sagte, habe ich dies in Javascript (!) Innerhalb eines Callbacks requestAnimationFrame
implementiert, und ich bemerke keine messbare Abnahme der Leistung. Wenn dies in der Engine des Browsers implementiert wäre, hätte dies keinerlei Auswirkungen auf die Performance. Sollten Browser-Anbieter dies nicht korrekt umsetzen, jetzt im Jahr 2015?
Bitte poste etwas Code, um dein Problem zu sehen. Ich weiß, was du meinst, aber um Dinge zu testen, ist es nützlich, etwas anzufangen. –
https://jsfiddle.net/hzd66e0c/ Ist dies Ihr Beispiel? Es scheint so zu funktionieren, wie Sie es wollen. Der: hover wird entfernt, wenn die Position geändert wird. – Paran0a
@ Paran0a Ich kann bestätigen, wenn das Element klicken und keine weitere Bewegung Bewegung beteiligt, das Element bleibt auf Chrome und Firefox unter OS X 10.11 –