knk
Version:
react components based on react
141 lines (138 loc) • 5.75 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.ZoomGroup = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _dragble_modal = _interopRequireDefault(require("./dragble_modal"));
var _propTypes = _interopRequireDefault(require("prop-types"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/**
* 可拖拽,可放大缩小的图片组件
*/
var dragging = false;
var startX = null;
var startY = null;
var endX = null;
var endY = null;
var recordX = 0;
var recordY = 0;
var zoomPrecent = null;
var ZoomImage = function ZoomImage(props) {
var handleImageWheel = function handleImageWheel(e) {
var body = document.getElementsByTagName('body')[0];
body.style.overflow = 'hidden';
var zoomImage = document.getElementById('zoomImage');
var zoom = parseInt(zoomImage.getAttribute('zoom'), 10) || 100;
zoom += e.deltaY / 10;
if (zoom > 100 && zoom < 300) {
zoomPrecent = zoom / 100;
zoomImage.style.transform = "scale(".concat(zoomPrecent, ", ").concat(zoomPrecent, ")");
zoomImage.setAttribute('zoom', "".concat(zoom, "%"));
} else {
return false;
}
};
var handleMouseDown = function handleMouseDown(e) {
e.stopPropagation();
e.preventDefault();
startX = e.clientX - recordX * 2;
startY = e.clientY - recordY * 2;
dragging = true;
};
var handleMouseMove = function handleMouseMove(e) {
e.stopPropagation();
e.preventDefault();
if (dragging) {
var zoomImage = document.getElementById('zoomImage');
endX = e.clientX;
endY = e.clientY;
// 控制拖拽灵敏度
recordX = (endX - startX) / 2;
recordY = (endY - startY) / 2;
zoomImage.style.transform = "scale(".concat(zoomPrecent, ", ").concat(zoomPrecent, ") translate(").concat(recordX, "px, ").concat(recordY, "px)");
}
};
var handleMouseUpAndLeave = function handleMouseUpAndLeave(e) {
e.stopPropagation();
e.preventDefault();
dragging = false;
startX = null;
startY = null;
endX = null;
endY = null;
};
var handleOnCancel = function handleOnCancel() {
var onCancel = props.onCancel;
var body = document.getElementsByTagName('body')[0];
body.style.overflow = '';
onCancel();
};
var path = props.path;
return /*#__PURE__*/_react.default.createElement(_dragble_modal.default, {
onCancel: handleOnCancel,
title: "\u56FE\u7247\u9884\u89C8"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "app-file-preview-image"
}, /*#__PURE__*/_react.default.createElement("img", {
id: "zoomImage",
src: path,
onWheel: handleImageWheel,
onMouseDown: handleMouseDown,
onMouseMove: handleMouseMove,
onMouseUp: handleMouseUpAndLeave,
onMouseLeave: handleMouseUpAndLeave
})));
};
var ZoomView = function ZoomView(props) {
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
showModal = _useState2[0],
setShowModal = _useState2[1];
var path = props.path;
var handleCloseModal = function handleCloseModal() {
setShowModal(false);
};
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
onClick: function onClick(e) {
e.preventDefault();
setShowModal(true);
}
}, /*#__PURE__*/_react.default.createElement("img", {
src: path
})), showModal ? /*#__PURE__*/_react.default.createElement(ZoomImage, {
path: path,
onCancel: handleCloseModal
}) : null);
};
var ZoomGroup = exports.ZoomGroup = function ZoomGroup(props) {
var path = props.path;
var list = [];
if (Array.isArray(path)) {
list = path;
} else {
list = [path];
}
return /*#__PURE__*/_react.default.createElement("div", {
className: "app-file-upload"
}, /*#__PURE__*/_react.default.createElement("ul", {
className: "app-file-upload-preview no-list-style"
}, list.map(function (item, index) {
return /*#__PURE__*/_react.default.createElement("li", {
key: index,
className: "file-wrapper super-file-wrapper"
}, /*#__PURE__*/_react.default.createElement(ZoomView, {
key: index,
path: item
}));
})));
};
ZoomImage.propTypes = {
path: _propTypes.default.string,
onCancel: _propTypes.default.func
};
var _default = exports.default = ZoomImage;