diff --git a/include/input.js b/include/input.js index fa753d94..b996c7d5 100644 --- a/include/input.js +++ b/include/input.js @@ -486,7 +486,8 @@ function Mouse(defaults) { "use strict"; var that = {}, // Public API methods - conf = {}; // Configuration attributes + conf = {}, // Configuration attributes + mouseCaptured = false; // Configuration attributes Util.conf_defaults(conf, that, defaults, [ @@ -499,7 +500,23 @@ Util.conf_defaults(conf, that, defaults, [ ['touchButton', 'rw', 'int', 1, 'Button mask (1, 2, 4) for touch devices (0 means ignore clicks)'] ]); +function captureMouse() { + // capturing the mouse ensures we get the mouseup event + if (conf.target.setCapture) { + conf.target.setCapture(); + } + // some browsers give us mouseup events regardless, + // so if we never captured the mouse, we can disregard the event + mouseCaptured = true; +} + +function releaseMouse() { + if (conf.target.releaseCapture) { + conf.target.releaseCapture(); + } + mouseCaptured = false; +} // // Private functions // @@ -536,11 +553,17 @@ function onMouseButton(e, down) { } function onMouseDown(e) { + captureMouse(); onMouseButton(e, 1); } function onMouseUp(e) { + if (!mouseCaptured) { + return; + } + onMouseButton(e, 0); + releaseMouse(); } function onMouseWheel(e) {