X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=plugins%2Frange-selector.js;h=df8f867ca18487571b93e0a446fb08c601b26f3d;hb=7bd1be5b6eb3ee09d7da9bb1ab7cd1b3ad5974bd;hp=70b80653a9da7d05f95a4a70c32522add45539d0;hpb=84074adc20801653473a750a756b6b8e6d0cfc28;p=dygraphs.git diff --git a/plugins/range-selector.js b/plugins/range-selector.js index 70b8065..df8f867 100644 --- a/plugins/range-selector.js +++ b/plugins/range-selector.js @@ -265,7 +265,7 @@ rangeSelector.prototype.createZoomHandles_ = function() { rangeSelector.prototype.initInteraction_ = function() { var self = this; var topElem = this.isIE_ ? document : window; - var xLast = 0; + var clientXLast = 0; var handle = null; var isZooming = false; var isPanning = false; @@ -278,7 +278,7 @@ rangeSelector.prototype.initInteraction_ = function() { // functions, defined below. Defining them this way (rather than with // "function foo() {...}" makes JSHint happy. var toXDataWindow, onZoomStart, onZoom, onZoomEnd, doZoom, isMouseInPanZone, - onPanStart, onPan, onPanEnd, doPan, onCanvasMouseMove, applyBrowserZoomLevel; + onPanStart, onPan, onPanEnd, doPan, onCanvasHover; // Touch event functions var onZoomHandleTouchEvent, onCanvasTouchEvent, addTouchEvents; @@ -291,22 +291,16 @@ rangeSelector.prototype.initInteraction_ = function() { return [xDataMin, xDataMax]; }; - applyBrowserZoomLevel = function(delX) { - var zoom = window.outerWidth/document.documentElement.clientWidth; - if (!isNaN(zoom)) { - return delX/zoom; - } else { - return delX; - } - }; - onZoomStart = function(e) { Dygraph.cancelEvent(e); isZooming = true; - xLast = e.screenX; + clientXLast = e.clientX; handle = e.target ? e.target : e.srcElement; - self.dygraph_.addEvent(topElem, 'mousemove', onZoom); - self.dygraph_.addEvent(topElem, 'mouseup', onZoomEnd); + if (e.type === 'mousedown' || e.type === 'dragstart') { + // These events are removed manually. + Dygraph.addEvent(topElem, 'mousemove', onZoom); + Dygraph.addEvent(topElem, 'mouseup', onZoomEnd); + } self.fgcanvas_.style.cursor = 'col-resize'; tarp.cover(); return true; @@ -317,13 +311,12 @@ rangeSelector.prototype.initInteraction_ = function() { return false; } Dygraph.cancelEvent(e); - var delX = e.screenX - xLast; - if (Math.abs(delX) < 4 || e.screenX === 0) { - // First iPad move event seems to have screenX = 0 + + var delX = e.clientX - clientXLast; + if (Math.abs(delX) < 4) { return true; } - xLast = e.screenX; - delX = applyBrowserZoomLevel(delX); + clientXLast = e.clientX; // Move handle. var zoomHandleStatus = self.getZoomHandleStatus_(); @@ -396,9 +389,12 @@ rangeSelector.prototype.initInteraction_ = function() { if (!isPanning && isMouseInPanZone(e) && self.getZoomHandleStatus_().isZoomed) { Dygraph.cancelEvent(e); isPanning = true; - xLast = e.screenX; - self.dygraph_.addEvent(topElem, 'mousemove', onPan); - self.dygraph_.addEvent(topElem, 'mouseup', onPanEnd); + clientXLast = e.clientX; + if (e.type === 'mousedown') { + // These events are removed manually. + Dygraph.addEvent(topElem, 'mousemove', onPan); + Dygraph.addEvent(topElem, 'mouseup', onPanEnd); + } return true; } return false; @@ -410,12 +406,11 @@ rangeSelector.prototype.initInteraction_ = function() { } Dygraph.cancelEvent(e); - var delX = e.screenX - xLast; + var delX = e.clientX - clientXLast; if (Math.abs(delX) < 4) { return true; } - xLast = e.screenX; - delX = applyBrowserZoomLevel(delX); + clientXLast = e.clientX; // Move range view var zoomHandleStatus = self.getZoomHandleStatus_(); @@ -468,7 +463,7 @@ rangeSelector.prototype.initInteraction_ = function() { } }; - onCanvasMouseMove = function(e) { + onCanvasHover = function(e) { if (isZooming || isPanning) { return; } @@ -524,7 +519,7 @@ rangeSelector.prototype.initInteraction_ = function() { this.dygraph_.addEvent(this.iePanOverlay_, 'mousedown', onPanStart); } else { this.dygraph_.addEvent(this.fgcanvas_, 'mousedown', onPanStart); - this.dygraph_.addEvent(this.fgcanvas_, 'mousemove', onCanvasMouseMove); + this.dygraph_.addEvent(this.fgcanvas_, 'mousemove', onCanvasHover); } // Touch events