gmurphey / ember-did-resize-modifier

MIT License
34 stars 10 forks source link

ember-did-resize-modifier

Build Status npm version Download Total Ember Observer Score dependencies devDependencies

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.

Compatibility

Installation

ember install ember-did-resize-modifier

Usage

<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.

Debouncing Resize Events

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.

Handling Multiple Resize Callbacks

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>

Calling the Resize Callback on Creation

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>

Contributing

See the Contributing guide for details.

License

This project is licensed under the MIT License.