Skip to content

Using ResizeObserver to implement ResizeSensor for the latest modern browsers. #309

@fengdh

Description

@fengdh

ResizeObserver is available for the latest modern browsers for a while. Instead of inserting tricky DIV to catch "resize" event, it is better to simply use ResizeObserver.

image

For backward compability, I rewrite ResizeSensor with ResizeObserver (and Map) as an AMD module below. It works well for my project.

define(function() { const observing = new Map(), ro = new ResizeObserver(entries => { for (let {target} of entries) { (observing.get(target) || []).forEach(({callback}) => callback(target)); } }); function ResizeSensor(elm, callback) { observing.set(elm, [...observing.get(elm) || [], {callback, sensor: this]); ro.observe(this.elm = elm); } ResizeSensor.prototype = { constructor: ResizeSensor, detach() { let elm = this.elm; ro.unobserve(elm); observing.set(elm, [...observing.get(elm) || []].filter(({sensor}) => sensor !== this)); } } return ResizeSensor; }); 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions