fix multiple clicks and reduce double click timeout
This commit is contained in:
parent
675386fc4c
commit
fead610584
2 changed files with 33 additions and 26 deletions
|
|
@ -184,32 +184,41 @@ exports.addMouseWheelListener = function(el, callback) {
|
||||||
exports.addListener(el, "mousewheel", listener);
|
exports.addListener(el, "mousewheel", listener);
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.addMultiMouseDownListener = function(el, button, count, timeout, callback) {
|
exports.addMultiMouseDownListener = function(el, timeouts, eventHandler, callbackName) {
|
||||||
var clicks = 0;
|
var clicks = 0;
|
||||||
var startX, startY;
|
var startX, startY, timer;
|
||||||
|
var eventNames = {
|
||||||
|
2: "dblclick",
|
||||||
|
3: "tripleclick",
|
||||||
|
4: "quadclick"
|
||||||
|
};
|
||||||
|
|
||||||
var listener = function(e) {
|
var listener = function(e) {
|
||||||
clicks += 1;
|
if (exports.getButton(e) != 0) {
|
||||||
|
clicks = 0;
|
||||||
|
} else {
|
||||||
|
var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;
|
||||||
|
|
||||||
|
if (!timer || isNewClick)
|
||||||
|
clicks = 0;
|
||||||
|
|
||||||
|
clicks += 1;
|
||||||
|
|
||||||
|
if (timer)
|
||||||
|
clearTimeout(timer)
|
||||||
|
timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);
|
||||||
|
}
|
||||||
if (clicks == 1) {
|
if (clicks == 1) {
|
||||||
startX = e.clientX;
|
startX = e.clientX;
|
||||||
startY = e.clientY;
|
startY = e.clientY;
|
||||||
|
|
||||||
setTimeout(function() {
|
|
||||||
clicks = 0;
|
|
||||||
}, timeout || 600);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var isButton = exports.getButton(e) == button;
|
eventHandler[callbackName]("mousedown", e);
|
||||||
if (!isButton || Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5)
|
|
||||||
clicks = 0;
|
|
||||||
|
|
||||||
if (clicks == count) {
|
if (clicks > 4)
|
||||||
clicks = 0;
|
clicks = 0;
|
||||||
callback(e);
|
else if (clicks > 1)
|
||||||
}
|
return eventHandler[callbackName](eventNames[clicks], e);
|
||||||
|
|
||||||
if (isButton)
|
|
||||||
return exports.preventDefault(e);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.addListener(el, "mousedown", listener);
|
exports.addListener(el, "mousedown", listener);
|
||||||
|
|
|
||||||
|
|
@ -57,12 +57,9 @@ var MouseHandler = function(editor) {
|
||||||
});
|
});
|
||||||
|
|
||||||
var mouseTarget = editor.renderer.getMouseEventTarget();
|
var mouseTarget = editor.renderer.getMouseEventTarget();
|
||||||
event.addListener(mouseTarget, "mousedown", this.onMouseEvent.bind(this, "mousedown"));
|
|
||||||
event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click"));
|
event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click"));
|
||||||
event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove"));
|
event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove"));
|
||||||
event.addMultiMouseDownListener(mouseTarget, 0, 2, 500, this.onMouseEvent.bind(this, "dblclick"));
|
event.addMultiMouseDownListener(mouseTarget, [300, 300, 250], this, "onMouseEvent");
|
||||||
event.addMultiMouseDownListener(mouseTarget, 0, 3, 600, this.onMouseEvent.bind(this, "tripleclick"));
|
|
||||||
event.addMultiMouseDownListener(mouseTarget, 0, 4, 600, this.onMouseEvent.bind(this, "quadclick"));
|
|
||||||
event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"));
|
event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"));
|
||||||
|
|
||||||
var gutterEl = editor.renderer.$gutter;
|
var gutterEl = editor.renderer.$gutter;
|
||||||
|
|
@ -126,8 +123,9 @@ var MouseHandler = function(editor) {
|
||||||
this.y = ev.y;
|
this.y = ev.y;
|
||||||
|
|
||||||
// do not move textarea during selection
|
// do not move textarea during selection
|
||||||
var kt = this.editor.renderer.$keepTextAreaAtCursor;
|
var renderer = this.editor.renderer;
|
||||||
this.editor.renderer.$keepTextAreaAtCursor = false;
|
if (renderer.$keepTextAreaAtCursor)
|
||||||
|
renderer.$keepTextAreaAtCursor = null;
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
var onMouseSelection = function(e) {
|
var onMouseSelection = function(e) {
|
||||||
|
|
@ -139,8 +137,10 @@ var MouseHandler = function(editor) {
|
||||||
clearInterval(timerId);
|
clearInterval(timerId);
|
||||||
self[self.state + "End"] && self[self.state + "End"](e);
|
self[self.state + "End"] && self[self.state + "End"](e);
|
||||||
self.$clickSelection = null;
|
self.$clickSelection = null;
|
||||||
self.editor.renderer.$keepTextAreaAtCursor = kt;
|
if (renderer.$keepTextAreaAtCursor == null) {
|
||||||
self.editor.renderer.$moveTextAreaToCursor();
|
renderer.$keepTextAreaAtCursor = true;
|
||||||
|
renderer.$moveTextAreaToCursor();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var onSelectionInterval = function() {
|
var onSelectionInterval = function() {
|
||||||
|
|
@ -149,8 +149,6 @@ var MouseHandler = function(editor) {
|
||||||
|
|
||||||
event.capture(this.editor.container, onMouseSelection, onMouseSelectionEnd);
|
event.capture(this.editor.container, onMouseSelection, onMouseSelectionEnd);
|
||||||
var timerId = setInterval(onSelectionInterval, 20);
|
var timerId = setInterval(onSelectionInterval, 20);
|
||||||
|
|
||||||
ev.preventDefault();
|
|
||||||
};
|
};
|
||||||
}).call(MouseHandler.prototype);
|
}).call(MouseHandler.prototype);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue