draggable-helper

WebJar for draggable-helper

License

License

MIT
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

draggable-helper
Last Version

Last Version

5.0.5
Release Date

Release Date

Type

Type

jar
Description

Description

draggable-helper
WebJar for draggable-helper
Project URL

Project URL

https://www.webjars.org
Source Code Management

Source Code Management

https://github.com/phphe/draggable-helper

Download draggable-helper

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/draggable-helper/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>draggable-helper</artifactId>
    <version>5.0.5</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/draggable-helper/
implementation 'org.webjars.npm:draggable-helper:5.0.5'
// https://jarcasting.com/artifacts/org.webjars.npm/draggable-helper/
implementation ("org.webjars.npm:draggable-helper:5.0.5")
'org.webjars.npm:draggable-helper:jar:5.0.5'
<dependency org="org.webjars.npm" name="draggable-helper" rev="5.0.5">
  <artifact name="draggable-helper" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='draggable-helper', version='5.0.5')
)
libraryDependencies += "org.webjars.npm" % "draggable-helper" % "5.0.5"
[org.webjars.npm/draggable-helper "5.0.5"]

Dependencies

compile (3)

Group / Artifact Type Version
org.webjars.npm : babel__runtime jar [7.7.7,8)
org.webjars.npm : drag-event-service jar [1.1.7,2)
org.webjars.npm : helper-js jar [2.0.0,3)

Project Modules

There are no modules declared in this project.

Version 5 is written with Typescript, so you can try read code directly. Follow documentation is for version 4. The documentation for newest version 5 is being written...

draggable-helper

A js library to simplify your drag and drop functions. Start with a element, it will expose hooks(drag, moving, drop). You can stop drag, moving and drop by conditions. You can set minTranslate. Its code is easy, you can check source code.

features

  • support touch simplify(single touch)
  • to prevent page scrolling when touch
  • expose hooks(drag, moving, drop)
  • prevent drag and moving by return false in hook
  • set min translate to trigger drag
  • set the style of dragging element
  • set the class of dragging element
  • move the element or move a cloned one
  • check if event is triggered by mouse left button
  • to prevent text be selected when dragging
  • Advance usage: bind to parent element, make children element as trigger element or moved element. Check example.

install

npm install draggable-helper

usage & api

import draggableHelper from 'draggable-helper'
// dragHandlerEl will be added mouse and touch event listener
const {destroy, options} = draggableHelper(HTMLElement dragHandlerEl, Object opt = {})
// opt
// opt will pass to hook, so you can attach custom data into opt, such the data of the element
// startEvent is mousedown or touchstart
opt = {
  // [Object] style, set the style of dragging element
  // getStyle(store, opt), set the style of dragging element
  // [String] draggingClass, default dragging, set the class of dragging element
  // [Boolean] clone, move the element or move a cloned one
  // minTranslate default 10, unit px
  // getEl(dragHandlerEl, store, opt), optional, get the el that will be moved. default is dragHandlerEl
  // afterGetEl(store, opt)
  // [Boolean] triggerBySelf if trigger only by dragHandlerEl self, can not be triggered by children
  // hook, before drag start
  // [Boolean] opt.restoreDOMManuallyOndrop the changed DOM will be restored automatically on drop. This disable it and pass restoreDOM function into store.
  beforeDrag(startEvent, moveEvent, store, opt){
    // when trigger drag, the position must be moved, so there are two event. startEvent also can be accessed by store.startEvent
    // The dragged element at this time has not yet been obtained, store.el is null. 此时要移动的元素还没有获得到, 即store.el是空.
    // return false to prevent drag
  },
  // hook, when drag start
  drag(startEvent, moveEvent, store, opt){
    // when trigger drag, the position must be moved, so there are two event. startEvent also can be accessed by store.startEvent
    // return false to prevent drag
  },
  // hook, when mouse moving
  moving: (moveEvent, store, opt) => {
    // return false to prevent moving
  },
  // hook, when drop
  drop: (endEvent, store, opt) => {
  },
}
// store. life cycle: drag-end
store = {
  el // the moving el
  originalEl // the original moving el, used when clone
  initialMouse
  initialPosition // relative to offsetParent
  mouse
  move
  movedCount // start from 0
  startEvent // mousedown or touchstart event
  endEvent,
  restoreDOM() // function if opt.restoreDOMManuallyOndrop else null
}

Example

Advance usage: bind to parent element

Advance usage: bind to parent element, make children element as trigger element or moved element.

import draggableHelper from 'draggable-helper'
const {destroy, options} = draggableHelper(document.body, {
  drag(startEvent, moveEvent, store, opt) {
    // check trigger el
    if (startEvent.target not has class 'your trigger class') {
      return false
    }
  },
  // get the element which will be moved
  getEl: (dragHandlerEl, store, opt) => get the el which will be moved by `store.startEvent.target`
})

prevent drag

In follow case, drag event will be prevented.

  • Event target element is follow
const IGNORE_TRIGGERS = ['INPUT','TEXTAREA', 'SELECT', 'OPTGROUP', 'OPTION']
  • Event target has class undraggable or its ancestor till dragHandlerEl has.
  • opt.beforeDrag or opt.drag return false

demo

jsfiddle

Versions

Version
5.0.5
1.0.10