@jdcfe/yep-react
Version:
一套移动端的React组件库
186 lines (150 loc) • 8.27 kB
JavaScript
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() {}
};
;