UNPKG

shineout

Version:

Shein 前端组件库

157 lines (122 loc) 5.81 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _document = require("../utils/dom/document"); var _styles = require("./styles"); var _uid = require("../utils/uid"); var _func = require("../utils/func"); var DIS_LIMIT = 50; var _default = (0, _func.curry)(function (handler, Origin) { var _temp; return _temp = /*#__PURE__*/ function (_React$Component) { (0, _inheritsLoose2.default)(Moveable, _React$Component); function Moveable(props) { var _this; _this = _React$Component.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "moveabledId", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "el", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handlerEl", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "hasDragged", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handlerPos", void 0); _this.state = { x: 0, y: 0, draging: false }; _this.moveabledId = (0, _uid.getUidStr)(); _this.handleMouseDown = _this.handleMouseDown.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleMouseMove = _this.handleMouseMove.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleMouseUp = _this.handleMouseUp.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); return _this; } var _proto = Moveable.prototype; _proto.componentDidMount = function componentDidMount() { this.bindEvent(); }; _proto.componentWillUnmount = function componentWillUnmount() { if (this.el) { this.el.removeEventListener('mousedown', this.handleMouseDown); } }; _proto.getStyle = function getStyle() { var _this$state = this.state, x = _this$state.x, y = _this$state.y; if (!this.hasDragged) return undefined; return { transform: "translate(" + x + "px, " + y + "px)" }; }; _proto.bindEvent = function bindEvent() { this.el = document.querySelector("." + (0, _styles.moveableClass)(this.moveabledId)); if (!this.el) return; this.el.addEventListener('mousedown', this.handleMouseDown); this.handlerEl = handler ? this.el.querySelector(handler) || this.el : this.el; }; _proto.handleMouseDown = function handleMouseDown(e) { if (e.button !== 0 || !this.el) return; if (handler && !e.target.matches(handler)) return; document.addEventListener('mousemove', this.handleMouseMove); document.addEventListener('mouseup', this.handleMouseUp); document.addEventListener('mouseleave', this.handleMouseUp); if (!this.handlerPos) { this.handlerPos = this.handlerEl.getBoundingClientRect(); } this.hasDragged = true; this.setState({ draging: true }); }; _proto.handleMouseMove = function handleMouseMove(e) { var _this2 = this; this.setState(function (prev) { var x = prev.x + e.movementX; var y = prev.y + e.movementY; if (_this2.handlerPos.right + x < DIS_LIMIT || _this2.handlerPos.left + x > _document.docSize.width - DIS_LIMIT) { // eslint-disable-next-line prefer-destructuring x = prev.x; } if (_this2.handlerPos.bottom + y < DIS_LIMIT || _this2.handlerPos.top + y > _document.docSize.height - DIS_LIMIT) { // eslint-disable-next-line prefer-destructuring y = prev.y; } return { x: x, y: y }; }); }; _proto.handleMouseUp = function handleMouseUp() { document.removeEventListener('mousemove', this.handleMouseMove); document.removeEventListener('mouseup', this.handleMouseUp); document.removeEventListener('mouseleave', this.handleMouseUp); this.setState({ draging: false }); }; _proto.render = function render() { var _this$props = this.props, moveable = _this$props.moveable, others = (0, _objectWithoutPropertiesLoose2.default)(_this$props, ["moveable"]); if (!moveable) return _react.default.createElement(Origin, others); var ms = Object.assign({}, this.props.style, this.getStyle()); var mc = (0, _classnames.default)(this.props.className, (0, _styles.moveableClass)('_', this.moveabledId, this.state.draging && 'draging')); return _react.default.createElement(Origin, (0, _extends2.default)({}, others, { style: ms, className: mc })); }; return Moveable; }(_react.default.Component), _temp; }); exports.default = _default;