shineout
Version:
Shein 前端组件库
118 lines (92 loc) • 4.25 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
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 = _interopRequireWildcard(require("react"));
var _func = require("../utils/func");
var defaultProps = {
client: undefined,
onDragStart: function onDragStart() {},
onDrag: function onDrag() {},
onDragEnd: function onDragEnd() {}
};
var _default = (0, _func.curry)(function (OriginComponent) {
var Drag =
/*#__PURE__*/
function (_PureComponent) {
(0, _inheritsLoose2.default)(Drag, _PureComponent);
function Drag(props) {
var _this;
_this = _PureComponent.call(this, props) || this;
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "clientX", void 0);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "clientY", void 0);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "dragging", void 0);
_this.handleDragStart = _this.handleDragStart.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
_this.handleDrag = _this.handleDrag.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
_this.handleDragEnd = _this.handleDragEnd.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
return _this;
}
var _proto = Drag.prototype;
_proto.componentDidMount = function componentDidMount() {
var client = this.props.client;
if (client) {
this.clientX = client.x;
this.clientY = client.y;
this.dragging = true;
this.addEvents();
if (this.props.onDragStart) this.props.onDragStart();
}
};
_proto.componentWillUnmount = function componentWillUnmount() {
this.removeEvents();
};
_proto.addEvents = function addEvents() {
document.addEventListener('mousemove', this.handleDrag);
document.addEventListener('mouseup', this.handleDragEnd);
document.addEventListener('mouseleave', this.handleDragEnd);
};
_proto.removeEvents = function removeEvents() {
document.removeEventListener('mousemove', this.handleDrag);
document.removeEventListener('mouseup', this.handleDragEnd);
document.removeEventListener('mouseleave', this.handleDragEnd);
};
_proto.handleDragStart = function handleDragStart(e) {
if (e.button !== 0) return;
this.clientX = e.clientX;
this.clientY = e.clientY;
this.dragging = true;
this.addEvents();
if (this.props.onDragStart) this.props.onDragStart();
};
_proto.handleDrag = function handleDrag(e) {
if (!this.dragging) return;
if (e.clientX === 0 && e.clientY === 0) return;
var mx = e.clientX - this.clientX;
var my = e.clientY - this.clientY;
if (mx === 0 && my === 0) return;
this.clientX = e.clientX;
this.clientY = e.clientY;
if (this.props.onDrag) this.props.onDrag(mx, my, e.clientX, e.clientY);
};
_proto.handleDragEnd = function handleDragEnd() {
if (!this.dragging) return;
this.dragging = false;
this.removeEvents();
if (this.props.onDragEnd) this.props.onDragEnd();
};
_proto.render = function render() {
return _react.default.createElement(OriginComponent, (0, _extends2.default)({}, this.props, {
onDragStart: this.handleDragStart
}));
};
return Drag;
}(_react.PureComponent);
(0, _defineProperty2.default)(Drag, "defaultProps", defaultProps);
return Drag;
});
exports.default = _default;