ฉันคิดวิธีพื้นฐานของตัวเองซึ่งดูเหมือนจะใช้ได้ดี (จนถึงตอนนี้) อาจมีหลายสิบอย่างที่อยู่สคริปต์ยอดนิยมที่ฉันไม่ได้นึกถึง
หมายเหตุ - โซลูชันนี้รวดเร็วและใช้งานง่าย แต่แน่นอนว่าไม่ดีต่อประสิทธิภาพ ตรวจสอบIntersection Observerใหม่อย่างแน่นอนตามที่Apoorvกล่าวถึงและอธิบายโดยdevelopers.googleหากประสิทธิภาพเป็นปัญหา
JQuery
$(window).scroll(function() {
$.each($('img'), function() {
if ( $(this).attr('data-src') && $(this).offset().top < ($(window).scrollTop() + $(window).height() + 100) ) {
var source = $(this).data('src');
$(this).attr('src', source);
$(this).removeAttr('data-src');
}
})
})
ตัวอย่างโค้ด html
<div>
<img src="" data-src="pathtoyour/image1.jpg">
<img src="" data-src="pathtoyour/image2.jpg">
<img src="" data-src="pathtoyour/image3.jpg">
</div>
อธิบาย
เมื่อเลื่อนหน้าแล้วแต่ละภาพในหน้าจะถูกตรวจสอบ ..
$(this).attr('data-src')
- หากรูปภาพมีแอตทริบิวต์ data-src
และภาพเหล่านั้นอยู่ห่างจากด้านล่างของหน้าต่างแค่ไหน ..
$(this).offset().top < ($(window).scrollTop() + $(window).height() + 100)
ปรับ + 100 ตามที่คุณต้องการ (- 100 เช่น)
var source = $(this).data('src');
- รับค่าของdata-src=
URL รูปภาพ
$(this).attr('src', source);
- ใส่ค่านั้นลงใน src=
$(this).removeAttr('data-src');
- ลบแอตทริบิวต์ data-src (เพื่อให้เบราว์เซอร์ของคุณไม่ต้องเสียทรัพยากรไปยุ่งกับภาพที่โหลดไปแล้ว)
การเพิ่มรหัสที่มีอยู่
ในการแปลง html ของคุณในตัวแก้ไขเพียงแค่ค้นหาและแทนที่src="
ด้วยsrc="" data-src="