JavaScript/jQuery Draggable Options
This section describes properties that configure the Draggable UI component's contents, behavior, and appearance.
See Also
autoScroll
Enables automatic scrolling while dragging an item beyond the viewport.
See Also
boundary
Specifies a DOM element that limits the dragging area.
This property accepts the following value types:
- String
A CSS selector. For example:"#elementId"
. - DOM Node
An HTML DOM element. For example:document.getElementById("elementId")
. - jQuery
A CSS selector wrapped in a jQuery element. For example:$("#elementId")
.
container
Specifies a custom container in which the draggable item should be rendered.
This property accepts the following value types:
- String
A CSS selector. For example:"#elementId"
. - DOM Node
An HTML DOM element. For example:document.getElementById("elementId")
. - jQuery
A CSS selector wrapped in a jQuery element. For example:$("#elementId")
.
dragTemplate
Specifies custom markup to be shown instead of the item being dragged.
Information about the item being dragged.
Name | Type | Description |
---|---|---|
itemData | any |
The item's data. Note that you should specify the item data manually. |
itemElement |
The container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery. |
A container in which the template should be rendered.
jQuery
$(function() { $("#draggable").dxDraggable({ data: tasks, dragTemplate: dragTemplateFunc, onDragStart: function (e) { e.itemData = e.fromData.text; // your code } }); }); function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; }
const tasks = [ { text: 'New Brochures', }, { text: 'Brochure Design Review', }, //... ];
Angular
import { DxDraggableModule } from "devextreme-angular"; // ... export class AppComponent { onDragStart(e){ e.itemData = e.fromData.text; // ... } } @NgModule({ imports: [ // ... DxDraggableModule ], // ... })
<dx-draggable [data]="task" (onDragStart)="onDragStart($event)" dragTemplate="myDragTemplate" > <div *dxTemplate="let e of 'myDragTemplate'"> <div>{{ e.itemData + " drag template" }}</div> </div> </dx-draggable>
Vue
<template> <DxDraggable :data="task" @drag-start="onDragStart" :drag-template="myDragTemplate" > {{task.text}} <template #myDragTemplate="{ data }"> <div>{{ data.itemData}} + "drag template"</div> </template> </DxDraggable> </template> <script> import DxDraggable from 'devextreme-vue/draggable'; export default { components: { DxDraggable }, data() { return { tasks, myDragTemplate: "myDragTemplate", //... }; }, methods: { onDragStart(e) { e.itemData = e.fromData.text; // ... } } } </script>
React
import React from 'react'; import Draggable from 'devextreme-react/draggable'; import { Template } from 'devextreme-react/core/template'; function myDragTemplate(e) { return ( e.itemData + " drag template"; ); } class App extends React.Component { constructor(props) { //... } render() { return ( <Draggable data={tasks} onDragStart={this.onDragStart} dragTemplate={myDragTemplate}> </Draggable> ); } onDragStart = (e) => { e.itemData = e.fromData.text; // your code } } export default App;
ASP.NET Core Controls
@(Html.DevExtreme().Draggable() .DataSource(d => d.Mvc() // ... ) .OnDragStart("onDragStart") .DragTemplate(new JS("dragTemplateFunc")) ) <script> function onDragStart(e) { e.itemData = e.fromData.text; // your code } function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; } </script>
elementAttr
Specifies the global attributes to be attached to the UI component's container element.
jQuery
$(function(){ $("#draggableContainer").dxDraggable({ // ... elementAttr: { id: "elementId", class: "class-name" } }); });
Angular
<dx-draggable ... [elementAttr]="{ id: 'elementId', class: 'class-name' }"> </dx-draggable>
import { DxDraggableModule } from "devextreme-angular"; // ... export class AppComponent { // ... } @NgModule({ imports: [ // ... DxDraggableModule ], // ... })
Vue
<template> <DxDraggable ... :element-attr="draggableAttributes"> </DxDraggable> </template> <script> import DxDraggable from 'devextreme-vue/draggable'; export default { components: { DxDraggable }, data() { return { draggableAttributes: { id: 'elementId', class: 'class-name' } } } } </script>
React
import React from 'react'; import Draggable from 'devextreme-react/draggable'; class App extends React.Component { draggableAttributes = { id: 'elementId', class: 'class-name' } render() { return ( <Draggable ... elementAttr={this.draggableAttributes}> </Draggable> ); } } export default App;
group
Allows you to group several UI components, so that users can drag and drop items between them.
Set this property to identical values for the UI components you want to collect into a single group.
handle
Specifies a CSS selector (ID or class) that should act as the drag handle(s) for the item(s).
height
Specifies the UI component's height.
This property accepts a value of one of the following types:
Number
The height in pixels.String
A CSS-accepted measurement of height. For example,"55px"
,"20vh"
,"80%"
,"inherit"
.
onDisposing
A function that is executed before the UI component is disposed of.
Information about the event.
Name | Type | Description |
---|---|---|
element |
The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery. |
|
component | Draggable |
The UI component's instance. |
onDragEnd
A function that is called when a drag gesture is finished.
Information about the event that caused the function's execution.
Name | Type | Description |
---|---|---|
cancel |
Allows you to cancel the gesture. |
|
component | Draggable |
The UI component that raised the event. |
element |
The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery. |
|
event | Event (jQuery or EventObject) |
The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery. |
fromComponent | | |
The instance of the item's source UI component. Works only for element drag and drop between components. |
fromData | any |
Custom data associated with the source UI component. Works only for element drag and drop between components. |
itemData | any |
The item's data before the drag operation. Note that you should specify the item data manually. |
itemElement |
The container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery. |
|
toComponent | | |
The instance of the item's target UI component. Works only for element drag and drop between components. |
toData | any |
Custom data associated with the target UI component. Works only for element drag and drop between components. |
jQuery
$(function() { $("#draggable").dxDraggable({ data: tasks, dragTemplate: dragTemplateFunc, onDragEnd: function (e) { e.itemData = e.fromData.text; // your code } }); }); function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; }
const tasks = [ { text: 'New Brochures', }, { text: 'Brochure Design Review', }, //... ];
Angular
import { DxDraggableModule } from "devextreme-angular"; // ... export class AppComponent { onDragEnd(e){ e.itemData = e.fromData.text; // ... } } @NgModule({ imports: [ // ... DxDraggableModule ], // ... })
<dx-draggable [data]="task" (onDragEnd)="onDragEnd($event)" dragTemplate="myDragTemplate" > <div *dxTemplate="let e of 'myDragTemplate'"> <div>{{ e.itemData + " drag template" }}</div> </div> </dx-draggable>
Vue
<template> <DxDraggable :data="task" @drag-end="onDragEnd" :drag-template="myDragTemplate" > {{task.text}} <template #myDragTemplate="{ data }"> <div>{{ data.itemData}} + "drag template"</div> </template> </DxDraggable> </template> <script> import DxDraggable from 'devextreme-vue/draggable'; export default { components: { DxDraggable }, data() { return { tasks, myDragTemplate: "myDragTemplate", //... }; }, methods: { onDragEnd(e) { e.itemData = e.fromData.text; // ... } } } </script>
React
import React from 'react'; import Draggable from 'devextreme-react/draggable'; import { Template } from 'devextreme-react/core/template'; function myDragTemplate(e) { return ( e.itemData + " drag template"; ); } class App extends React.Component { constructor(props) { //... } render() { return ( <Draggable data={tasks} onDragEnd={this.onDragEnd} dragTemplate={myDragTemplate}> </Draggable> ); } onDragEnd = (e) => { e.itemData = e.fromData.text; // your code } } export default App;
ASP.NET Core Controls
@(Html.DevExtreme().Draggable() .DataSource(d => d.Mvc() // ... ) .OnDragEnd("onDragEnd") .DragTemplate(new JS("dragTemplateFunc")) ) <script> function onDragEnd(e) { e.itemData = e.fromData.text; // your code } function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; } </script>
onDragMove
A function that is called every time a draggable item is moved.
Information about the event that caused the function's execution.
Name | Type | Description |
---|---|---|
cancel |
Allows you to cancel the gesture. |
|
component | Draggable |
The UI component that raised the event. |
element |
The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery. |
|
event | Event (jQuery or EventObject) |
The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery. |
fromComponent | | |
The instance of the item's source UI component. Works only for element drag and drop between components. |
fromData | any |
Custom data associated with the source UI component. Works only for element drag and drop between components. |
itemData | any |
The item's data before the drag operation. Note that you should specify the item data manually. |
itemElement |
The container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery. |
|
toComponent | | |
The instance of the item's target UI component. Works only for element drag and drop between components. |
toData | any |
Custom data associated with the target UI component. Works only for element drag and drop between components. |
jQuery
$(function() { $("#draggable").dxDraggable({ data: tasks, dragTemplate: dragTemplateFunc, onDragMove: function (e) { e.itemData = e.fromData.text; // your code } }); }); function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; }
const tasks = [ { text: 'New Brochures', }, { text: 'Brochure Design Review', }, //... ];
Angular
import { DxDraggableModule } from "devextreme-angular"; // ... export class AppComponent { onDragMove(e){ e.itemData = e.fromData.text; // ... } } @NgModule({ imports: [ // ... DxDraggableModule ], // ... })
<dx-draggable [data]="task" (onDragMove)="onDragMove($event)" dragTemplate="myDragTemplate" > <div *dxTemplate="let e of 'myDragTemplate'"> <div>{{ e.itemData + " drag template" }}</div> </div> </dx-draggable>
Vue
<template> <DxDraggable :data="task" @drag-move="onDragMove" :drag-template="myDragTemplate" > {{task.text}} <template #myDragTemplate="{ data }"> <div>{{ data.itemData}} + "drag template"</div> </template> </DxDraggable> </template> <script> import DxDraggable from 'devextreme-vue/draggable'; export default { components: { DxDraggable }, data() { return { tasks, myDragTemplate: "myDragTemplate", //... }; }, methods: { onDragMove(e) { e.itemData = e.fromData.text; // ... } } } </script>
React
import React from 'react'; import Draggable from 'devextreme-react/draggable'; import { Template } from 'devextreme-react/core/template'; function myDragTemplate(e) { return ( e.itemData + " drag template"; ); } class App extends React.Component { constructor(props) { //... } render() { return ( <Draggable data={tasks} onDragMove={this.onDragMove} dragTemplate={myDragTemplate}> </Draggable> ); } onDragMove = (e) => { e.itemData = e.fromData.text; // your code } } export default App;
ASP.NET Core Controls
@(Html.DevExtreme().Draggable() .DataSource(d => d.Mvc() // ... ) .OnDragMove("onDragMove") .DragTemplate(new JS("dragTemplateFunc")) ) <script> function onDragMove(e) { e.itemData = e.fromData.text; // your code } function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; } </script>
onDragStart
A function that is called when a drag gesture is initialized.
Information about the event that caused the function's execution.
Name | Type | Description |
---|---|---|
cancel |
Allows you to cancel the gesture. |
|
component | Draggable |
The UI component that raised the event. |
element |
The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery. |
|
event | Event (jQuery or EventObject) |
The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery. |
fromData | any |
Custom data associated with the source UI component. Works only for element drag and drop between components. |
itemData | any |
The item's data before the drag operation. Note that you should specify the item data manually. |
itemElement |
The container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery. |
jQuery
$(function() { $("#draggable").dxDraggable({ data: tasks, dragTemplate: dragTemplateFunc, onDragStart: function (e) { e.itemData = e.fromData.text; // your code } }); }); function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; }
const tasks = [ { text: 'New Brochures', }, { text: 'Brochure Design Review', }, //... ];
Angular
import { DxDraggableModule } from "devextreme-angular"; // ... export class AppComponent { onDragStart(e){ e.itemData = e.fromData.text; // ... } } @NgModule({ imports: [ // ... DxDraggableModule ], // ... })
<dx-draggable [data]="task" (onDragStart)="onDragStart($event)" dragTemplate="myDragTemplate" > <div *dxTemplate="let e of 'myDragTemplate'"> <div>{{ e.itemData + " drag template" }}</div> </div> </dx-draggable>
Vue
<template> <DxDraggable :data="task" @drag-start="onDragStart" :drag-template="myDragTemplate" > {{task.text}} <template #myDragTemplate="{ data }"> <div>{{ data.itemData}} + "drag template"</div> </template> </DxDraggable> </template> <script> import DxDraggable from 'devextreme-vue/draggable'; export default { components: { DxDraggable }, data() { return { tasks, myDragTemplate: "myDragTemplate", //... }; }, methods: { onDragStart(e) { e.itemData = e.fromData.text; // ... } } } </script>
React
import React from 'react'; import Draggable from 'devextreme-react/draggable'; import { Template } from 'devextreme-react/core/template'; function myDragTemplate(e) { return ( e.itemData + " drag template"; ); } class App extends React.Component { constructor(props) { //... } render() { return ( <Draggable data={tasks} onDragStart={this.onDragStart} dragTemplate={myDragTemplate}> </Draggable> ); } onDragStart = (e) => { e.itemData = e.fromData.text; // your code } } export default App;
ASP.NET Core Controls
@(Html.DevExtreme().Draggable() .DataSource(d => d.Mvc() // ... ) .OnDragStart("onDragStart") .DragTemplate(new JS("dragTemplateFunc")) ) <script> function onDragStart(e) { e.itemData = e.fromData.text; // your code } function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; } </script>
onInitialized
A function used in JavaScript frameworks to save the UI component instance.
Information about the event.
Name | Type | Description |
---|---|---|
element |
The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery. |
|
component | Draggable |
The UI component's instance. |
Angular
<dx-draggable ... (onInitialized)="saveInstance($event)"> </dx-draggable>
import { Component } from "@angular/core"; import Draggable from "devextreme/ui/data_grid"; // ... export class AppComponent { draggableInstance: Draggable; saveInstance (e) { this.draggableInstance = e.component; } }
Vue
<template> <div> <DxDraggable ... @initialized="saveInstance"> </DxDraggable> </div> </template> <script> import DxDraggable from 'devextreme-vue/draggable'; export default { components: { DxDraggable }, data: function() { return { draggableInstance: null }; }, methods: { saveInstance: function(e) { this.draggableInstance = e.component; } } }; </script>
<template> <div> <DxDraggable ... @initialized="saveInstance"> </DxDraggable> </div> </template> <script setup> import DxDraggable from 'devextreme-vue/draggable'; let draggableInstance = null; const saveInstance = (e) => { draggableInstance = e.component; } </script>
React
import Draggable from 'devextreme-react/draggable'; class App extends React.Component { constructor(props) { super(props); this.saveInstance = this.saveInstance.bind(this); } saveInstance(e) { this.draggableInstance = e.component; } render() { return ( <div> <Draggable onInitialized={this.saveInstance} /> </div> ); } }
See Also
onOptionChanged
A function that is executed after a UI component property is changed.
Information about the event.
Name | Type | Description |
---|---|---|
value | any |
The modified property's new value. |
previousValue | any |
The UI component's previous value. |
name |
The modified property if it belongs to the first level. Otherwise, the first-level property it is nested into. |
|
fullName |
The path to the modified property that includes all parent properties. |
|
element |
The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery. |
|
component | Draggable |
The UI component's instance. |
The following example shows how to subscribe to component property changes:
jQuery
$(function() { $("#draggableContainer").dxDraggable({ // ... onOptionChanged: function(e) { if(e.name === "changedProperty") { // handle the property change here } } }); });
Angular
<dx-draggable ... (onOptionChanged)="handlePropertyChange($event)"> </dx-draggable>
import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { // ... handlePropertyChange(e) { if(e.name === "changedProperty") { // handle the property change here } } }
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; import { DxDraggableModule } from 'devextreme-angular'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, DxDraggableModule ], providers: [ ], bootstrap: [AppComponent] }) export class AppModule { }
Vue
<template> <DxDraggable ... @option-changed="handlePropertyChange" /> </template> <script> import 'devextreme/dist/css/dx.light.css'; import DxDraggable from 'devextreme-vue/draggable'; export default { components: { DxDraggable }, // ... methods: { handlePropertyChange: function(e) { if(e.name === "changedProperty") { // handle the property change here } } } } </script>
React
import React from 'react'; import 'devextreme/dist/css/dx.light.css'; import Draggable from 'devextreme-react/draggable'; const handlePropertyChange = (e) => { if(e.name === "changedProperty") { // handle the property change here } } export default function App() { return ( <Draggable ... onOptionChanged={handlePropertyChange} /> ); }
rtlEnabled
Switches the UI component to a right-to-left representation.
When this property is set to true, the UI component text flows from right to left, and the layout of elements is reversed. To switch the entire application/site to the right-to-left representation, assign true to the rtlEnabled field of the object passed to the DevExpress.config(config) method.
DevExpress.config({ rtlEnabled: true });
scrollSensitivity
Specifies the distance in pixels from the edge of viewport at which scrolling should start. Applies only if autoScroll is true.
See Also
scrollSpeed
Specifies the scrolling speed when dragging an item beyond the viewport. Applies only if autoScroll is true.
See Also
width
Specifies the UI component's width.
This property accepts a value of one of the following types:
Number
The width in pixels.String
A CSS-accepted measurement of width. For example,"55px"
,"20vw"
,"80%"
,"auto"
,"inherit"
.
If you have technical questions, please create a support ticket in the DevExpress Support Center.