angular-resize-element
Version:
An angular 4.0+ directive that allows an element to be resized
145 lines (110 loc) • 4.24 kB
Markdown
4.0+ directive that allows an element to be resized
[](http://badge.fury.io/js/angular-resize-element)
[](https://github.com/MichaelKravchuk/angular-resize-element/issues)
[](https://github.com/MichaelKravchuk/angular-resize-element/stargazers)
[](https://raw.githubusercontent.com/MichaelKravchuk/angular-resize-element/master/LICENSE)
https://michaelkravchuk.github.io/angular-libs
**Step 1:** Install angular-resize-element
```sh
npm install angular-resize-element --save
```
**Step 2:** Import angular resize element module into your app module
```ts
....
import { AngularResizeElementModule } from 'angular-resize-element';
....
@NgModule({
...
imports: [
....
AngularResizeElementModule
],
....
})
export class AppModule { }
```
**Step 3:** Add HTML code
```html
<div class="container"
<div class="resize resize__right"
(resize)="onResize($event)"
[ ]="container"
[ ]="AngularResizeElementDirection.RIGHT"
></div>
<div class="resize resize__bottom--right"
(resize)="onResize($event)"
[ ]="container"
[ ]="AngularResizeElementDirection.BOTTOM_RIGHT"
></div>
</div>
```
Or if you use angular component (and look at TS)
```html
[targetElement]="containerComponent"
```
**Step 4:** Add ts code
```ts
public readonly AngularResizeElementDirection = AngularResizeElementDirection;
public data: any = {};
public onResize(evt: AngularResizeElementEvent): void {
this.data.width = evt.currentWidthValue;
this.data.height = evt.currentHeightValue;
this.data.top = evt.currentTopValue;
this.data.left = evt.currentLeftValue;
}
```
and add ViewChild if you use angular component (don`t forget about breaking changes when you use *ngIf with ViewChild)
```ts
@ViewChild('container', {read: ElementRef})
public readonly containerElement;
```
**Step 5:** Add css to angular.json config
```
"styles": [
...
"node_modules/angular-resize-element/bundles/style.scss"
],
```
```ts
enum AngularResizeElementDirection {
TOP = 'top',
TOP_RIGHT = 'top-right',
RIGHT = 'right',
BOTTOM_RIGHT = 'bottom-right',
BOTTOM = 'bottom',
BOTTOM_LEFT = 'bottom-left',
LEFT = 'left',
TOP_LEFT = 'top-left'
}
interface AngularResizeElementEvent {
currentWidthValue: number;
currentHeightValue: number;
originalWidthValue: number;
originalHeightValue: number;
differenceWidthValue: number;
differenceHeightValue: number;
currentTopValue: number;
currentLeftValue: number;
originalTopValue: number;
originalLeftValue: number;
differenceTopValue: number;
differenceLeftValue: number;
originalEvent: MouseEvent;
}
```
| Attribute | Type | Description
|----------------|--------|------------
| resizeStart | () => AngularResizeElementEvent | This event is fired when resize is started (only one time)
| resize | () => AngularResizeElementEvent | This event is fired when mouse move and size is changed
| resizeEnd | () => AngularResizeElementEvent | This event is fired when resize is finished (only one time)
| targetElement | HTMLElement | Element that will be resize
| direction | AngularResizeElementDirection | Direction of resizing
| proportionalResize | boolean | Proportional size change (width = height)
| applyClass | string | CSS class that will be assigned to the "targetElement" when the "resizeStart "is called and will be removed when "resizeEnd"is called
## License
[MIT](https://choosealicense.com/licenses/mit/)
An angular