Ich erstelle eine Symbolleiste, die in eine Seite aufgenommen wird. Das Div, in das es aufgenommen werden soll, wird standardmäßig angezeigt: none . Gibt es eine Möglichkeit, einen Ereignis-Listener in meine Symbolleiste einzufügen, um zu warten, wann er sichtbar wird, damit er initialisiert werden kann? oder muss ich ihm eine Variable von der enthaltenden Seite übergeben?
Vielen Dank
javascript
JD Isaacks
quelle
quelle
Antworten:
Javascript- Ereignisse befassen sich mit Benutzerinteraktion . Wenn Ihr Code ausreichend organisiert ist, sollten Sie in der Lage sein, die Initialisierungsfunktion an derselben Stelle aufzurufen, an der sich die Sichtbarkeit ändert (dh Sie sollten sich nicht
myElement.style.display
an vielen Stellen ändern , sondern eine Funktion / Methode aufrufen, die dies tut dies und alles andere, was Sie vielleicht wollen).quelle
In Zukunft ist die neue HTML Intersection Observer-API genau das, wonach Sie suchen. Sie können einen Rückruf konfigurieren, der immer dann aufgerufen wird, wenn ein Element, das als Ziel bezeichnet wird, entweder das Geräteansichtsfenster oder ein bestimmtes Element schneidet. Es ist in den neuesten Versionen von Chrome, Firefox und Edge verfügbar. Weitere Informationen finden Sie unter https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API .
Einfaches Codebeispiel zur Beobachtung der Anzeige: keine Umschaltung:
In Aktion: https://jsfiddle.net/elmarj/u35tez5n/5/
quelle
Ich bin vielleicht etwas spät dran, aber Sie können einfach den MutationObserver verwenden, um Änderungen am gewünschten Element zu beobachten. Wenn sich etwas ändert, müssen Sie nur überprüfen, ob das Element angezeigt wird.
quelle
IntersectionObserver
- stackoverflow.com/a/52627221/2803743Es gibt mindestens einen Weg, aber keinen sehr guten. Sie können das Element einfach nach folgenden Änderungen abfragen:
Der DOM-Standard spezifiziert auch Mutationsereignisse , aber ich hatte nie die Möglichkeit, sie zu verwenden, und ich bin mir nicht sicher, wie gut sie unterstützt werden. Sie würden sie so verwenden:
Dieser Code ist mir ein Rätsel, daher bin ich mir nicht sicher, ob er funktionieren würde.
Die beste und einfachste Lösung wäre ein Rückruf in der Funktion zur Anzeige Ihres Ziels.
quelle
Ich hatte das gleiche Problem und habe ein jQuery-Plugin erstellt, um es für unsere Site zu lösen.
https://github.com/shaunbowe/jquery.visibilityChanged
So würden Sie es anhand Ihres Beispiels verwenden:
quelle
.is(':visible')
zusammen mitsetTimeout
.Wie @figha sagt, sollten Sie , wenn dies Ihre eigene Webseite ist , einfach alles ausführen, was Sie ausführen müssen, nachdem Sie das Element sichtbar gemacht haben.
Für die Beantwortung der Frage (und für alle, die Chrome- oder Firefox-Erweiterungen erstellen , sofern dies ein häufiger Anwendungsfall ist) ermöglichen Mutation Summary und Mutation Observer jedoch, dass DOM-Änderungen Ereignisse auslösen.
Auslösen eines Ereignisses für ein Element mit
data-widget
Attribut, das dem DOM hinzugefügt wird. Ausleihen dieses hervorragenden Beispiels aus David Walshs Blog :Antworten umfassen
added
,removed
,valueChanged
und mehr .valueChanged
enthält alle Attribute, einschließlichdisplay
usw.quelle
Sie können auch dieses jQuery-Plugin ausprobieren: https://github.com/morr/jquery.appear
quelle
Nur um die Unterstützung des DOMAttrModified Event Listener-Browsers zu kommentieren:
Browserübergreifende Unterstützung
Diese Ereignisse werden in verschiedenen Browsern nicht konsistent implementiert. Beispiel:
IE vor Version 9 hat die Mutationsereignisse überhaupt nicht unterstützt und einige davon in Version 9 nicht korrekt implementiert (z. B. DOMNodeInserted).
WebKit unterstützt DOMAttrModified nicht (siehe Webkit-Fehler 8191 und die Problemumgehung).
"Mutationsnamenereignisse", dh DOMElementNameChanged und DOMAttributeNameChanged, werden in Firefox (ab Version 11) und wahrscheinlich auch in anderen Browsern nicht unterstützt.
Quelle: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events
quelle
meine Lösung:
beispielsweise:
quelle