Skip to content

Commit 8ccd01a

Browse files
committed
feat: 增加基于图片拼图切片平移的验证码
1 parent bbd8a53 commit 8ccd01a

File tree

3 files changed

+16
-10
lines changed
  • packages
    • effects/common-ui/src/components/captcha/slider-translate-captcha
    • locales/src/langs

3 files changed

+16
-10
lines changed

packages/effects/common-ui/src/components/captcha/slider-translate-captcha/index.vue

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ const state = reactive({
5353
startTime: 0,
5454
endTime: 0,
5555
pieceX: 0,
56-
PieceY: 0,
56+
pieceY: 0,
5757
moveDistance: 0,
5858
isPassing: false,
5959
showTip: false,
@@ -73,10 +73,10 @@ function setLeft(val: string) {
7373
7474
const verifyTip = computed(() => {
7575
return state.isPassing
76-
? $t('ui.captcha.sliderRotateSuccessTip', [
76+
? $t('ui.captcha.sliderTranslateSuccessTip', [
7777
((state.endTime - state.startTime) / 1000).toFixed(1),
7878
])
79-
: $t('ui.captcha.sliderRotateFailTip');
79+
: $t('ui.captcha.sliderTranslateFailTip');
8080
});
8181
function handleStart() {
8282
state.startTime = Date.now();
@@ -93,7 +93,7 @@ function handleDragEnd() {
9393
const { pieceX } = state;
9494
const { diffDistance } = props;
9595
96-
if (Math.abs(pieceX - state.moveDistance) >= (diffDistance || 10)) {
96+
if (Math.abs(pieceX - state.moveDistance) >= (diffDistance || 5)) {
9797
setLeft('0');
9898
state.moveDistance = 0;
9999
} else {
@@ -161,7 +161,7 @@ function initCanvas() {
161161
pieceCanvasCtx.drawImage(img, 0, 0, canvasWidth, canvasHeight);
162162
const pieceLength = squareLength + 2 * circleRadius + 3;
163163
const sx = state.pieceX;
164-
const sy = state.PieceY - 2 * circleRadius - 1;
164+
const sy = state.pieceY - 2 * circleRadius - 1;
165165
const imageData = pieceCanvasCtx.getImageData(
166166
sx,
167167
sy,
@@ -185,12 +185,12 @@ function draw(ctx1: CanvasRenderingContext2D, ctx2: CanvasRenderingContext2D) {
185185
squareLength + 2 * circleRadius,
186186
canvasWidth - (squareLength + 2 * circleRadius),
187187
);
188-
state.PieceY = getRandomNumberByRange(
188+
state.pieceY = getRandomNumberByRange(
189189
3 * circleRadius,
190190
canvasHeight - (squareLength + 2 * circleRadius),
191191
);
192-
drawPiece(ctx1, state.pieceX, state.PieceY, CanvasOpr.Fill);
193-
drawPiece(ctx2, state.pieceX, state.PieceY, CanvasOpr.Clip);
192+
drawPiece(ctx1, state.pieceX, state.pieceY, CanvasOpr.Fill);
193+
drawPiece(ctx2, state.pieceX, state.pieceY, CanvasOpr.Clip);
194194
}
195195
196196
// 绘制拼图切块
@@ -246,7 +246,7 @@ function resume() {
246246
state.dragging = false;
247247
state.isPassing = false;
248248
state.pieceX = 0;
249-
state.PieceY = 0;
249+
state.pieceY = 0;
250250
251251
basicEl.resume();
252252
resetCanvas();
@@ -290,7 +290,7 @@ onMounted(() => {
290290
{{ verifyTip }}
291291
</div>
292292
<div v-if="!state.dragging" class="bg-black/30">
293-
{{ defaultTip || $t('ui.captcha.sliderRotateDefaultTip') }}
293+
{{ defaultTip || $t('ui.captcha.sliderTranslateDefaultTip') }}
294294
</div>
295295
</div>
296296
</div>

packages/locales/src/langs/en-US/ui.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,11 @@
3232
"sliderDefaultText": "Slider and drag",
3333
"alt": "Supports img tag src attribute value",
3434
"sliderRotateDefaultTip": "Click picture to refresh",
35+
"sliderTranslateDefaultTip": "Click picture to refresh",
3536
"sliderRotateFailTip": "Validation failed",
3637
"sliderRotateSuccessTip": "Validation successful, time {0} seconds",
38+
"sliderTranslateFailTip": "Validation failed",
39+
"sliderTranslateSuccessTip": "Validation successful, time {0} seconds",
3740
"refreshAriaLabel": "Refresh captcha",
3841
"confirmAriaLabel": "Confirm selection",
3942
"confirm": "Confirm",

packages/locales/src/langs/zh-CN/ui.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@
3131
"sliderSuccessText": "验证通过",
3232
"sliderDefaultText": "请按住滑块拖动",
3333
"sliderRotateDefaultTip": "点击图片可刷新",
34+
"sliderTranslateDefaultTip": "点击图片可刷新",
3435
"sliderRotateFailTip": "验证失败",
3536
"sliderRotateSuccessTip": "验证成功,耗时{0}秒",
37+
"sliderTranslateFailTip": "验证失败",
38+
"sliderTranslateSuccessTip": "验证成功,耗时{0}秒",
3639
"alt": "支持img标签src属性值",
3740
"refreshAriaLabel": "刷新验证码",
3841
"confirmAriaLabel": "确认选择",

0 commit comments

Comments
 (0)