Ich verwende jQuery auf meiner Site und möchte bestimmte Aktionen auslösen, wenn ein bestimmtes Div sichtbar gemacht wird.
Ist es möglich, eine Art "sichtbarer" Ereignishandler an beliebige Divs anzuhängen und bestimmten Code auszuführen, wenn der Div sichtbar gemacht wird?
Ich möchte so etwas wie den folgenden Pseudocode:
$(function() {
$('#contentDiv').isvisible(function() {
alert("do something");
});
});
Der Alarmcode ("etwas tun") sollte erst ausgelöst werden, wenn contentDiv tatsächlich sichtbar gemacht wird.
Vielen Dank.
javascript
jquery
frankadelic
quelle
quelle
Antworten:
Sie können die ursprüngliche .show () -Methode jederzeit ergänzen, damit Sie nicht jedes Mal Ereignisse auslösen müssen, wenn Sie etwas anzeigen oder wenn Sie es für die Arbeit mit Legacy-Code benötigen:
Jquery-Erweiterung:
Anwendungsbeispiel:
Auf diese Weise können Sie effektiv etwas vor und nach der Show ausführen, während Sie das normale Verhalten der ursprünglichen .show () -Methode ausführen.
Sie können auch eine andere Methode erstellen, damit Sie die ursprüngliche .show () -Methode nicht überschreiben müssen.
quelle
fadeTo
Funktion nach der Implementierung dieser Funktion nicht richtig funktioniertDas Problem wird von Beobachtern der DOM-Mutation angesprochen . Mit ihnen können Sie einen Beobachter (eine Funktion) an Ereignisse binden, bei denen sich Inhalt, Text oder Attribute von dom-Elementen ändern.
Mit der Veröffentlichung von IE11 unterstützen alle gängigen Browser diese Funktion. Überprüfen Sie http://caniuse.com/mutationobserver
Der Beispielcode lautet wie folgt:
quelle
Es gibt kein natives Ereignis, in das Sie sich einbinden können. Sie können jedoch ein Ereignis aus Ihrem Skript auslösen, nachdem Sie das div mithilfe von sichtbar gemacht haben. Trigger - Funktion
z.B
quelle
show()
von mehreren anderen Stellen als dem oben beschriebenen Codeblock aufgerufen wird?onIsVisible
da die Verwendung von "isVisible" derzeit etwas mehrdeutig ist.Sie können das Live Query-Plugin von jQuery verwenden . Und schreiben Sie den Code wie folgt:
Jedes Mal, wenn contentDiv sichtbar ist, wird "etwas tun" benachrichtigt!
quelle
Die Lösung von redsquare ist die richtige Antwort.
Als IN-THEORY-Lösung können Sie jedoch eine Funktion schreiben, die die nach
.visibilityCheck
( nicht alle sichtbaren Elemente ) klassifizierten Elemente auswählt und derenvisibility
Eigenschaftswert überprüft . wenntrue
dann etwas tun.Danach sollte die Funktion regelmäßig mit der
setInterval()
Funktion ausgeführt werden. Sie können den Timer mit der Taste stoppenclearInterval()
nach erfolgreichem Abruf .Hier ist ein Beispiel:
Sie können auch einige Leistungsverbesserungen vornehmen. Die Lösung ist jedoch im Grunde genommen absurd, um in Aktion verwendet zu werden. So...
quelle
display:none
?Der folgende Code (abgerufen von http://maximeparmentier.com/2012/11/06/bind-show-hide-events-with-jquery/ ) ermöglicht Ihnen die Verwendung
$('#someDiv').on('show', someFunc);
.quelle
el.apply(this, arguments)
, um dies zu beheben.Wenn Sie das Ereignis für alle Elemente (und untergeordneten Elemente) auslösen möchten, die tatsächlich sichtbar gemacht werden, durch $ .show, toggle, toggleClass, addClass oder removeClass:
Und jetzt dein Element:
Sie können zusätzlichen jQuery-Funktionen Überschreibungen hinzufügen, indem Sie sie dem Array oben hinzufügen (z. B. "attr").
quelle
Ein Auslöser für das Ausblenden / Zeigen von Ereignissen, der auf Glenns Idee basiert: Das Umschalten wurde entfernt, da es das Ausblenden / Ausblenden auslöst und wir keine 2 Feuer für ein Ereignis wollen
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
Verwenden Sie jQuery-Wegpunkte:
Weitere Beispiele auf der Website von jQuery Waypoints .
quelle
Was mir hier geholfen hat, ist die aktuelle Polyfill mit ResizeObserver-Spezifikation :
Beachten Sie, dass es Crossbrowser und Performant ist (kein Polling).
quelle
Ich habe eine einfache Setintervall-Funktion ausgeführt, um dies zu erreichen. Wenn ein Element mit der Klasse div1 sichtbar ist, wird div2 als sichtbar festgelegt. Ich kenne keine gute Methode, aber eine einfache Lösung.
quelle
Sie können auch versuchen, das jQuery-Plugin wie im parallelen Thread https://stackoverflow.com/a/3535028/741782 erwähnt anzuzeigen
quelle
Diese Unterstützung erleichtert und löst ein Ereignis aus, nachdem die Animation abgeschlossen ist! [getestet auf jQuery 2.2.4]
Inspiriert von http://viralpatel.net/blogs/jquery-trigger-custom-event-show-hide-element/
quelle
Binden Sie einfach einen Trigger mit dem Selektor und fügen Sie den Code in das Triggerereignis ein:
quelle
Es gibt ein jQuery-Plugin, mit dem Sie Änderungen an DOM-Attributen beobachten können.
https://github.com/darcyclarke/jQuery-Watch-Plugin
Das Plugin wird verpackt. Sie müssen lediglich MutationObserver binden
Sie können es dann verwenden, um das div zu beobachten, indem Sie:
quelle
Hoffe, dies wird die Arbeit auf einfachste Weise erledigen:
quelle
Ich habe den Auslöser für das Ausblenden / Anzeigen von Ereignissen in Catalint basierend auf Glenns Idee geändert. Mein Problem war, dass ich eine modulare Anwendung habe. Ich wechsle zwischen Modulen, die Divs-Eltern ein- und ausblenden. Wenn ich dann ein Modul verstecke und ein anderes zeige, habe ich mit seiner Methode eine sichtbare Verzögerung, wenn ich zwischen Modulen wechsle. Ich brauche dieses Ereignis nur manchmal zu beleuchten, und bei einigen besonderen Kindern. Deshalb habe ich beschlossen, nur die Kinder mit der Klasse "displayObserver" zu benachrichtigen.
Wenn ein Kind dann auf das Ereignis "Zeigen" oder "Verstecken" hören möchte, muss ich ihm die Klasse "displayObserver" hinzufügen, und wenn es nicht weiter hören möchte, entferne ich ihm die Klasse
Ich wünsche Hilfe
quelle
Ein Weg, dies zu tun.
Funktioniert nur bei Sichtbarkeitsänderungen, die durch CSS-Klassenänderungen vorgenommen werden, kann jedoch erweitert werden, um auch auf Attributänderungen zu achten.
quelle
meine Lösung:
Anwendungsbeispiel:
quelle
quelle
Diese automatische Code-Steuerung erfordert keine sichtbare oder nicht sichtbare Abfrage
quelle