提交 c34c6785 编写于 作者: S sushuang

rename event of roam controller and tweak zoom delta.

上级 68893b09
...@@ -321,23 +321,23 @@ export default echarts.extendChartView({ ...@@ -321,23 +321,23 @@ export default echarts.extendChartView({
controller controller
.off('pan') .off('pan')
.off('zoom') .off('zoom')
.on('pan', function (dx, dy) { .on('pan', function (e) {
roamHelper.updateViewOnPan(controllerHost, dx, dy); roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy);
api.dispatchAction({ api.dispatchAction({
seriesId: seriesModel.id, seriesId: seriesModel.id,
type: 'graphRoam', type: 'graphRoam',
dx: dx, dx: e.dx,
dy: dy dy: e.dy
}); });
}) })
.on('zoom', function (zoom, mouseX, mouseY) { .on('zoom', function (e) {
roamHelper.updateViewOnZoom(controllerHost, zoom, mouseX, mouseY); roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);
api.dispatchAction({ api.dispatchAction({
seriesId: seriesModel.id, seriesId: seriesModel.id,
type: 'graphRoam', type: 'graphRoam',
zoom: zoom, zoom: e.scale,
originX: mouseX, originX: e.originX,
originY: mouseY originY: e.originY
}); });
this._updateNodeAndLinkScale(); this._updateNodeAndLinkScale();
adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel)); adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel));
......
...@@ -431,9 +431,9 @@ export default echarts.extendChartView({ ...@@ -431,9 +431,9 @@ export default echarts.extendChartView({
/** /**
* @private * @private
*/ */
_onPan: function (dx, dy) { _onPan: function (e) {
if (this._state !== 'animating' if (this._state !== 'animating'
&& (Math.abs(dx) > DRAG_THRESHOLD || Math.abs(dy) > DRAG_THRESHOLD) && (Math.abs(e.dx) > DRAG_THRESHOLD || Math.abs(e.dy) > DRAG_THRESHOLD)
) { ) {
// These param must not be cached. // These param must not be cached.
var root = this.seriesModel.getData().tree.root; var root = this.seriesModel.getData().tree.root;
...@@ -453,7 +453,7 @@ export default echarts.extendChartView({ ...@@ -453,7 +453,7 @@ export default echarts.extendChartView({
from: this.uid, from: this.uid,
seriesId: this.seriesModel.id, seriesId: this.seriesModel.id,
rootRect: { rootRect: {
x: rootLayout.x + dx, y: rootLayout.y + dy, x: rootLayout.x + e.dx, y: rootLayout.y + e.dy,
width: rootLayout.width, height: rootLayout.height width: rootLayout.width, height: rootLayout.height
} }
}); });
...@@ -463,7 +463,10 @@ export default echarts.extendChartView({ ...@@ -463,7 +463,10 @@ export default echarts.extendChartView({
/** /**
* @private * @private
*/ */
_onZoom: function (scale, mouseX, mouseY) { _onZoom: function (e) {
var mouseX = e.originX;
var mouseY = e.originY;
if (this._state !== 'animating') { if (this._state !== 'animating') {
// These param must not be cached. // These param must not be cached.
var root = this.seriesModel.getData().tree.root; var root = this.seriesModel.getData().tree.root;
...@@ -490,7 +493,7 @@ export default echarts.extendChartView({ ...@@ -490,7 +493,7 @@ export default echarts.extendChartView({
// Scale root bounding rect. // Scale root bounding rect.
var m = matrix.create(); var m = matrix.create();
matrix.translate(m, m, [-mouseX, -mouseY]); matrix.translate(m, m, [-mouseX, -mouseY]);
matrix.scale(m, m, [scale, scale]); matrix.scale(m, m, [e.scale, e.scale]);
matrix.translate(m, m, [mouseX, mouseY]); matrix.translate(m, m, [mouseX, mouseY]);
rect.applyTransform(m); rect.applyTransform(m);
......
...@@ -31,6 +31,7 @@ export default DataZoomModel.extend({ ...@@ -31,6 +31,7 @@ export default DataZoomModel.extend({
zoomLock: false, // Whether disable zoom but only pan. zoomLock: false, // Whether disable zoom but only pan.
zoomOnMouseWheel: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'. zoomOnMouseWheel: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'.
moveOnMouseMove: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'. moveOnMouseMove: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'.
moveOnMouseWheel: false, // Can be: true / false / 'shift' / 'ctrl' / 'alt'.
preventDefaultMouseMove: true preventDefaultMouseMove: true
} }
}); });
\ No newline at end of file
...@@ -80,6 +80,7 @@ var InsideZoomView = DataZoomView.extend({ ...@@ -80,6 +80,7 @@ var InsideZoomView = DataZoomView.extend({
roamControllerOpt: { roamControllerOpt: {
zoomOnMouseWheel: dataZoomOption.zoomOnMouseWheel, zoomOnMouseWheel: dataZoomOption.zoomOnMouseWheel,
moveOnMouseMove: dataZoomOption.moveOnMouseMove, moveOnMouseMove: dataZoomOption.moveOnMouseMove,
moveOnMouseWheel: dataZoomOption.moveOnMouseWheel,
preventDefaultMouseMove: dataZoomOption.preventDefaultMouseMove preventDefaultMouseMove: dataZoomOption.preventDefaultMouseMove
} }
} }
...@@ -101,7 +102,7 @@ var InsideZoomView = DataZoomView.extend({ ...@@ -101,7 +102,7 @@ var InsideZoomView = DataZoomView.extend({
/** /**
* @private * @private
*/ */
_onPan: function (coordInfo, coordSysName, controller, dx, dy, oldX, oldY, newX, newY) { _onPan: function (coordInfo, coordSysName, controller, e) {
var lastRange = this._range; var lastRange = this._range;
var range = lastRange.slice(); var range = lastRange.slice();
...@@ -112,7 +113,7 @@ var InsideZoomView = DataZoomView.extend({ ...@@ -112,7 +113,7 @@ var InsideZoomView = DataZoomView.extend({
} }
var directionInfo = getDirectionInfo[coordSysName]( var directionInfo = getDirectionInfo[coordSysName](
[oldX, oldY], [newX, newY], axisModel, controller, coordInfo [e.oldX, e.oldY], [e.newX, e.newY], axisModel, controller, coordInfo
); );
var percentDelta = directionInfo.signal var percentDelta = directionInfo.signal
...@@ -131,7 +132,7 @@ var InsideZoomView = DataZoomView.extend({ ...@@ -131,7 +132,7 @@ var InsideZoomView = DataZoomView.extend({
/** /**
* @private * @private
*/ */
_onZoom: function (coordInfo, coordSysName, controller, scale, mouseX, mouseY) { _onZoom: function (coordInfo, coordSysName, controller, e) {
var lastRange = this._range; var lastRange = this._range;
var range = lastRange.slice(); var range = lastRange.slice();
...@@ -142,7 +143,7 @@ var InsideZoomView = DataZoomView.extend({ ...@@ -142,7 +143,7 @@ var InsideZoomView = DataZoomView.extend({
} }
var directionInfo = getDirectionInfo[coordSysName]( var directionInfo = getDirectionInfo[coordSysName](
null, [mouseX, mouseY], axisModel, controller, coordInfo null, [e.originX, e.originY], axisModel, controller, coordInfo
); );
var percentPoint = ( var percentPoint = (
directionInfo.signal > 0 directionInfo.signal > 0
...@@ -150,7 +151,7 @@ var InsideZoomView = DataZoomView.extend({ ...@@ -150,7 +151,7 @@ var InsideZoomView = DataZoomView.extend({
: (directionInfo.pixel - directionInfo.pixelStart) : (directionInfo.pixel - directionInfo.pixelStart)
) / directionInfo.pixelLength * (range[1] - range[0]) + range[0]; ) / directionInfo.pixelLength * (range[1] - range[0]) + range[0];
scale = Math.max(1 / scale, 0); var scale = Math.max(1 / e.scale, 0);
range[0] = (range[0] - percentPoint) * scale + percentPoint; range[0] = (range[0] - percentPoint) * scale + percentPoint;
range[1] = (range[1] - percentPoint) * scale + percentPoint; range[1] = (range[1] - percentPoint) * scale + percentPoint;
......
...@@ -136,8 +136,15 @@ function giveStore(api) { ...@@ -136,8 +136,15 @@ function giveStore(api) {
function createController(api, newRecord) { function createController(api, newRecord) {
var controller = new RoamController(api.getZr()); var controller = new RoamController(api.getZr());
controller.on('pan', curry(onPan, newRecord));
controller.on('zoom', curry(onZoom, newRecord)); zrUtil.each(['pan', 'zoom', 'scrollMove'], function (eventName) {
controller.on(eventName, function (event) {
wrapAndDispatch(newRecord, function (info) {
var methodName = eventName + 'GetRange';
return info[methodName] && info[methodName](newRecord.controller, event);
});
});
});
return controller; return controller;
} }
...@@ -151,17 +158,23 @@ function cleanStore(store) { ...@@ -151,17 +158,23 @@ function cleanStore(store) {
}); });
} }
function onPan(record, dx, dy, oldX, oldY, newX, newY) { // function onPan(record, dx, dy, oldX, oldY, newX, newY) {
wrapAndDispatch(record, function (info) { // wrapAndDispatch(record, function (info) {
return info.panGetRange(record.controller, dx, dy, oldX, oldY, newX, newY); // return info.panGetRange(record.controller, dx, dy, oldX, oldY, newX, newY);
}); // });
} // }
function onZoom(record, scale, mouseX, mouseY) { // function onZoom(record, scale, mouseX, mouseY) {
wrapAndDispatch(record, function (info) { // wrapAndDispatch(record, function (info) {
return info.zoomGetRange(record.controller, scale, mouseX, mouseY); // return info.zoomGetRange(record.controller, scale, mouseX, mouseY);
}); // });
} // }
// function onScrollMove(record, scrollDelta) {
// wrapAndDispatch(record, function (info) {
// return info.scrollMoveGetRange(record.controller, scrollDelta);
// });
// }
function wrapAndDispatch(record, getRange) { function wrapAndDispatch(record, getRange) {
var batch = []; var batch = [];
......
...@@ -389,26 +389,26 @@ MapDraw.prototype = { ...@@ -389,26 +389,26 @@ MapDraw.prototype = {
return action; return action;
} }
controller.off('pan').on('pan', function (dx, dy) { controller.off('pan').on('pan', function (e) {
this._mouseDownFlag = false; this._mouseDownFlag = false;
roamHelper.updateViewOnPan(controllerHost, dx, dy); roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy);
api.dispatchAction(zrUtil.extend(makeActionBase(), { api.dispatchAction(zrUtil.extend(makeActionBase(), {
dx: dx, dx: e.dx,
dy: dy dy: e.dy
})); }));
}, this); }, this);
controller.off('zoom').on('zoom', function (zoom, mouseX, mouseY) { controller.off('zoom').on('zoom', function (e) {
this._mouseDownFlag = false; this._mouseDownFlag = false;
roamHelper.updateViewOnZoom(controllerHost, zoom, mouseX, mouseY); roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);
api.dispatchAction(zrUtil.extend(makeActionBase(), { api.dispatchAction(zrUtil.extend(makeActionBase(), {
zoom: zoom, zoom: e.scale,
originX: mouseX, originX: e.originX,
originY: mouseY originY: e.originY
})); }));
if (this._updateGroup) { if (this._updateGroup) {
......
...@@ -76,6 +76,7 @@ function RoamController(zr) { ...@@ -76,6 +76,7 @@ function RoamController(zr) {
* @param {Object} [opt] * @param {Object} [opt]
* @param {Object} [opt.zoomOnMouseWheel=true] * @param {Object} [opt.zoomOnMouseWheel=true]
* @param {Object} [opt.moveOnMouseMove=true] * @param {Object} [opt.moveOnMouseMove=true]
* @param {Object} [opt.moveOnMouseWheel=false]
* @param {Object} [opt.preventDefaultMouseMove=true] When pan. * @param {Object} [opt.preventDefaultMouseMove=true] When pan.
*/ */
this.enable = function (controlType, opt) { this.enable = function (controlType, opt) {
...@@ -86,6 +87,7 @@ function RoamController(zr) { ...@@ -86,6 +87,7 @@ function RoamController(zr) {
this._opt = zrUtil.defaults(zrUtil.clone(opt) || {}, { this._opt = zrUtil.defaults(zrUtil.clone(opt) || {}, {
zoomOnMouseWheel: true, zoomOnMouseWheel: true,
moveOnMouseMove: true, moveOnMouseMove: true,
moveOnMouseWheel: false,
preventDefaultMouseMove: true preventDefaultMouseMove: true
}); });
...@@ -169,7 +171,7 @@ function mousemove(e) { ...@@ -169,7 +171,7 @@ function mousemove(e) {
this._opt.preventDefaultMouseMove && eventTool.stop(e.event); this._opt.preventDefaultMouseMove && eventTool.stop(e.event);
this.trigger('pan', dx, dy, oldX, oldY, x, y); this.trigger('pan', {dx: dx, dy: dy, oldX: oldX, oldY: oldY, newX: x, newY: y});
} }
function mouseup(e) { function mouseup(e) {
...@@ -179,34 +181,56 @@ function mouseup(e) { ...@@ -179,34 +181,56 @@ function mouseup(e) {
} }
function mousewheel(e) { function mousewheel(e) {
var shouldZoom = checkKeyBinding(this, 'zoomOnMouseWheel', e);
var shouldMove = checkKeyBinding(this, 'moveOnMouseWheel', e);
var wheelDelta = e.wheelDelta;
var absWheelDeltaDelta = Math.abs(wheelDelta);
// wheelDelta maybe -0 in chrome mac. // wheelDelta maybe -0 in chrome mac.
if (!checkKeyBinding(this, 'zoomOnMouseWheel', e) || e.wheelDelta === 0) { if (wheelDelta === 0 || (!shouldZoom && !shouldMove)) {
return; return;
} }
// console.log(wheelDelta);
if (shouldZoom) {
// Convenience:
// Mac and VM Windows on Mac: scroll up: zoom out.
// Windows: scroll up: zoom in.
// FIXME: Should do more test in different environment.
// wheelDelta is too complicated in difference nvironment
// (https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel),
// although it has been normallized by zrender.
// wheelDelta of mouse wheel is bigger than touch pad.
var factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 1 ? 1.2 : 1.1;
var scale = wheelDelta > 0 ? factor : 1 / factor;
zoom.call(this, e, scale, e.offsetX, e.offsetY);
}
// Convenience: if (shouldMove) {
// Mac and VM Windows on Mac: scroll up: zoom out. // FIXME: Should do more test in different environment.
// Windows: scroll up: zoom in. var absDelta = Math.abs(wheelDelta);
var zoomDelta = e.wheelDelta > 0 ? 1.1 : 1 / 1.1; // wheelDelta of mouse wheel is bigger than touch pad.
zoom.call(this, e, zoomDelta, e.offsetX, e.offsetY); var scrollDelta = absDelta > 3 ? 1.4 : absDelta > 1 ? 1.2 : 1.1;
this.trigger('scrollMove', {scrollDelta: scrollDelta});
}
} }
function pinch(e) { function pinch(e) {
if (interactionMutex.isTaken(this._zr, 'globalPan')) { if (interactionMutex.isTaken(this._zr, 'globalPan')) {
return; return;
} }
var zoomDelta = e.pinchScale > 1 ? 1.1 : 1 / 1.1; var scale = e.pinchScale > 1 ? 1.1 : 1 / 1.1;
zoom.call(this, e, zoomDelta, e.pinchX, e.pinchY); zoom.call(this, e, scale, e.pinchX, e.pinchY);
} }
function zoom(e, zoomDelta, zoomX, zoomY) { function zoom(e, scale, originX, originY) {
if (this.pointerChecker && this.pointerChecker(e, zoomX, zoomY)) { if (this.pointerChecker && this.pointerChecker(e, originX, originY)) {
// When mouse is out of roamController rect, // When mouse is out of roamController rect,
// default befavoius should not be be disabled, otherwise // default befavoius should not be be disabled, otherwise
// page sliding is disabled, contrary to expectation. // page sliding is disabled, contrary to expectation.
eventTool.stop(e.event); eventTool.stop(e.event);
this.trigger('zoom', zoomDelta, zoomX, zoomY); this.trigger('zoom', {scale: scale, originX: originX, originY: originY});
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册