Skip to content

FxCaptchaPuzzle 拼图滑块验证 ​

背景画布随机位置抠出拼图缺口,拖动下方滑块把图块平移回缺口对齐。距离差在容差内通过,否则图块归零并提示失败;点击画布换一题。

图片跨域

组件用 canvas getImageData 取像,图片源必须返回 CORS 头(crossOrigin="anonymous")——picsum 等主流图床可用,无 CORS 的图源会触发画布污染报错。

基础用法 ​

vue
<script setup lang="ts">
import { FxCaptchaPuzzle } from "@fx/components"

const onSuccess = ({ time }) => console.log(`验证通过,用时 ${time}s`)
</script>

Attributes ​

参数说明类型默认值
v-model通过状态booleanfalse
src图片地址(需 CORS)string—
canvasWidth画布宽度(px)number320
canvasHeight画布高度(px)number200
squareLength切块方形边长(px)number42
circleRadius切块圆形半径(px)number10
diffDistance通过的允许距离差(px)number3
answerX服务端下发的缺口横向坐标(提供时跳过本地随机,答案由服务端留存校验)number—
server-side服务端判定模式:src 为服务端合成缺口图(不本地抠图),松手上报 release 由外部校验驱动booleanfalse
piece-url服务端合成的切片图地址(server-side 模式必传,替代本地 canvas 抠图;宽=缺口径、高=画布高,纵向已含缺口位置)string—
defaultTip画布底部默认提示string'拖动滑块完成拼图'

服务端校验

两种接法:① answer-x 下发答案留存的本地判定(组件内提示通过与否);② server-side 模式——服务端把缺口直接合成进底图并单独出切片图(src/piece-url 指向动态出图端点),前端不见缺口坐标,松手经 release 事件上报横移距离由服务端复验。生产推荐 ②(答案不出服务端)。

Events ​

事件名说明回调参数
success验证通过(本地判定模式)({ isPassing: boolean, time: string })
release松手上报(server-side 模式):value 为切片横移距离(px)({ value: number, time: string })

Slots ​

全部透传给内部滑块基座:text(内容文字)、actionIcon(滑块图标),作用域 { isPassing }。

Expose ​

方法说明
resume换一题并复位(重新随机缺口位置、清通过态)