mediawiki-skins-Citizen/resources/scripts/lazyload.js
2020-02-15 18:12:09 -05:00

46 lines
1.2 KiB
JavaScript

/*
* Citizen - Lazyload JS
* https://starcitizen.tools
*
* Lazyloading images with Native API or IntersectionObserver
*/
var observer;
// Native API
if ('loading' in HTMLImageElement.prototype) {
document.querySelectorAll('img.lazy').forEach(function(img) {
img.setAttribute('src', img.getAttribute('data-src'));
if (img.hasAttribute('data-srcset')) {
img.setAttribute('srcset', img.getAttribute('data-srcset'));
}
img.classList.remove('lazy');
});
} else {
// IntersectionObserver API
if (typeof IntersectionObserver !== 'undefined' && 'forEach' in NodeList.prototype) {
observer = new IntersectionObserver(function(changes) {
if ('connection' in navigator && navigator.connection.saveData === true) {
return;
}
changes.forEach(function(change) {
if (change.isIntersecting) {
change.target.setAttribute('src', change.target.getAttribute('data-src'));
if (change.target.hasAttribute('data-srcset')) {
change.target.setAttribute('srcset', change.target.getAttribute('data-srcset'));
}
change.target.classList.remove('lazy');
observer.unobserve(change.target);
}
});
});
document.querySelectorAll('img.lazy').forEach(function(img) {
observer.observe(img);
});
}
}