pixuireactcomponents 1.4.8 → 1.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export { ImageViewer } from "./src/components/react/app/imageViewer/imageViewer"
6
6
  export { ToggleGroup } from "./src/components/react/app/togglegroup/ToggleGroup";
7
7
  export { VideoPlayer } from "./src/components/react/app/videoPlayer/VideoPlayer";
8
8
  export { WheelPicker } from "./src/components/react/app/wheelPicker/WheelPicker";
9
+ export { ScratchCard } from "src/components/react/app/scratchCard/ScratchCard";
9
10
  export { GradientText } from "./src/components/react/base/gradient/GradientText";
10
11
  export { PVideo } from "./src/components/react/base/pixVideo/PixVideo";
11
12
  export { OutlineText } from "./src/components/react/base/outlinetext/OutlineText";
package/index.js CHANGED
@@ -8,6 +8,7 @@ export { Slider } from './src/components/react/app/slider/Slider';
8
8
  export { ToggleGroup } from './src/components/react/app/togglegroup/ToggleGroup';
9
9
  export { VideoPlayer } from './src/components/react/app/videoPlayer/VideoPlayer';
10
10
  export { WheelPicker } from './src/components/react/app/wheelPicker/WheelPicker';
11
+ export { ScratchCard } from 'src/components/react/app/scratchCard/ScratchCard';
11
12
  export { GradientText } from './src/components/react/base/gradient/GradientText';
12
13
  export { PVideo } from './src/components/react/base/pixVideo/PixVideo';
13
14
  export { OutlineText } from './src/components/react/base/outlinetext/OutlineText';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixuireactcomponents",
3
- "version": "1.4.8",
3
+ "version": "1.4.9",
4
4
  "description": "pixui react components",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -0,0 +1,15 @@
