jQuery Ajax load HTML-Inhalt mit Bild, wie Sie überprüfen, ob alle Bilder geladen sind?
Ich bin dabei ein Skript für unendliche scrollen für meine Website:
$(window).scroll(function(){
if($(window).scrollTop() == $(document).height() - $(window).height()){
...
$.ajax({
...
success: function(json) {if(json.success){
...
//here I append an Ajax @response with a new element to my existing HTML
$("#mindIndexSummaryFirst").append(json.items1);
$("#mindIndexSummarySecond").append(json.items2);
$("#mindIndexSummaryThird").append(json.items3);
//here I try to check whether all images are loaded
$("#mindIndexSummary img").on('load', function(){
//and I need to call two functions on loaded element
//hoverImg() need the loaded image to calculate the height
$('.pi-hover-img'+json.course).hoverImg();
$(".popup3").tooltip();
});
}
...
});
Einer geladenen HTML-element ist dieses:
<div class="page-item pi-hover-img pi-normal">
<a class="overlayPop" href="#">
<a class="item_uri" id="course153" href="#">
<img src="/public/file/course/image/153-course.png" class="pi-item-image">
</a>
<a href="#" class="popup5 hide-text" style="display: none;">
<img src="/public/file/account/image/282-user.jpeg" class="item_image">
</a>
<a class="popup action-button big_interested " id="course_153" href="javascript:;" style="top: -162.5px; left: 83.5px; display: none;"> Mi interessa</a>
<a href="javascript:;">Description</a>
<a class="popup4 hide-text" href="javascript:;">Preview</a>
<span class="popup2" style="display: none;">1€</span>
<a href="/course/153/gestire-un-pubblico">
<h2 style="top: 320px;">Gestire un pubblico</h2>
<span class="rfloat pi-icon">
<img src="/public/img/site_icon/video_course_black.png">
</span>
<div class="clearfix"></div>
</a>
</div>
Lade ich 5 Elemente, 15 Bilder, aber es gibt eine Möglichkeit, dass weniger Elemente geladen werden.
Das problem ist, dass meine Funktion aufgerufen wurde mehr als einmal (ich Teste das mit alert) und ich bin mir nicht sicher, sicher, dass die Funktion aufgerufen wurde, nach dem Bild laden.
Wenn jemand hatte die gleiche situation bitte machen Sie mir etwas (P. S ich entschuldige mich für mein schlechtes Englisch).
- Die on-load-Ereignishandler nicht für Sie arbeiten?
- laden, feuern, für jedes Bild laden( $("#mindIndexSummary img").Länge mal)
- ja, es funktioniert, jetzt habe ich das problem lösen danke für die Antwort 🙂
- ja jetzt habe ich verstanden 🙂 danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird befestigen Sie den handler, um jedes der Bilder, die der Abfrage entsprechen -, so dass jedes Bild ausgelöst wird die Funktion, wenn es geladen wird - nicht einmal, wenn alle fertig geladen.
Müssten Sie verfolgen die Bilder, die geladen haben, um zu sagen, ob Sie alle geladen.
Entlang der Linien von:
Dies ist eine grobe version einer Lösung, die ich verwendet habe, in einer ähnlichen situation.
numLoaded
ist jedes mal aktualisiert, wenn dieload
- Methode ausgeführt wird, die es Ihnen ermöglicht zu überprüfen, ob die Prognose (numImage
) ist gleich der Summe der geladenen Bilder.Können, können Sie auch einen Schritt weiter gehen und setzen Sie ein
data
Attribut auf das übergeordnete element, das es erlauben würde, die Sie auslösen/beenden andere Ereignisse basierend auf den Wert.Load-Ereignis auf den Bildern ist ein bisschen unzuverlässig (siehe Jquery docs an http://api.jquery.com/load-event/).
Das heißt, es ist möglich, montieren Sie eine Lösung durch die überprüfung individuell für das load-Ereignis auf jedem ausgewählten Bild. Die Chancen sind, dass ein Bild zwischengespeichert wird oder schon geladen bei der Ausführung. In diesem Fall ist das Bild-element haben sollte ".complete" - Attribut.
Machte ich ein kleines jQuery plugin, das zeigt der Ansatz (es gibt mehr vollständige diejenigen, die sowieso):
Das plugin akzeptiert eine hash mit zwei Rückrufe, ein brennen jedes mal, wenn ein Bild geladen wird (das Bild wird als parameter übergeben), die andere, wenn alle Bilder geladen sind (das array von images wird als parameter übergeben).
Es nicht vollständig ist, mit allen Macken, aber es sollte Ihnen eine Allgemeine Idee.
Ich machte eine kleine demo zur Verfügung zu http://jsfiddle.net/GYJGK/.
Dies ist eine Beschreibung, wie man erstellen Sie eine Globale variable (ein array), die wird verfolgen jedes einzelne Bild geladen wird. Auf diese Weise können Sie aktiv zu prüfen, wenn alle Bilder geladen sind, mit Hilfe von callback-Funktionen.
Jede position im array wird verfolgen, welches Bild geladen wurde. So zum Beispiel, wenn Bild 2 in der Liste der 10 Bilder geladen wurden, das array würde dann so Aussehen (denken Sie daran array-Indizes bei 0 beginnen):
Können sagen, Sie haben eine Liste der Bilder, Sie sind dynamisch nachladen basierend auf Benutzer-Interaktion (z.B. klickt der Benutzer auf aktualisieren, um eine neue Reihe von Bildern zur Auswahl). Sobald alle Bilder geladen haben, möchten Sie warnen den Benutzer, dass die Bilder geladen haben (oder eine andere Art von Funktion). Starten Sie durch das erste einrichten ein onload-event des Bildes, das geladen wird.
Nächsten Satz die Quelle der Bild, wie Sie normalerweise tun würde. Dies löst den onload selbst und die Funktion aufrufen.
Den track image-load-Zustand wird hinzufügen, dass das Bild geladen hat, um die image_state_array, tracking, dass image0 geladen hat. Nach Aufzeichnungen, die image0 geladen wurde, durchläuft es die image_state_array und zählt, wie viele der zurückgegebenen Bilder geladen haben. Wenn das genug Bilder geladen haben Sie ausführt, was auch immer Funktion, die Sie versuchen zu erreichen. In diesem Beispiel bin ich verblassen aus der laden-Bildschirm.
Beachten Sie, dass die globalen Variablen werden zurückgesetzt, jedesmal, wenn die action wieder aufgerufen. Diese kann getan werden, wie unten gezeigt:
Dies ist ein effektiver Weg, um zu verfolgen, welche Bilder geladen haben, über eine callback-Funktion und eine Globale variable. Bitte Kommentar, wie ich weiß, es könnte wahrscheinlich verbessert werden und mehr Dynamik. Danke!