Skip to content

Commit 0181ef2

Browse files
movedoastasson
authored andcommitted
Use ResizeObserver when available
1 parent 3e25384 commit 0181ef2

File tree

1 file changed

+33
-5
lines changed

1 file changed

+33
-5
lines changed

src/ResizeSensor.js

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@
8383
* @constructor
8484
*/
8585
var ResizeSensor = function(element, callback) {
86+
87+
var observer;
88+
8689
/**
8790
*
8891
* @constructor
@@ -241,13 +244,38 @@
241244
// Fix for custom Elements
242245
requestAnimationFrame(reset);
243246
}
244-
245-
forEachElement(element, function(elem){
246-
attachResizeEvent(elem, callback);
247-
});
247+
248+
if (typeof ResizeObserver != "undefined") {
249+
observer = new ResizeObserver(function(entries){
250+
for (var entry of entries) {
251+
callback.call(
252+
this,
253+
{
254+
width: entry.contentRect.width,
255+
height: entry.contentRect.height
256+
}
257+
);
258+
}
259+
});
260+
if (element !== undefined) {
261+
forEachElement(element, function(elem){
262+
observer.observe(elem);
263+
});
264+
}
265+
}
266+
else {
267+
forEachElement(element, function(elem){
268+
attachResizeEvent(elem, callback);
269+
});
270+
}
248271

249272
this.detach = function(ev) {
250-
ResizeSensor.detach(element, ev);
273+
if (typeof ResizeObserver != "undefined") {
274+
observer.unobserve(element);
275+
}
276+
else{
277+
ResizeSensor.detach(element, ev);
278+
}
251279
};
252280

253281
this.reset = function() {

0 commit comments

Comments
 (0)