jQuery lädt Bilder mit vollständigem Callback

Lesezeit: 3 Minuten

jQuery ladt Bilder mit vollstandigem Callback
Fisch

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();
});

HTML:

<a href="#" class="tnClick" ><img id="myImage" src="images/001.jpg" /></a>

JS:

$(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

jQuery ladt Bilder mit vollstandigem Callback
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

jQuery ladt Bilder mit vollstandigem Callback
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.

1643909466 764 jQuery ladt Bilder mit vollstandigem Callback
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 …

.

758100cookie-checkjQuery lädt Bilder mit vollständigem Callback

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy