From c34873d8c14fa7035e6847fa6c09caf794a844fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B0=D0=B2=D1=80=D1=91=D0=BD=D0=BE=D0=B2=20=D0=90?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=BD?= Date: Fri, 16 May 2014 22:52:17 +0800 Subject: [PATCH] mouse dragging only with left button. fix #272 --- src/DragAndDrop.js | 6 +++- test/unit/DragAndDrop-test.js | 65 +++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/DragAndDrop.js b/src/DragAndDrop.js index bf8ef2b5..d1e9c612 100644 --- a/src/DragAndDrop.js +++ b/src/DragAndDrop.js @@ -185,7 +185,7 @@ */ Kinetic.Node.prototype.isDragging = function() { var dd = Kinetic.DD; - return dd.node && dd.node._id === this._id && dd.isDragging; + return !!(dd.node && dd.node._id === this._id && dd.isDragging); }; Kinetic.Node.prototype._listenDrag = function() { @@ -202,6 +202,10 @@ } else { this.on('mousedown.kinetic touchstart.kinetic', function(evt) { + // ignore right and middle buttons + if (evt.evt.button === 1 || evt.evt.button === 2) { + return; + } if(!Kinetic.DD.node) { that.startDrag(evt); } diff --git a/test/unit/DragAndDrop-test.js b/test/unit/DragAndDrop-test.js index b80ce661..4c8da69a 100644 --- a/test/unit/DragAndDrop-test.js +++ b/test/unit/DragAndDrop-test.js @@ -64,6 +64,71 @@ suite('DragAndDrop', function() { layer.add(circle); stage.add(layer); + }); + // ====================================================== + test('right click is not for dragging', function() { + var stage = addStage(); + + var top = stage.content.getBoundingClientRect().top; + + var layer = new Kinetic.Layer(); + + var circle = new Kinetic.Circle({ + x: stage.getWidth() / 2, + y: stage.getHeight() / 2, + radius: 70, + fill: 'green', + stroke: 'black', + strokeWidth: 4, + name: 'myCircle', + draggable: true + }); + + layer.add(circle); + stage.add(layer); + + stage._mousedown({ + clientX: 291, + clientY: 112 + top, + }); + + stage._mousemove({ + clientX: 311, + clientY: 112 + top, + }); + + assert(circle.isDragging(), 'dragging is ok'); + + Kinetic.DD._endDragBefore(); + stage._mouseup({ + clientX: 291, + clientY: 112 + top + }); + Kinetic.DD._endDragAfter({dragEndNode:circle}); + + + + stage._mousedown({ + clientX: 291, + clientY: 112 + top, + button: 2 + }); + + stage._mousemove({ + clientX: 311, + clientY: 112 + top, + button: 2 + }); + + assert(circle.isDragging() === false, 'no dragging with right click'); + + Kinetic.DD._endDragBefore(); + stage._mouseup({ + clientX: 291, + clientY: 112 + top, + button: 2 + }); + Kinetic.DD._endDragAfter({dragEndNode:circle}); }); }); \ No newline at end of file