webpack-bootstrap-ui-kit/src/js/ajax/lazy-images.js

51 lines
1.3 KiB
JavaScript
Raw Normal View History

2021-08-09 18:04:09 +02:00
// browser tab visibility state detection
2022-05-03 20:50:57 +02:00
import Events from '../_events'
import ImageObject from './models/image'
2021-08-09 18:04:09 +02:00
export default ((W) => {
2022-05-03 20:50:57 +02:00
const NAME = 'main.lazy-images'
const D = document
2021-08-09 18:04:09 +02:00
const loadLazyImages = () => {
2022-05-03 20:50:57 +02:00
console.log(`${NAME}: Load lazy images`)
2023-02-20 15:56:31 +01:00
const base = document.querySelector('base')
const baseURL = base ? base.getAttribute('href') : '/'
2021-08-09 18:04:09 +02:00
2022-05-03 20:50:57 +02:00
D.querySelectorAll('[data-lazy-src]').forEach((el) => {
el.classList.remove('empty')
2021-08-09 18:04:09 +02:00
2022-05-03 20:50:57 +02:00
const img = new ImageObject()
2023-02-20 15:56:31 +01:00
let imgURL = baseURL + el.getAttribute('data-lazy-src')
// remove double slash
imgURL = imgURL.replace(/([^:]\/)\/+/g, "$1")
2022-05-03 20:50:57 +02:00
2023-02-20 15:56:31 +01:00
img.load(imgURL, el)
.then((result) => {
2022-05-03 20:50:57 +02:00
el.setAttribute('src', result)
2021-08-09 18:04:09 +02:00
})
.catch(() => {
2022-05-03 20:50:57 +02:00
el.classList.add('empty')
})
})
D.querySelectorAll('[data-lazy-bg]').forEach((el) => {
el.classList.remove('empty')
const img = new ImageObject()
img.load(el.getAttribute('data-lazy-bg'), el)
.then((result) => {
2022-05-03 20:50:57 +02:00
el.style.backgroundImage = `url(${result})`
})
2022-04-12 13:54:18 +02:00
.catch((e) => {
2022-05-03 20:50:57 +02:00
el.classList.add('empty')
})
})
}
W.addEventListener(`${Events.LODEDANDREADY}`, loadLazyImages)
W.addEventListener(`${Events.AJAX}`, loadLazyImages)
})(window)