DEMO - https://codepen.io/ktr92/pen/qBGqRgZ
html example
<img data-src='https://placehold.co/600x400'>
<iframe width="560" height="315" data-src="https://www.youtube.com/embed/NpEaa2P7qZI?si=4Rq1E37zRobyhGRI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
JS
function lazyLoadSrc(selector) {
const callback = (entries, observer) => {
entries.forEach(entry => {
const source = entry.target
if (entry.intersectionRatio > 0) {
if (!source.getAttribute('src')) {
source.setAttribute('src', source.dataset.src)
observer.unobserve(source)
}
}
})
}
const target = document.querySelectorAll(selector)
const options = {
threshold: 0.4
}
let obs = new IntersectionObserver(callback, options)
target.forEach(item => {
obs.observe(item)
})
}
// usage
document.addEventListener('DOMContentLoaded', function() {
lazyLoadSrc('img');
lazyLoadSrc('iframe');
})
Top comments (0)