Mise à jour (octobre 2020) :
resizeObserver est une merveilleuse API ( table de support )
// create an Observer instance
const resizeObserver = new ResizeObserver(entries =>
console.log('Body height changed:', entries[0].target.clientHeight)
)
// start observing a DOM node
resizeObserver.observe(document.body)
// click anywhere to rnadomize height
window.addEventListener('click', () =>
document.body.style.height = Math.floor((Math.random() * 5000) + 1) + 'px'
)
click anywhere to change the height
Vieille réponse :
Bien qu'il s'agisse d'un "hack", cette fonction simple "écoute" en permanence (par le biais de setTimeout) les modifications de la hauteur d'un élément et déclenche un callback lorsqu'une modification est détectée.
Il est important de prendre en compte les caractéristiques d'un élément. hauteur peut changer indépendamment de toute action entreprise par un utilisateur ( redimensionner , cliquez sur ) et donc, puisqu'il est impossible de savoir ce qui peut provoquer un changement de hauteur, tout ce que l'on peut faire pour garantir absolument une détection à 100% est de placer un contrôleur de hauteur à intervalles :
function onElementHeightChange(elm, callback) {
var lastHeight = elm.clientHeight, newHeight;
(function run() {
newHeight = elm.clientHeight;
if (lastHeight != newHeight)
callback(newHeight)
lastHeight = newHeight
if (elm.onElementHeightChangeTimer)
clearTimeout(elm.onElementHeightChangeTimer)
elm.onElementHeightChangeTimer = setTimeout(run, 200)
})()
}
// to clear the timer use:
// clearTimeout(document.body.onElementHeightChangeTimer);
// DEMO:
document.write("click anywhere to change the height")
onElementHeightChange(document.body, function(h) {
console.log('Body height changed:', h)
})
window.addEventListener('click', function() {
document.body.style.height = Math.floor((Math.random() * 5000) + 1) + 'px'
})
DÉMO EN DIRECT