ResizeObserver
monitors the changes in size and position of an observed DOM element. It is a very less often used API. But it has it’s moments. Again it’s an async non-blocking API.
Here is how it’s defined.
jsxconst observer = new ResizeObserver((entries, observer) => { // callback function entries.forEach((entry, idx) => { console.log(entry) // do something with entry }) })
The entry object has with it the box-sizes of the target element under observation(as shown in image) and the target element itself.
I think the most often used property is contentRect
and target
property. Here is an example of contentRect
object...
json{ bottom: 500, height: 484, left: 0, right: 1869, top: 16, width: 1869, x: 0, y: 16 }
Though devicePixelContentBoxSize
, borderBoxSize
and contentBoxSize
are present for certain use cases as well. All have same contents as shown,
json{inlineSize: 1869, blockSize: 484}
There are three basic methods on observer. Functionality of these three methods are same as that of IntersectionObserver
. These are
.observe()
.unobserve()
.disconnect()
The practical use cases include styling elements on basis of position and box dimensions, multi-image banners and holding scroll position on window resize. Here is the code of my demo for it.