This Ember.js addon provides a {{did-resize}}
modifier that calls a callback whenever a given element is resized.
The resize detection itself is handled by element-resize-detector.
ember install ember-did-resize-modifier
<div {{did-resize this.onResize}}>
Resize the window to see the modifier in action
</div>
import Component from '@ember/component';
import { action } from '@ember-decorators/object';
export default class ResizableComponent extends Component {
@action
onResize(element: HTMLElement) {
console.log('div resized!');
}
}
The @action
decorator is used to bind the onResize
method to the component instance.
In the case of an element resizing fluidly (based on the percentage of the screen when the user resizes a window, for example), one may not want their {{did-resize}}
callback to be called continiously. The debounce
property may be used to only call the callback after no resize has been detected for a given time.
<div
{{did-resize this.onResize debounce=250}}
>
Will only have this.onResize called if a resize has not been detected in the last 250ms
</div>
There is no debounce by default. This means you can also use a restartable ember-concurrency task as a debounce mechanism if that better suits your needs.
You can use the {{did-resize}}
modifier multiple times on the same element.
<div
{{did-resize this.onResize}}
{{did-resize this.onResizeAgain}}
>
Resize the window to see the modifier in action
</div>
The {{did-resize}}
modifier is designed to only call handlers when the element is actually resized. If you would like to also call the resize handler when the element is created, it is recommended that you install ember-render-modifiers
and use the {{did-insert}}
modifier.
<div
{{did-insert this.onResize}}
{{did-resize this.onResize}}
>
Resize the window to see the modifier in action
</div>
See the Contributing guide for details.
This project is licensed under the MIT License.