Yüzdelere dayalı bir CSS ızgara sistemi kullanıyorum. Sayfanın toplam genişliğinin% 25'i olan 4 sütunlu bir ızgaram var. Böyle her bir "% 25 hücrenin" içinde çıktı benim resim etiketleri: tarayıcı boyutlandırır"Duyarlı" görüntülerle tembel yükleme (bilinmeyen yükseklik)
<img src="foo.jpg" style="max-width:100%" />
gibi, resimleri de her% 25 hücrenin% 100 doldurmak için yeniden boyutlandırmak. Tarayıcı, "height: auto" (benim çıkardığım zaman örtülü olan) koydummuş gibi bir yükseklik alır.
Şimdi buna tembel yükleme yeteneği eklemek istiyorum. Sorun, resimler yüklenmeden önce sayfadaki yüksekliklerinin bilinmemesidir. Tarayıcı, görüntüyü & en boy oranını gözlemlemek ve bunun için bir yükseklik hesaplamak zorundadır. Bundan önce, tüm görüntüler 1px'lik bir yüksekliğe sahip. Her görüntünün 1px'lik bir yüksekliğe sahip olması nedeniyle, hepsi "viewport" olarak kabul edilir ve hemen yüklenir. Şu
Ben önce img etiketi çıkarılmasına kavramının kanıtı var, bir veri özelliğinde görüntüler boy sunucusunda oranını ve çıkışını hesaplamak: olay üzerine, Sonra
<img src="foo.jpg" style="max-width:100%" data-aspect="1.7742" />
"belge hazır", ben her resmin döngü ve öncesinde tembel yükleme piksel sabit height değerini ayarlayın:
Bu anlamda, çalışıyor gibi görünüyor$('img').each(function() {
var img = $(this);
var width = img.width();
var ratio = img.data('aspectratio');
var height = width/ratio;
$(this).css('height', height+'px');
});
aynı azından artık yükleri tüm görüntüleri zaman, ancak sadece kaydırırken görüntüleri yükler. Ancak, kullanıcı tarayıcıyı yeniden boyutlandırdığında görüntüler uzayacak gibi yeni sorunlara neden olabilir gibi görünüyor. Bir geri yükleme, tembel yükleme işlemi tamamlandığında, "yükseklik" i tekrar "otomatik" olarak değiştirmem gerekir. Bu, kullanıcının gördüğü görüntülerle ilgilenir - ancak tarayıcının yeniden boyutlandırılmasından sonra ekranın altındaki görüntüler yine de uygunsuz bir "yükseklik" değerine sahip olur. Tarayıcı her yeniden boyutlandırıldığında, daha önce katın altındaki tüm görüntüleri yinelemeli, güncellenmiş genişliklerini ölçmeli, en boy oranlarını okuyabiliyor ve yeni yüksekliği güncelleyebiliyor, sonra da şimdi yukarısında olan her şeyi işlemek için tembel yükleme işlemini geri çekiyordum. kat. Bunu yapmazsam, yanlış yükseklik değerine sahip görüntüler nedeniyle yükleme çok erken veya çok geç tetiklenebilir.
Sorum şu: Burada tarif ettiğim yöntemden başka, bilinmeyen yüksekliğe sahip tembel yük resimlerinin başka yolları da var mıdır? Metodum için, programlamak için bir acı olmaktan başka olumsuzluk var mı?
verilen, Github kullanıcı dryabove gider bunu çivilenmiş galiba. Tarayıcının yalnızca bir resmin boyutlarını bilmenin iki yolu vardır: indirmek veya HTML'de belirtmek. – Blazemonger
Güven için teşekkürler. Ayrıca, ilk 4 görüntüyü tembel yükler, sonra tamamlanana kadar bloklar ve daha sonra kalan görüntülerin yeni konumlarını yeniden değerlendirdiği bir tür yaklaşımı hayal ediyordum. Tek sorun, engelleme, her şeyden önce tembel yükleme olmaksızın işleri yavaşlatır. –
Ok Doldurma alt bilgisinin farkına vardım: http://thisisthat.co.uk/notebook/2013-10-07-lazy-loading-responsive-images http://andmag.se/2012/ 10/responsive-images-tembel-yük-ve-multiserve-images/ –