diff --git a/src/draggable/draggable.js b/src/draggable/draggable.js index f964854..e4baf2b 100644 --- a/src/draggable/draggable.js +++ b/src/draggable/draggable.js @@ -251,6 +251,7 @@ export default class Draggable { this.addPlugin(new AutoScroll(this)); this.addPlugin(new ConnectToSortable(this)); this.addSensor(new MouseSensor(this)); + document.addEventListener('mouse:down', this.onMouseDown); document.addEventListener('mouse:start', this.onDragStart); document.addEventListener('mouse:move', this.onDragMove); document.addEventListener('mouse:stop', this.onDragStop); @@ -272,22 +273,28 @@ export default class Draggable { ); }; - onDragStart = event => { + onMouseDown = event => { const sensorEvent = event.detail; if (sensorEvent.caller !== this) { return; } - if (this.disabled || this.reverting) { sensorEvent.cancel(); return; } - if (!this.isInsideHandle(sensorEvent)) { sensorEvent.cancel(); return; } + }; + + onDragStart = event => { + const sensorEvent = event.detail; + + if (sensorEvent.caller !== this) { + return; + } blurActiveElement(sensorEvent); diff --git a/src/resizable/resizable.js b/src/resizable/resizable.js index 03f47d2..d376ff1 100644 --- a/src/resizable/resizable.js +++ b/src/resizable/resizable.js @@ -180,9 +180,7 @@ export default class Resizable extends Draggable { this.addPlugin(new ResizeAnimate(this)); this.addPlugin(new ResizeGhost(this)); this.addSensor(new MouseSensor(this)); - document.addEventListener('mouse:down', () => { - this.pressing = true; - }); + document.addEventListener('mouse:down', this.onMouseDown); document.addEventListener('mouse:stop', () => { this.pressing = false; }); @@ -231,24 +229,31 @@ export default class Resizable extends Draggable { ); }; - onDragStart = event => { - let handleCursor = null; - const { aspectRatio } = this.options; + onMouseDown = event => { const sensorEvent = event.detail; if (sensorEvent.caller !== this || !this.currentHandle || !this.currentDirection) { return; } - if (this.disabled) { sensorEvent.cancel(); return; } - if (!this.isInsideHandle(sensorEvent)) { sensorEvent.cancel(); return; } + this.pressing = true; + }; + + onDragStart = event => { + let handleCursor = null; + const { aspectRatio } = this.options; + const sensorEvent = event.detail; + + if (sensorEvent.caller !== this || !this.currentHandle || !this.currentDirection) { + return; + } this.resizing = true; this.helper = this.createHelper(sensorEvent); diff --git a/src/sensor/mouse-event.js b/src/sensor/mouse-event.js index 0fcd1d6..22f811d 100644 --- a/src/sensor/mouse-event.js +++ b/src/sensor/mouse-event.js @@ -2,6 +2,8 @@ import SensorEvent from './sensor-event'; export class MouseDownEvent extends SensorEvent { static type = 'mouse:down'; + + static cancelable = true; } export class MouseStartEvent extends SensorEvent { diff --git a/src/sensor/mouse-sensor.js b/src/sensor/mouse-sensor.js index 776787b..50e2a55 100644 --- a/src/sensor/mouse-sensor.js +++ b/src/sensor/mouse-sensor.js @@ -45,18 +45,21 @@ export default class MouseSensor extends Sensor { this.onMouseUp(event); } + const mouseDown = new MouseDownEvent({ + pageX: event.pageX, + pageY: event.pageY, + target: event.target, + caller: this.caller, + originalEvent: event + }); + this.pageX = event.pageX; this.pageY = event.pageY; this.startEvent = event; - this.trigger( - new MouseDownEvent({ - pageX: event.pageX, - pageY: event.pageY, - target: event.target, - caller: this.caller, - originalEvent: event - }) - ); + this.trigger(mouseDown); + if (mouseDown.canceled) { + return; + } document.addEventListener('dragstart', preventDefault); document.addEventListener('mousemove', this.checkThresholds); diff --git a/src/sortable/sortable.js b/src/sortable/sortable.js index 4d020a9..15181cf 100644 --- a/src/sortable/sortable.js +++ b/src/sortable/sortable.js @@ -171,6 +171,7 @@ export default class Sortable extends Draggable { this.addPlugin(new StyleDecorator(this, 'zIndex')); this.addPlugin(new AutoScroll(this)); this.addSensor(new MouseSensor(this)); + document.addEventListener('mouse:down', this.onMouseDown); document.addEventListener('mouse:start', this.onDragStart); document.addEventListener('mouse:move', this.onDragMove); document.addEventListener('mouse:stop', this.onDragStop); @@ -187,6 +188,23 @@ export default class Sortable extends Draggable { ); }; + onMouseDown = event => { + const sensorEvent = event.detail; + + if (sensorEvent.caller !== this) { + return; + } + + if (this.disabled || this.reverting) { + sensorEvent.cancel(); + return; + } + + if (!this.findItem(sensorEvent)) { + sensorEvent.cancel(); + } + }; + onDragStart = (event, noActivation = false, forceOwnership = false) => { const sensorEvent = event.detail;