Идеальным решением было бы ResizeObserver
, но на данный момент у него не слишком хорошая поддержка кросс-браузеров .
Однако, он будет работать в новейших Chrome, FF и некоторых других:
const elem = document.querySelector('#sizeobserver')
new ResizeObserver(console.log).observe(elem)
#sizeobserver {
resize: both;
overflow: hidden;
border: 1px solid black;
}
<div id="sizeobserver">Resize me!</div>
Чтобы игнорировать изменения высоты, вы можете проверить свойство width
contentRect
. Теперь регистрируются только изменения ширины:
const elem = document.querySelector('#sizeobserver')
{ // <--Just to encapsulate prevWidth
let prevWidth
new ResizeObserver(changes => {
for(const change of changes){
if(change.contentRect.width === prevWidth) return
prevWidth = change.contentRect.width
//Code here:
console.log(change)
}
}).observe(elem)
}
#sizeobserver {
resize: both;
overflow: hidden;
border: 1px solid black;
}
<div id="sizeobserver">Resize me!</div>