Unerwünschtes HTML-Element flackert

8

Ich habe an einem schnellen Stift für ein Projekt gearbeitet, als es zu flackernden Problemen kam, wenn ein Element über ein Bild gezogen wurde, das ich verwende. Nicht wirklich sicher, was hier vor sich geht, scheint das Problem nicht aufzutreten, wenn Sie zuerst den Stift laden und es beim ersten Mal schwenken, aber danach beginnt es abzustehen.

Link zum Stift

Snippet-Demo:

%Vor% %Vor% %Vor%
%Vor%     
Jacob Farenci 23.02.2018, 18:54
quelle

3 Antworten

3

Der Hover-Effekt berücksichtigt den Cursor und tatsächlich bewegen Sie ein Element mit dem Cursor, was passiert:

  1. Sie beginnen innerhalb des Elements .tagger und alles ist in Ordnung, da sich der Cursor auf dem Element .tagger befindet. Kein Ereignis in #crowd , da der Cursor die #crowd bis jetzt nicht berührt / verschoben hat .

  2. Sobald Sie auf etwas klicken oder etwas tun, das den Cursor auf #crowd bringt, lösen Sie den Hover -Effekt aus, was bedeutet, dass Sie das mouseleave! stark>

  3. Sie bewegen sich also erneut auf das Element .tagger und lösen das mouseleave wie erwartet aus.
  4. Das Element verschwindet (aufgrund dessen, was in der Prozedur von mouseleave geschrieben wurde) und der Cursor befindet sich jetzt auf #crowd und Sie lösen erneut den Hover! aus
  5. Das Element .tagger erscheint wieder, der Cursor steht darauf und Sie lösen das mouseleave von #croud aus und so weiter ...

Das Flimmern ist die unendliche Folge (4) (5) (4) (5) (4) ...

Um dies zu beheben, können Sie die Logik wie folgt ändern. Sie müssen die Funktion "verstecken / anzeigen" nicht anwenden, Sie können das Bild und .tagger -Element einfach in denselben Wrapper einfügen und overflow:hidden anwenden und dann nur die Klickereignisse beibehalten.

Hier ist der vollständige Code (Ich habe das Bild verkleinert, damit wir es im reduzierten Ausschnitt sehen können)

%Vor% %Vor% %Vor%
    
Temani Afif 23.02.2018 19:34
quelle
0

Sie nehmen an, dass .tagger genau die Grenze ist, die Sie gezeichnet haben. In Wirklichkeit gibt es dort eine unsichtbare Box. Die unsichtbare Box befindet sich oben auf #crowd. Wenn .tagger geladen wird, schwebt du nicht länger über #crowd, du schwebst über .tagger, was über #crowd liegt.

Um es zu beheben, können Sie .tagger von einer großen Box um die Maus herum auf 4 dünne Kästchen ändern, so dass sich nichts direkt unter der Maus befindet.

    
Clayton Engle 23.02.2018 19:26
quelle
0

Sie haben fortlaufend hide() und show() .tagger wiederholt. mouseleave versteckt und :hover zeigt.

Es gibt zwei Möglichkeiten, dies zu beheben:

  1. verschiebt den mouseover-Effekt innerhalb des #crowd .hover()

  2. Löschen Sie den .delete() -Aufruf innerhalb des .mouseleave -Handlers

Auch ein Hinweis: Die Methode jQuery .hover() benötigt zwei Callbacks:    1. für die mouseenter    2. für die mouseleave

Also könnte der Code auch in dieser Hinsicht ein bisschen geändert werden.

    
Randy Casburn 23.02.2018 19:11
quelle

Tags und Links