@@ -66,8 +66,10 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
66
66
super ( ) ;
67
67
this . el = el ;
68
68
this . option = option ;
69
+ // get the element that is actually supposed to be dragged by
70
+ let className = option . handle . substring ( 1 ) ;
71
+ this . dragEl = el . classList . contains ( className ) ? el : el . querySelector ( option . handle ) || el ;
69
72
// create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)
70
- this . _mouseDown = this . _mouseDown . bind ( this ) ;
71
73
this . _dragStart = this . _dragStart . bind ( this ) ;
72
74
this . _drag = this . _drag . bind ( this ) ;
73
75
this . _dragEnd = this . _dragEnd . bind ( this ) ;
@@ -85,20 +87,18 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
85
87
86
88
public enable ( ) : void {
87
89
super . enable ( ) ;
88
- this . el . draggable = true ;
90
+ this . dragEl . draggable = true ;
91
+ this . dragEl . addEventListener ( 'dragstart' , this . _dragStart ) ;
89
92
this . el . classList . remove ( 'ui-draggable-disabled' ) ;
90
93
this . el . classList . add ( 'ui-draggable' ) ;
91
- this . el . addEventListener ( 'mousedown' , this . _mouseDown ) ;
92
- this . el . addEventListener ( 'dragstart' , this . _dragStart ) ;
93
94
}
94
95
95
96
public disable ( forDestroy = false ) : void {
96
97
super . disable ( ) ;
97
- this . el . removeAttribute ( 'draggable' ) ;
98
+ this . dragEl . removeAttribute ( 'draggable' ) ;
99
+ this . dragEl . removeEventListener ( 'dragstart' , this . _dragStart ) ;
98
100
this . el . classList . remove ( 'ui-draggable' ) ;
99
101
if ( ! forDestroy ) this . el . classList . add ( 'ui-draggable-disabled' ) ;
100
- this . el . removeEventListener ( 'mousedown' , this . _mouseDown ) ;
101
- this . el . removeEventListener ( 'dragstart' , this . _dragStart ) ;
102
102
}
103
103
104
104
public destroy ( ) : void {
@@ -120,18 +120,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
120
120
return this ;
121
121
}
122
122
123
- /** @internal call when mouse goes down before a dragstart happens */
124
- private _mouseDown ( event : MouseEvent ) : void {
125
- // make sure we are clicking on a drag handle or child of it...
126
- let className = this . option . handle . substring ( 1 ) ;
127
- let el = event . target as HTMLElement ;
128
- while ( el && ! el . classList . contains ( className ) ) { el = el . parentElement ; }
129
- this . dragEl = el ;
130
- }
131
-
132
123
/** @internal */
133
124
private _dragStart ( event : DragEvent ) : void {
134
- if ( ! this . dragEl ) { event . preventDefault ( ) ; return ; }
135
125
DDManager . dragElement = this ;
136
126
this . helper = this . _createHelper ( event ) ;
137
127
this . _setupHelperContainmentStyle ( ) ;
@@ -152,7 +142,7 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
152
142
private _setupDragFollowNodeNotifyStart ( ev : Event ) : DDDraggable {
153
143
this . _setupHelperStyle ( ) ;
154
144
document . addEventListener ( 'dragover' , this . _drag , DDDraggable . dragEventListenerOption ) ;
155
- this . el . addEventListener ( 'dragend' , this . _dragEnd ) ;
145
+ this . dragEl . addEventListener ( 'dragend' , this . _dragEnd ) ;
156
146
if ( this . option . start ) {
157
147
this . option . start ( ev , this . ui ( ) ) ;
158
148
}
@@ -186,7 +176,7 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
186
176
cancelAnimationFrame ( this . paintTimer ) ;
187
177
}
188
178
document . removeEventListener ( 'dragover' , this . _drag , DDDraggable . dragEventListenerOption ) ;
189
- this . el . removeEventListener ( 'dragend' , this . _dragEnd ) ;
179
+ this . dragEl . removeEventListener ( 'dragend' , this . _dragEnd ) ;
190
180
}
191
181
this . dragging = false ;
192
182
this . helper . classList . remove ( 'ui-draggable-dragging' ) ;
@@ -203,7 +193,6 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
203
193
this . triggerEvent ( 'dragstop' , ev ) ;
204
194
delete DDManager . dragElement ;
205
195
delete this . helper ;
206
- delete this . dragEl ;
207
196
}
208
197
209
198
/** @internal create a clone copy (or user defined method) of the original drag item if set */
0 commit comments