UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

166 lines (165 loc) 5.77 kB
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 };