From b2cfcc531842265ee65eda2e8abb8ab9fff68f15 Mon Sep 17 00:00:00 2001 From: josdejong Date: Wed, 19 Feb 2014 15:24:46 +0100 Subject: [PATCH] Fixed scrolling to zoom not working on IE in standards mode --- src/graph/Graph.js | 12 ++++++------ src/graph/graphMixins/ManipulationMixin.js | 2 +- src/timeline/Range.js | 2 +- src/util.js | 15 +++++++++++++-- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/graph/Graph.js b/src/graph/Graph.js index 07f3f896..83aed2ba 100644 --- a/src/graph/Graph.js +++ b/src/graph/Graph.js @@ -711,7 +711,7 @@ Graph.prototype._getPointer = function (touch) { * @private */ Graph.prototype._onTouch = function (event) { - this.drag.pointer = this._getPointer(event.gesture.touches[0]); + this.drag.pointer = this._getPointer(event.gesture.center); this.drag.pinched = false; this.pinch.scale = this._getScale(); @@ -797,7 +797,7 @@ Graph.prototype._handleOnDrag = function(event) { return; } - var pointer = this._getPointer(event.gesture.touches[0]); + var pointer = this._getPointer(event.gesture.center); var me = this, drag = this.drag, @@ -860,7 +860,7 @@ Graph.prototype._onDragEnd = function () { * @private */ Graph.prototype._onTap = function (event) { - var pointer = this._getPointer(event.gesture.touches[0]); + var pointer = this._getPointer(event.gesture.center); this.pointerPosition = pointer; this._handleTap(pointer); @@ -872,7 +872,7 @@ Graph.prototype._onTap = function (event) { * @private */ Graph.prototype._onDoubleTap = function (event) { - var pointer = this._getPointer(event.gesture.touches[0]); + var pointer = this._getPointer(event.gesture.center); this._handleDoubleTap(pointer); }; @@ -883,7 +883,7 @@ Graph.prototype._onDoubleTap = function (event) { * @private */ Graph.prototype._onHold = function (event) { - var pointer = this._getPointer(event.gesture.touches[0]); + var pointer = this._getPointer(event.gesture.center); this.pointerPosition = pointer; this._handleOnHold(pointer); }; @@ -894,7 +894,7 @@ Graph.prototype._onHold = function (event) { * @private */ Graph.prototype._onRelease = function (event) { - var pointer = this._getPointer(event.gesture.touches[0]); + var pointer = this._getPointer(event.gesture.center); this._handleOnRelease(pointer); }; diff --git a/src/graph/graphMixins/ManipulationMixin.js b/src/graph/graphMixins/ManipulationMixin.js index d1dfc0c1..1d34ed70 100644 --- a/src/graph/graphMixins/ManipulationMixin.js +++ b/src/graph/graphMixins/ManipulationMixin.js @@ -236,7 +236,7 @@ var manipulationMixin = { this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag; this._handleOnDrag = function(event) { - var pointer = this._getPointer(event.gesture.touches[0]); + var pointer = this._getPointer(event.gesture.center); this.sectors['support']['nodes']['targetNode'].x = this._canvasToX(pointer.x); this.sectors['support']['nodes']['targetNode'].y = this._canvasToY(pointer.y); this.sectors['support']['nodes']['targetViaNode'].x = 0.5 * (this._canvasToX(pointer.x) + this.edges['connectionEdge'].from.x); diff --git a/src/timeline/Range.js b/src/timeline/Range.js index c15f2aa0..328eb2c4 100644 --- a/src/timeline/Range.js +++ b/src/timeline/Range.js @@ -394,7 +394,7 @@ Range.prototype._onMouseWheel = function(event, component, direction) { // calculate center, the date to zoom around var gesture = util.fakeGesture(this, event), - pointer = getPointer(gesture.touches[0], component.frame), + pointer = getPointer(gesture.center, component.frame), pointerDate = this._pointerToDate(component, direction, pointer); this.zoom(scale, pointerDate); diff --git a/src/util.js b/src/util.js index 5fca02c9..2749183d 100644 --- a/src/util.js +++ b/src/util.js @@ -542,11 +542,22 @@ util.fakeGesture = function fakeGesture (element, event) { var eventType = null; // for hammer.js 1.0.5 - return Hammer.event.collectEventData(this, eventType, event); + var gesture = Hammer.event.collectEventData(this, eventType, event); // for hammer.js 1.0.6 //var touches = Hammer.event.getTouchList(event, eventType); - //return Hammer.event.collectEventData(this, eventType, touches, event); + // var gesture = Hammer.event.collectEventData(this, eventType, touches, event); + + // on IE in standards mode, no touches are recognized by hammer.js, + // resulting in NaN values for center.pageX and center.pageY + if (isNaN(gesture.center.pageX)) { + gesture.center.pageX = event.pageX; + } + if (isNaN(gesture.center.pageY)) { + gesture.center.pageY = event.pageY; + } + + return gesture; }; util.option = {};