1
+ import { CSSProperties, h } from 'preact';
2
+ export interface ScratchCardProps {
3
+ cardId?: string;
4
+ ratio?: number;
5
+ moveRadius?: number;
6
+ startCallback?: Function;
7
+ clearCallback?: Function;
8
+ coverImage?: string;
9
+ coverColor?: string;
10
+ coverWidth: number;
11
+ coverHeight: number;
12
+ coverStyle?: CSSProperties;
13
+ resultStyle?: CSSProperties;
14
+ }
15
+ export declare const ScratchCard: (props: ScratchCardProps, ref: any) => h.JSX.Element;
@@ -0,0 +1,217 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { h } from 'preact';
49
+ import { useEffect, useRef, useState } from 'preact/hooks';
50
+ // export type ScratchCardRef = {
51
+ // // canvasContainer: HTMLCanvasElement;
52
+ // // initDone: boolean;
53
+ // clearCard: () => void;
54
+ // };
55
+ var defaultStyle = {
56
+ width: '100%',
57
+ height: '100%',
58
+ display: 'flex',
59
+ justifyContent: 'center',
60
+ alignItems: 'center'
61
+ };
62
+ export var ScratchCard = function (props, ref) {
63
+ var _a = props.cardId, cardId = _a === void 0 ? 'scratch-card' : _a, _b = props.ratio, ratio = _b === void 0 ? 1 : _b, startCallback = props.startCallback, clearCallback = props.clearCallback, coverImage = props.coverImage, coverColor = props.coverColor, coverWidth = props.coverWidth, coverHeight = props.coverHeight, coverStyle = props.coverStyle, resultStyle = props.resultStyle, _c = props.moveRadius, moveRadius = _c === void 0 ? 10 : _c;
64
+ var canvasRef = useRef(null);
65
+ var _d = useState(false), isResultLoad = _d[0], setIsResultLoad = _d[1];
66
+ // 记录鼠标位置,用作平滑效果
67
+ var lastPos = { x: 0, y: 0 };
68
+ // 记录首次刮卡
69
+ var isStarted = false;
70
+ // 记录是否正在刮卡
71
+ var isDrawing = false;
72
+ // 已经刮过的元素数量
73
+ var scratchedPixels = 0;
74
+ // canvas元素二维数组
75
+ var scratchMap;
76
+ useEffect(function () {
77
+ var drawCanvas = function () { return __awaiter(void 0, void 0, void 0, function () {
78
+ var canvas, ctx;
79
+ return __generator(this, function (_a) {
80
+ canvas = canvasRef.current;
81
+ ctx = canvas.getContext('2d');
82
+ console.log("canvas: ", canvas, ctx);
83
+ if (ctx) {
84
+ if (coverColor) {
85
+ ctx.fillStyle = coverColor;
86
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
87
+ setIsResultLoad(true);
88
+ }
89
+ }
90
+ scratchMap = Array.from({ length: canvas.height }, function () { return Array(canvas.width).fill(false); });
91
+ canvas.addEventListener('mousedown', handleMouseDown);
92
+ canvas.addEventListener('mouseup', handleMouseUp);
93
+ canvas.addEventListener('mousemove', handleMouseMove);
94
+ return [2 /*return*/];
95
+ });
96
+ }); };
97
+ drawCanvas();
98
+ return function () { removeListener(); };
99
+ }, [coverColor]);
100
+ var drawImage = function () {
101
+ var canvas = canvasRef.current;
102
+ var ctx = canvas.getContext('2d');
103
+ if (ctx) {
104
+ var image = document.getElementById("".concat(cardId, "_img"));
105
+ ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
106
+ setIsResultLoad(true);
107
+ }
108
+ };
109
+ var handleMouseDown = function (e) {
110
+ // console.log("handleMouseDown: ", e )
111
+ isDrawing = true;
112
+ if (!isStarted && startCallback) {
113
+ startCallback();
114
+ isStarted = true;
115
+ }
116
+ var rect = canvasRef.current.getBoundingClientRect();
117
+ var x = e.clientX - rect.left;
118
+ var y = e.clientY - rect.top;
119
+ lastPos = { x: x, y: y };
120
+ handleScratch(x, y);
121
+ };
122
+ var handleMouseUp = function (e) {
123
+ // console.log("handleMouseUp: ", e )
124
+ isDrawing = false;
125
+ handleIfComplete();
126
+ };
127
+ var handleMouseMove = function (e) {
128
+ // console.log("handleMouseMove: ", isDrawing, e )
129
+ if (!isDrawing) {
130
+ return;
131
+ }
132
+ var rect = canvasRef.current.getBoundingClientRect();
133
+ var x = e.clientX - rect.left;
134
+ var y = e.clientY - rect.top;
135
+ var ctx = canvasRef.current.getContext('2d');
136
+ if (ctx) {
137
+ ctx.globalCompositeOperation = "destination-out";
138
+ ctx.beginPath();
139
+ ctx.moveTo(lastPos.x, lastPos.y);
140
+ ctx.lineTo(x, y);
141
+ ctx.strokeStyle = 'rgba(0,0,0,1)';
142
+ ctx.lineWidth = moveRadius * 2;
143
+ ctx.stroke();
144
+ }
145
+ lastPos = { x: x, y: y };
146
+ handleScratch(x, y);
147
+ };
148
+ var handleScratch = function (x, y) {
149
+ var canvas = canvasRef.current;
150
+ var ctx = canvas.getContext('2d');
151
+ // console.log("handleScratch: ", e )
152
+ if (ctx) {
153
+ for (var i = -moveRadius; i <= moveRadius; i++) {
154
+ for (var j = -moveRadius; j <= moveRadius; j++) {
155
+ var dx = x + i;
156
+ var dy = y + j;
157
+ if (dx >= 0 && dx < canvas.width && dy >= 0 && dy < canvas.height && !scratchMap[dy][dx]) {
158
+ scratchMap[dy][dx] = true;
159
+ scratchedPixels++;
160
+ }
161
+ }
162
+ }
163
+ ctx.globalCompositeOperation = coverImage ? "source-out" : "destination-out";
164
+ ctx.beginPath();
165
+ ctx.arc(x, y, moveRadius, 0, Math.PI * 2);
166
+ ctx.fill();
167
+ }
168
+ };
169
+ var handleIfComplete = function () {
170
+ var canvas = canvasRef.current;
171
+ var ctx = canvas.getContext('2d');
172
+ if (ctx) {
173
+ // getImageData方法目前暂不支持
174
+ // const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
175
+ // const pixels = imageData.data;
176
+ // let scratchedPixels = 0;
177
+ // for(let i = 0; i < pixels.length; i += 4) {
178
+ // if(pixels[i + 3] === 0) {
179
+ // scratchedPixels++;
180
+ // }
181
+ // }
182
+ // if((scratchedPixels / (pixels.length / 4)) > ratio) {
183
+ // if(clearCallback) {
184
+ // clearCallback();
185
+ // }
186
+ // clearCard();
187
+ // }
188
+ var scratchedRatio = scratchedPixels / (canvas.width * canvas.height);
189
+ if (scratchedRatio > ratio) {
190
+ if (clearCallback) {
191
+ clearCallback();
192
+ }
193
+ clearCard();
194
+ }
195
+ }
196
+ };
197
+ var clearCard = function () {
198
+ var canvas = canvasRef.current;
199
+ var ctx = canvas.getContext('2d');
200
+ if (ctx) {
201
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
202
+ removeListener();
203
+ }
204
+ };
205
+ var removeListener = function () {
206
+ var canvas = canvasRef.current;
207
+ if (canvas) {
208
+ canvas.removeEventListener('mousedown', handleMouseDown);
209
+ canvas.removeEventListener('mouseup', handleMouseUp);
210
+ canvas.removeEventListener('mousemove', handleMouseMove);
211
+ }
212
+ };
213
+ return (h("div", { id: cardId, style: __assign({}, defaultStyle) },
214
+ isResultLoad && h("div", { style: __assign({}, resultStyle) }),
215
+ coverImage && h("img", { style: { position: 'absolute', width: "1px", height: "1px" }, id: "".concat(cardId, "_img"), src: coverImage, onLoad: drawImage }),
216
+ h("canvas", { ref: canvasRef, width: coverWidth, height: coverHeight, style: __assign(__assign({}, coverStyle), { position: 'absolute' }) })));
217
+ };