ich sah ein Kommentar im Blog von Ben Nadel wo Stephen Rushing einen Loader gepostet hat, aber ich kann nicht herausfinden, wie ich die Selektoren und Parameter übergeben kann …
Ich glaube, ich brauche auch eine completeCallback und errorCallback Funktionen?
function imgLoad(img, completeCallback, errorCallback) {
if (img != null && completeCallback != null) {
var loadWatch = setInterval(watch, 500);
function watch() {
if (img.complete) {
clearInterval(loadWatch);
completeCallback(img);
}
}
} else {
if (typeof errorCallback == "function") errorCallback();
}
}
// then call this from anywhere
imgLoad($("img.selector")[0], function(img) {
$(img).fadeIn();
});
$(document).ready(function() {
var newImage = "images/002.jpg";
$("#myImage").css("display","none");
$("a.tnClick").click(function() {
// imgLoad here
});
})
Was versuchen Sie zu tun, laden Sie Ihr Bild vor dem Anzeigen vor?
– Nick Craver
6. März 10 um 12:25 Uhr
Eigentlich möchte ich nur, dass es eingeblendet wird. Wenn ich auf das Bild klicke, stelle es auf keine Anzeige und lade es. Wenn der Ladevorgang abgeschlossen ist, blenden Sie ein.
– Fisch
6. März ’10 um 12:30 Uhr
Nick Craver
Wenn Sie möchten, dass es geladen wird, bevor es angezeigt wird, können Sie das stark reduzieren, wie folgt:
$(document).ready(function() {
var newImage = "images/002.jpg"; //Image name
$("a.tnClick").click(function() {
$("#myImage").hide() //Hide it
.one('load', function() { //Set something to run when it finishes loading
$(this).fadeIn(); //Fade it in when loaded
})
.attr('src', newImage) //Set the source so it begins fetching
.each(function() {
//Cache fix for browsers that don't trigger .load()
if(this.complete) $(this).trigger('load');
});
});
});
Der .one() Aufruf stellt sicher, dass .load() nur einmal ausgelöst wird, also keine doppelten Einblendungen. Der .each() am Ende liegt daran, dass einige Browser das nicht auslösen load Ereignis für aus dem Cache abgerufene Bilder, dies versucht auch die Abfrage in dem von Ihnen geposteten Beispiel.
Ooooh “Cache-Fix für Browser, die .load() nicht auslösen” Das war meine Sorge (nachdem ich diesen Beitrag gelesen hatte) Weißt du, welche Browser .load nicht unterstützen?
– Fisch
6. März 10 um 12:41 Uhr
@FFisch – Willkommen! Um Ihre andere Frage zu beantworten: Die mir bekannten Browser sind Opera, Firefox, IE … aber das ist vielleicht nicht die ganze Liste.
– Nick Craver
6. März 10 um 12:51 Uhr
Das habe ich gesucht! Es funktioniert auch auf Android-Browsern.
– Nolesch
28. April 14 um 15:31 Uhr
Sie müssen vorsichtig sein, wenn Sie das Load-Ereignis für Bilder verwenden, da Chrome das Ereignis nicht wie erwartet auslöst, wenn das Bild im Cache des Browsers gefunden wird. IE und (mir wurde gesagt) wird das Ereignis nicht ausgelöst.
Da ich selbst mit diesem Problem konfrontiert war, habe ich es gelöst, indem ich das DOM-Attribut vollständig überprüft habe (sollte in den meisten gängigen Browsern funktionieren): Wenn gleich wahr ist, habe ich nur das zuvor gebundene ‘load’-Ereignis gelöst. Siehe Beispiel:
$("#myimage").attr("src","http://www.mysite.com/myimage.jpg").load(doSomething);
if ($("#myimage").get(0).complete) {
// already in cache?
$("#myimage").unbind("load");
doSomething();
}
Hoffe das hilft
jamescharlesworth
Ich wollte diese Funktionalität und wollte definitiv nicht alle Bilder laden müssen, wenn die Seite gerendert wird. Meine Bilder sind auf Amazon s3 und mit einer großen Fotogalerie wären das viele unnötige Anfragen. Ich habe ein schnelles jQuery-Plugin erstellt, um damit umzugehen Hier:
$("#image-1").loadImage('/path/to/new/image.jpg',function(){
$(this).css({height:'120px'});//alter the css styling after the image has loaded
});
Wenn also ein Benutzer auf ein Miniaturbild klickt, das eine Reihe von Bildern darstellt, lade ich im Grunde die anderen Bilder zu diesem Zeitpunkt. Der Rückruf ermöglicht es mir, das CSS zu ändern, nachdem das Bild geladen wurde.
Jay
Probier diese?
doShow = function() {
if ($('#img_id').attr('complete')) {
alert('Image is loaded!');
} else {
window.setTimeout('doShow()', 100);
}
};
$('#img_id').attr('src', 'image.jpg');
doShow();
Scheint, als ob das obige überall funktioniert …
.
7581000cookie-checkjQuery lädt Bilder mit vollständigem Callbackyes
Was versuchen Sie zu tun, laden Sie Ihr Bild vor dem Anzeigen vor?
– Nick Craver
6. März 10 um 12:25 Uhr
Eigentlich möchte ich nur, dass es eingeblendet wird. Wenn ich auf das Bild klicke, stelle es auf keine Anzeige und lade es. Wenn der Ladevorgang abgeschlossen ist, blenden Sie ein.
– Fisch
6. März ’10 um 12:30 Uhr