UNPKG

@jdcfe/yep-react

Version:

一套移动端的React组件库

186 lines (150 loc) 8.27 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var React = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); 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; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var Scratch = /*#__PURE__*/function (_React$PureComponent) { (0, _inherits2.default)(Scratch, _React$PureComponent); var _super = _createSuper(Scratch); function Scratch(props) { var _this; (0, _classCallCheck2.default)(this, Scratch); _this = _super.call(this, props); _this.state = { isAreaShow: true, isArea2Show: false }; _this.touchStart = _this.touchStart.bind((0, _assertThisInitialized2.default)(_this)); _this.touchMove = _this.touchMove.bind((0, _assertThisInitialized2.default)(_this)); _this.touchEnd = _this.touchEnd.bind((0, _assertThisInitialized2.default)(_this)); return _this; } (0, _createClass2.default)(Scratch, [{ key: "componentDidMount", value: function componentDidMount() { var wrap_canvas = document.getElementById('wrap_canvas'); var icanvas = document.getElementById('myCanvas'); // if (wrap_canvas && icanvas) { var iwidth = wrap_canvas.clientWidth; var iheight = wrap_canvas.clientHeight; icanvas.width = iwidth; icanvas.height = iheight; // var drawMode = false; var context = icanvas.getContext('2d'); context.lineCap = 'round'; context.lineJoin = 'round'; // context.fillStyle = 'rgb(193,193,193)'; // context.fillRect(0, 0, iwidth, iheight); var imgObj = new Image(); imgObj.crossOrigin = 'Anonymous'; imgObj.src = this.props.scratchImgUrl; //待图片加载完后,将其显示在canvas上 imgObj.onload = function () { context.drawImage(imgObj, 0, 0, iwidth, iheight); //this即是imgObj,保持图片的原始大小:470*480 //ctx.drawImage(this, 0, 0,1024,768); //改变图片的大小到1024*768 // 在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。(源图像:刮痕区域,目标图像:带图片的初始canvas) context.globalCompositeOperation = 'destination-out'; }; // context.font = '24px 微软雅黑'; // context.fillStyle = '#454444'; // var txt = '刮这里'; // context.fillText(txt, iwidth / 2 - context.measureText(txt).width / 2, iheight / 2 + 9); // context.globalCompositeOperation = 'destination-out'; context.lineWidth = 30; // } } }, { key: "touchStart", value: function touchStart(e) { var icanvas = document.getElementById('myCanvas'); var context = icanvas.getContext('2d'); context.beginPath(); var rect = icanvas.getBoundingClientRect(); context.moveTo(e.changedTouches[0].clientX - rect.left, e.changedTouches[0].clientY - rect.top); // $("#area2").show(); } }, { key: "touchMove", value: function touchMove(e) { // $icanvas.off('touchmove'); e.persist(); this.setState({ isArea2Show: true }); // var e = event; var wrap_canvas = document.getElementById('wrap_canvas'); var icanvas = document.getElementById('myCanvas'); var context = icanvas.getContext('2d'); // if (this.state.down) { var rect = icanvas.getBoundingClientRect(); context.lineTo(e.changedTouches[0].clientX - rect.left, e.changedTouches[0].clientY - rect.top); context.stroke(); // } var iwidth = wrap_canvas.clientWidth; var iheight = wrap_canvas.clientHeight; var imgData = context.getImageData(0, 0, iwidth, iheight), pixles = imgData.data, transPixs = []; for (var i = 0, j = pixles.length; i < j; i += 4) { var a = pixles[i + 3]; if (a < 128) { //@ts-ignore transPixs.push(i); } } //@ts-ignore if (transPixs.length / (pixles.length / 4) * 100 > (this.props.resPercent >= 0 ? this.props.resPercent : 60)) { this.props.resCallback(); this.setState({ isAreaShow: false }); } e.preventDefault && e.preventDefault(); e.returnValue = false; e.stopPropagation && e.stopPropagation(); return false; } }, { key: "touchEnd", value: function touchEnd() {// $icanvas.off('touchend'); // this.setState({ // down: false, // }); } }, { key: "render", value: function render() { var _this$props = this.props, prefixCls = _this$props.prefixCls, className = _this$props.className, style = _this$props.style; var cls = (0, _classnames.default)(prefixCls, className); return /*#__PURE__*/React.createElement("div", { className: cls, style: style }, this.state.isAreaShow && /*#__PURE__*/React.createElement("div", { className: "area", id: "wrap_canvas" }, /*#__PURE__*/React.createElement("canvas", { id: "myCanvas", onTouchStart: this.touchStart, onTouchMove: this.touchMove, onTouchEnd: this.touchEnd })), this.state.isArea2Show && /*#__PURE__*/React.createElement("div", { className: "area2", id: "area2" }, this.props.children)); } }]); return Scratch; }(React.PureComponent); exports.default = Scratch; Scratch.defaultProps = { prefixCls: 'Yep-scratch', style: {}, scratchImgUrl: 'http://img12.360buyimg.com/uba/jfs/t20377/335/194083123/261/85331804/5b02899bN0571f2a7.png', resCallback: function resCallback() {} };