diff --git a/src/mouse/mouse_handler.js b/src/mouse/mouse_handler.js index 3d582b70c4..c9aaca7d40 100644 --- a/src/mouse/mouse_handler.js +++ b/src/mouse/mouse_handler.js @@ -129,6 +129,8 @@ class MouseHandler { renderer.$isMousePressed = true; var self = this; + var continueCapture = true; + var onMouseMove = function(e) { if (!e) return; // if editor is loaded inside iframe, and mouseup event is outside @@ -145,8 +147,8 @@ class MouseHandler { var onCaptureEnd = function(e) { editor.off("beforeEndOperation", onOperationEnd); - clearInterval(timerId); - if (editor.session) onCaptureInterval(); + continueCapture = false; + if (editor.session) onCaptureUpdate(); self[self.state + "End"] && self[self.state + "End"](e); self.state = ""; self.isMousePressed = renderer.$isMousePressed = false; @@ -157,11 +159,18 @@ class MouseHandler { editor.endOperation(); }; - var onCaptureInterval = function() { + var onCaptureUpdate = function() { self[self.state] && self[self.state](); self.$mouseMoved = false; }; + var onCaptureInterval = function() { + if (continueCapture) { + onCaptureUpdate(); + event.nextFrame(onCaptureInterval); + } + }; + if (useragent.isOldIE && ev.domEvent.type == "dblclick") { return setTimeout(function() {onCaptureEnd(ev);}); } @@ -182,7 +191,8 @@ class MouseHandler { self.$onCaptureMouseMove = onMouseMove; self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd); - var timerId = setInterval(onCaptureInterval, 20); + + onCaptureInterval(); } cancelContextMenu() { var stop = function(e) {