cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
166 lines (165 loc) • 5.77 kB
JavaScript
import { __extends } from "../../../../tslib/tslib.es6.mjs";
import Eventful from "../../../../zrender/lib/core/Eventful.mjs";
import { isMiddleOrRightButtonOnMouseUpDown, stop } from "../../../../zrender/lib/core/event.mjs";
import { isTaken } from "./interactionMutex.mjs";
import { bind, defaults, clone, isString } from "../../../../zrender/lib/core/util.mjs";
var RoamController = function(_super) {
__extends(RoamController2, _super);
function RoamController2(zr) {
var _this = _super.call(this) || this;
_this._zr = zr;
var mousedownHandler = bind(_this._mousedownHandler, _this);
var mousemoveHandler = bind(_this._mousemoveHandler, _this);
var mouseupHandler = bind(_this._mouseupHandler, _this);
var mousewheelHandler = bind(_this._mousewheelHandler, _this);
var pinchHandler = bind(_this._pinchHandler, _this);
_this.enable = function(controlType, opt) {
this.disable();
this._opt = defaults(clone(opt) || {}, {
zoomOnMouseWheel: true,
moveOnMouseMove: true,
moveOnMouseWheel: false,
preventDefaultMouseMove: true
});
if (controlType == null) {
controlType = true;
}
if (controlType === true || controlType === "move" || controlType === "pan") {
zr.on("mousedown", mousedownHandler);
zr.on("mousemove", mousemoveHandler);
zr.on("mouseup", mouseupHandler);
}
if (controlType === true || controlType === "scale" || controlType === "zoom") {
zr.on("mousewheel", mousewheelHandler);
zr.on("pinch", pinchHandler);
}
};
_this.disable = function() {
zr.off("mousedown", mousedownHandler);
zr.off("mousemove", mousemoveHandler);
zr.off("mouseup", mouseupHandler);
zr.off("mousewheel", mousewheelHandler);
zr.off("pinch", pinchHandler);
};
return _this;
}
RoamController2.prototype.isDragging = function() {
return this._dragging;
};
RoamController2.prototype.isPinching = function() {
return this._pinching;
};
RoamController2.prototype.setPointerChecker = function(pointerChecker) {
this.pointerChecker = pointerChecker;
};
RoamController2.prototype.dispose = function() {
this.disable();
};
RoamController2.prototype._mousedownHandler = function(e) {
if (isMiddleOrRightButtonOnMouseUpDown(e)) {
return;
}
var el = e.target;
while (el) {
if (el.draggable) {
return;
}
el = el.__hostTarget || el.parent;
}
var x = e.offsetX;
var y = e.offsetY;
if (this.pointerChecker && this.pointerChecker(e, x, y)) {
this._x = x;
this._y = y;
this._dragging = true;
}
};
RoamController2.prototype._mousemoveHandler = function(e) {
if (!this._dragging || !isAvailableBehavior("moveOnMouseMove", e, this._opt) || e.gestureEvent === "pinch" || isTaken(this._zr, "globalPan")) {
return;
}
var x = e.offsetX;
var y = e.offsetY;
var oldX = this._x;
var oldY = this._y;
var dx = x - oldX;
var dy = y - oldY;
this._x = x;
this._y = y;
this._opt.preventDefaultMouseMove && stop(e.event);
trigger(this, "pan", "moveOnMouseMove", e, {
dx,
dy,
oldX,
oldY,
newX: x,
newY: y,
isAvailableBehavior: null
});
};
RoamController2.prototype._mouseupHandler = function(e) {
if (!isMiddleOrRightButtonOnMouseUpDown(e)) {
this._dragging = false;
}
};
RoamController2.prototype._mousewheelHandler = function(e) {
var shouldZoom = isAvailableBehavior("zoomOnMouseWheel", e, this._opt);
var shouldMove = isAvailableBehavior("moveOnMouseWheel", e, this._opt);
var wheelDelta = e.wheelDelta;
var absWheelDeltaDelta = Math.abs(wheelDelta);
var originX = e.offsetX;
var originY = e.offsetY;
if (wheelDelta === 0 || !shouldZoom && !shouldMove) {
return;
}
if (shouldZoom) {
var factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 1 ? 1.2 : 1.1;
var scale = wheelDelta > 0 ? factor : 1 / factor;
checkPointerAndTrigger(this, "zoom", "zoomOnMouseWheel", e, {
scale,
originX,
originY,
isAvailableBehavior: null
});
}
if (shouldMove) {
var absDelta = Math.abs(wheelDelta);
var scrollDelta = (wheelDelta > 0 ? 1 : -1) * (absDelta > 3 ? 0.4 : absDelta > 1 ? 0.15 : 0.05);
checkPointerAndTrigger(this, "scrollMove", "moveOnMouseWheel", e, {
scrollDelta,
originX,
originY,
isAvailableBehavior: null
});
}
};
RoamController2.prototype._pinchHandler = function(e) {
if (isTaken(this._zr, "globalPan")) {
return;
}
var scale = e.pinchScale > 1 ? 1.1 : 1 / 1.1;
checkPointerAndTrigger(this, "zoom", null, e, {
scale,
originX: e.pinchX,
originY: e.pinchY,
isAvailableBehavior: null
});
};
return RoamController2;
}(Eventful);
function checkPointerAndTrigger(controller, eventName, behaviorToCheck, e, contollerEvent) {
if (controller.pointerChecker && controller.pointerChecker(e, contollerEvent.originX, contollerEvent.originY)) {
stop(e.event);
trigger(controller, eventName, behaviorToCheck, e, contollerEvent);
}
}
function trigger(controller, eventName, behaviorToCheck, e, contollerEvent) {
contollerEvent.isAvailableBehavior = bind(isAvailableBehavior, null, behaviorToCheck, e);
controller.trigger(eventName, contollerEvent);
}
function isAvailableBehavior(behaviorToCheck, e, settings) {
var setting = settings[behaviorToCheck];
return !behaviorToCheck || setting && (!isString(setting) || e.event[setting + "Key"]);
}
var RoamController$1 = RoamController;
export { RoamController$1 as default };