2011-03-24 48 views
16

Tüm resimlerin bir görüntü kaydırıcısında/döndürücüsünde kullanılmadan önce yüklenip yüklenmediğini kontrol eden bir kasılma arıyorum. Kullanıcının indirilmediği bir görüntüyü tıklatmasını önlemek için ana resimler yüklendiğinde yalnızca görüntülerin düğmelerini veya küçük resimlerini gösteren bir çözüm düşünmekteydim.Görüntülerin yüklü olup olmadığını kontrol edin?

+0

olası bir kopyası [Javascript/jQuery kullanarak bir resmin yüklü olup olmadığını nasıl belirleyebilirim?] (Http://stackoverflow.com/questions/263359/how-can-i-determine-if-an-image- has-loaded-using-javascript-jquery) –

cevap

29

.ready jQuery dokümanlardan metin load ve daha net ready arasında ayrım yapmak yardımcı olabilir:

JavaScript sayfa işlendiğinde kod çalıştırmak için yük olay sağlarken, bu olay yapar Görüntüler gibi tüm varlıklar tamamen alınana kadar tetiklenmez. Çoğu durumda, betik DOM hiyerarşisi tamamen oluşturulduktan sonra çalıştırılabilir. İşleyiciye geçildiğinde .ready(), DOM hazır olduktan sonra çalıştırılacağı garantilenir, bu nedenle diğer tüm olay işleyicileri eklemek ve diğer jQuery kodunu çalıştırmak için genellikle en iyi yerdir.

... ve gelen .load dokümanlar: Bu ve tüm alt unsurları tamamen yüklenmiş edildiğinde

yük olay bir öğesi gönderilir. Bu etkinlik bir URL ile ilişkilendirilmiş herhangi bir öğeye gönderilebilir: resimler, komut dosyaları, çerçeveler, iframe'ler ve pencere nesnesi.

.load, sizin için uygun olanıdır. Bu etkinlikle ilgili harika olan şey, onu DOM’ın yalnızca bir alt kümesine ekleyebileceğinizdir. Diyelim ki böyle bir div slayt görüntüleri var diyelim:

<div class="slideshow" style="display:none"> 
    <img src="image1.png"/> 
    <img src="image2.png"/> 
    <img src="image3.png"/> 
    <img src="image4.png"/> 
    <img src="image5.png"/> 
</div> 

... o zaman bir kez kap içinde tüm resimleri tetiklemek için sadece .slideshow kabın üzerine .load kullanabilirsiniz diğer bakılmaksızın yüklenmiş sayfadaki resimler.

$('.slideshow img').load(function(){ 
    $('.slideshow').show().slideshowPlugin(); 
}); 

(Ben sadece bir örnek olarak bir display:none koydu. Onlar yük iken görüntüleri gizlemek olacaktır.)

Güncelleme (03.04.2013)
Bu yöntem jQuery Version 1.8 beri kullanımdan kaldırıldı

+0

neden bu kadar iyi bir işlevi kabul etmiyor? * arg * şimdi biz http://www.desandro.github.io/imagesloaded/ :(gibi bir 7kb dosyası kullanmak zorundayız :( – ItsMeDom

+8

@DoJoChi Aslında, mutlaka başka bir dosya yüklemek zorunda olduğunu sanmıyorum. '' .load'' yerine, '' .on'' için uygun argümanlar kullanılır (http://api.jquery.com/on/), örneğin '' .on ('load', handler) '' – Nathan

0

Tüm resimlerin yüklenip yüklenmediğini kontrol etmek yerine, her zamanki gibi $(document).ready() yerine $(window).load() olayını kullanarak kaydırıcıyı/yönlendiriciyi neden oluşturmuyorsunuz? $(window).load(), sayfanın yüklenmesinden önce resimler gibi kaynaklar da dahil olmak üzere yüklemeyi bitirmesini bekler.

Bakın: window.onload vs. body.onload vs. document.onready (Yığın Taşması Üzerine de).

2

$('img').load() etkinliğinin her birini kapatabilir ve ilgili bağlantı/tıklama olayını yalnızca yükünüz tetiklendiğinde etkinleştirebilirsiniz. Görüntüye göre görüntü yapmanın avantajı, belirli görüntülerin yüklenmesi daha uzun sürüyorsa, hızlı olanların 'tıklanabilir' olmasına izin verebilirsiniz.

$('img').load(function() { 
    // find the related link or click event and enable/add it 
}); 
İlgili konular