Skip to content

Repository files navigation

angular2-draggable

npmnpmBuild Status

Table of contents

  1. Getting Started
  2. Latest Update
  3. Installation
  4. Draggable
  5. Resizable
  6. API
  7. Events

Getting Started

angular2-draggable has angular directives that make the DOM element draggable and resizable.

  • ngDraggable

    • v2.x requires Angular >= 6
    • v1.4.2 requires Angular >= 4 && < 6
  • ngResizable

    • provided since v2.0, requires Angular >= 6

Latest Update

  • 2019.03.01: 2.2.2:

  • 2018.12.25: 2.2.1:

    • ngDraggable: Fixed flickering of the component on initial drag while scale is applied to the parent. (by rathodsanjay - PR #134)
  • 2018.12.22: 2.2.0

    • ngDraggable:
      • Performance update. Fix issue #112: Control change detection with HostListener events.
      • Fix issue #128: Multiple phone draggables at the same time.
      • New [lockAxis] input.
    • ngResizable:
      • Fix issue #132: Aspect ratio feature exits Y-Axis boundary on resize.
  • 2018.11.29: 2.1.9

  • 2018.11.11: 2.1.8

    • ngResizable: add [preventDefaultEvent] flag to ngResizable mousedown (by mecp - PR #119)
  • 2018.10.31: 2.1.7

    • ngResizable: fix issue #116: ngResizable Locks Height When rzHandles Includes Only e, w. (Thanks to Yamazaki93)
  • 2018.10.26: 2.1.6

    • ngResizable: fix issue #115: rzResizing IE event issue
  • 2018.10.15: 2.1.5

    • ngDraggable: fix issue #114: EndOffset event not working properly with SnapToGrid
  • 2018.08.03: 2.0.0

    • Fix issue #84: iFrames, and context unrelated elements block all events, and are unusable

Installation

npm install angular2-draggable --save

Draggable

Please refer to the demo page.

  1. Firstly, import AngularDraggableModule in your app module (or any other proper angular module):

    import{AngularDraggableModule}from'angular2-draggable';
    @NgModule({imports: [
    ...,AngularDraggableModule],
    ...
    })exportclassAppModule{}
  2. Then: use ngDraggable directive to make the DOM element draggable.

    • Simple example:

      • html:
      <divngDraggable>Drag me!</div>
    • Use [handle] to move parent element:

      • html:
      <divngDraggable[handle]="DemoHandle" class="card"><div#DemoHandleclass="card-header">I'm handle. Drag me!</div><divclass="card-block">You can't drag this block now!</div></div>

Resizable

Please refer to the demo page.

Besides of importing AngularDraggableModule, you need to import resizable.min.css in your project. If you use angular-cli, you can add this in angular.json:

"styles": [
...
+ "node_modules/angular2-draggable/css/resizable.min.css"
]

Then you can use ngResizable directive to make the element resizable:

<divngResizable> I'm now resizable </div><div[ngResizable]="false"> Resizable is disabled now </div><divngResizable[rzHandles]="'n,e,s,w,se,sw,ne,nw'"> Each side is resizable </div>

Well you can use both directives concurrently if you wish:

<divngDraggablengResizable> I'm now draggable and resizable </div>

API

Directive:

  • ngDraggable directive support following input porperties:

    InputTypeDefaultDescription
    ngDraggablebooleantrueYou can toggle the draggable capability by setting true or false
    handleHTMLElementnullUse template variable to refer to the handle element. Then only the handle element is draggable
    zIndexstringnullUse it to set z-index property when element is not moving
    zIndexMovingstringnullUse it to set z-index property when element is moving
    boundsHTMLElemntnullUse it to set the boundary
    inBoundsbooleanfalseUse it make element stay in the bounds
    outOfBounds{ top: boolean; bottom: boolean; right: boolean; left: boolean }falseSet it to allow element get out of bounds from the direction. Refer to demo
    position{ x: number, y: number }{ x:0, y:0 }Use it to set position offset
    gridSizenumber1Use it for snapping to grid. Refer to demo
    preventDefaultEventbooleanfalseWhether to prevent default mouse event
    scalenumber1Set it when parent element has CSS transform scale
    lockAxis'x' | 'y'nullRestrict dragging to a specific axis by locking another one
  • ngResizable directive support following input porperties:

    InputTypeDefaultDescription
    ngResizablebooleantrueYou can toggle the resizable capability by setting true or false
    rzHandlesstring"e,s,se"Which handles can be used for resizing. Optional types in "n,e,s,w,se,sw,ne,nw" or "all"
    rzAspectRatioboolean | numberfalseboolean: Whether the element should be constrained to a specific aspect ratio. number: Force the element to maintain a specific aspect ratio during resizing (width/height)
    rzContainmentSelector | string | ElementnullConstrains resizing to within the bounds of the specified element or region. It accepts an HTMLElement, 'parent' or a valid CSS selector string such as '#id'
    rzGridnumber | number[]1Snaps the resizing element to a grid, every x and y pixels. Array values: [x, y]
    rzMinWidthnumber1The minimum width the resizable should be allowed to resize to.
    rzMaxWidthnumber1The maximum width the resizable should be allowed to resize to.
    rzMinHeightnumber1The minimum height the resizable should be allowed to resize to.
    rzMaxHeightnumber1The maximum height the resizable should be allowed to resize to.
    preventDefaultEventbooleanfalseWhether to prevent default mouse event.

CSS:

  • When ngDraggable is enabled on some element, ng-draggable class is automatically assigned to it. You can use it to customize the pointer style. For example:

    .ng-draggable {
    cursor: move;
    }
  • When ngResizable is enabled on some element, ng-resizable class is automatically assigned to it. And handle elements will be created with ng-resizable-handle. You can customize the handle style.

Events

  • ngDraggable directive:

    Output$eventDescription
    startednativeElement of hostemitted when start dragging
    stoppednativeElement of hostemitted when stop dragging
    edge{ top: boolean, right: boolean, bottom: boolean, left: boolean }emitted after [bounds] is set
    movingOffset{ x: number, y: number }emit position offset when moving
    endOffset{ x: number, y: number }emit position offset when stop moving

    Simple example:

    <divngDraggable(started)="onDragBegin($event)"
    (stopped)="onDragEnd($event)"
    (movingOffset)="onMoving($event)"
    (endOffset)="onMoveEnd($event)">
    Drag me!
    </div>
  • ngResizable directive:

    Output$eventdescription
    rzStartIResizeEventemitted when start resizing
    rzResizingIResizeEventemitted when resizing
    rzStopIResizeEventemitted when stop resizing
    exportinterfaceIResizeEvent{host: any;handle: any;size: {width: number;height: number;};position: {top: number;left: number;};}

    Simple example:

    <divngResizable(rzStart)="onResizeStart($event)"
    (rzResizing)="onResizing($event)"
    (rzStop)="onResizeStop($event)">
    Resizable
    </div>

Demo

You can clone this repo to your working copy and then launch the demo page in your local machine:

npm install
npm run demo
# or
yarn install
yarn demo

The demo page server is listening to: http://localhost:4203

About

Angular directive (for version >= 2.x ) that makes the DOM element draggable and resizable

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages