diff --git a/lib/graph3d/Graph3d.js b/lib/graph3d/Graph3d.js index 7682eabf7..19b37fff5 100644 --- a/lib/graph3d/Graph3d.js +++ b/lib/graph3d/Graph3d.js @@ -1920,6 +1920,8 @@ Graph3d.prototype._onMouseDown = function(event) { // get mouse position (different code for IE and all other browsers) this.startMouseX = getMouseX(event); this.startMouseY = getMouseY(event); + + this._startCameraOffset = this.camera.getOffset(); this.startStart = new Date(this.start); this.startEnd = new Date(this.end); @@ -1946,21 +1948,28 @@ Graph3d.prototype._onMouseDown = function(event) { */ Graph3d.prototype._onMouseMove = function (event) { event = event || window.event; - + // move with ctrl or rotate by other if (event && event.ctrlKey === true) { // calculate change in mouse position var camera = this.camera, offset = camera.getOffset(); + var diffX = parseFloat(getMouseX(event)) - this.startMouseX; var diffY = parseFloat(getMouseY(event)) - this.startMouseY; - var scale = this.frame.clientWidth * 0.6; - - var offXNew = offset.x - ((diffX / scale) * this.camera.armLength) * 0.1; - var offYNew = offset.y + ((diffY / scale) * this.camera.armLength) * 0.1; + var scaleX = this.frame.clientWidth * 0.5; + var scaleY = this.frame.clientHeight * 0.5; + var offXNew = (this._startCameraOffset.x || 0) - ((diffX / scaleX) * this.camera.armLength) * 0.8; + var offYNew = (this._startCameraOffset.y || 0) + ((diffY / scaleY) * this.camera.armLength) * 0.8; + this.camera.setOffset(offXNew, offYNew); + + // меняем startX, startY и startOffset + this._startCameraOffset = this.camera.getOffset(); + this.startMouseX = getMouseX(event); + this.startMouseY = getMouseY(event); } else { // calculate change in mouse position