memento-dev/app/data/snippets/js/defer-iframe.ts

26 lines
1.0 KiB
TypeScript

document.querySelectorAll('button.iframe-loader').forEach((button: HTMLButtonElement) => {
// Pour chaque bouton qui doit charger un iframe, on écoute le clic dessus
button.addEventListener('click', () => {
// On récupère le container de l'iframe, qui dans notre exemple est la balise parente du bouton
const container: HTMLElement | null = button.closest('.iframe-container');
// Si le container n'existe pas, on arrête l'exécution de la fonction pour éviter un plantage
if (!container) return;
const { src, width, height } = container.dataset as {
src: string,
width: string,
height: string
};
// On prépare notre iframe avec les données stockées dans le container
const iframe = document.createElement('iframe');
iframe.setAttribute('src', src);
iframe.setAttribute('width', width);
iframe.setAttribute('height', height);
// On supprime le contenu du container pour y ajouter notre iframe
container.innerHTML = '';
container.appendChild(iframe);
});
});