SL-WX-Captcha 行为验证组件(三合一)

发布时间:2026/9/8 17:39:18

SL-WX-Captcha 行为验证组件(三合一) SL-WX-Captcha 行为验证组件三合一插件市场操作视频组件简介单一组件统一支持三种主流前端行为验证方式通过mode属性零切换slide滑动验证经典滑块按住并拖动到底部最右侧即视为通过失败自动回弹。puzzle拼图验证背景图上随机生成一个缺口位置拖动下方滑块让图片拼图块精准对齐缺口容差可配置。click顺序点字验证背景图上随机散布多个汉字目标字 干扰字用户按提示依次点击所有目标字2~5 个可配。组件内部已兼容H5鼠标 mousedown/move/up与微信小程序touchstart/move/end两套事件链路失败/成功回调、刷新、关闭、容差 / 目标字数等全部参数化可控制。注当前背景图使用picsum.photos随机种子作为纯前端 mock 演示生产环境中建议由后端生成带签名 / 随机水印的验证图与答案并在success回调里携带后端校验。目录结构components/SL-WX-Captcha └── SL-WX-Captcha.vue三种模式对比模式值名称成功判定失败后处理slide滑动验证滑块进度 ≥ 98%即已滑到最右自动吸附 100%400ms easeOutQuad 回弹到 0puzzle拼图验证拼图块中心 − 缺口中心click顺序点字依次点中所有目标字任意一步点错立即失败也支持「确认」按钮手动提交700~900ms 自动清空重试实现要点 修复日志滑动 / 拼图滑块显示与拖拽可用修复问题修复方案滑块初始不可见slideX0时 thumb 完全在轨道外原写法left: X%; transform: translate(-100%, 0)叠加时X0 → translate(-100%)会把 thumb 向左平移一个 thumb 自身宽度挪到轨道外。改为纯像素left: Npxtop:50%; translateY(-50%)垂直居中slideThumbPx / puzzleThumbPx直接从 0 线性增长到轨道宽 - thumb 宽保证两端视觉与比例完全对齐。拼图块无内容、跟缺口对不上原写法里.sl-puzzle-piece__img用width:100% modeaspectFill展示的是拼图块左上角对应底图的 (0,0) 位置——根本不对应缺口的像素。改为piece 里的image宽高强制等于舞台宽高再transform: translate(-pieceLeft, -pieceTop)反向偏移这样 piece 滑到哪就显示底图对应哪一像素对齐缺口时内容完全吻合。缺口形状不明显、不显示原缺口只是一个半透明方块不够像拼图。改为clip-path: polygon()切出「正方形主体 右侧半圆凸块」的经典拼图形状gap缺口蒙版和 piece拼图块共用同一份 clip-path形状完全吻合。首次渲染拖不动原_sliderWidth依赖 SelectorQuery 异步回调结果mounted首次 touchmove 时回调可能还没返回 → 0 导致 dx 被除。在onSlideStart / onPuzzleStart里先调用_ensureSizesFallback()按widthprop 先兜底换算一套可用的轨道/thumb 尺寸保证拖拽启动瞬间就有正确行程。H5 拖出滑块外卡住手势在组件mounted时document.addEventListener(mousemove / mouseup)beforeDestroy统一解绑避免 mousedown 后拖到滑块外松开导致的再按下去无响应。click 模式点字事件平台差异小程序端用touchendchangedTouches[0]H5 端单独绑定tap.stop.prevent取e.clientX/Y避免某一端取不到坐标。失败回弹曲线slide / puzzle 失败后不再用setTimeout 一次性跳回改用requestAnimationFrame easeOutQuad逐帧回弹到 0视觉更自然。progressfail 回调为换算后的百分比便于日志。Props属性类型默认值说明modeStringslide验证模式slide/puzzle/clickwidthNumber|String620组件宽度Number 视为 rpxString 直接作为 CSS 值puzzleHeightNumber320拼图 / 点字模式图片舞台高度rpxtrackHeightNumber72滑块条高度rpxradiusNumber16拼图 / 点字模式圆角rpxpieceSizeNumber100拼图块边长rpx建议为舞台宽度的 1/5~1/6puzzleToleranceNumber4拼图容差像素 px拼图块中心与缺口中心的像素差。生产推荐 24px宽松体验 68pxslideLabelString请按住滑块拖动到最右边模式 1 的提示文案targetCountNumber3模式 3 的目标文字数量必须为 2~5。总随机字数 targetCount distractCountdistractCountNumber4模式 3 的干扰字数量showHeaderBooleantrue是否显示顶部标题与刷新栏showCloseBooleanfalse是否在顶部栏显示「✕」关闭按钮titleString自定义顶部标题留空则根据模式自动取「滑动验证 / 补全图片验证 / 文字顺序验证」Events事件名回调参数说明success{ mode, type, ...payload }验证通过触发type为对应模式名slide/puzzle/clickfail{ mode, type, ...payload }验证失败触发refresh{ mode }点击顶部刷新图标⟳触发close-点击顶部关闭按钮✕触发需要showClose truesuccess / fail 的 payload 详情// mode slidesuccess:{mode:slide,type:slide}fail:{mode:slide,type:slide,progress:Number}// progress 失败时的进度 0~100// mode puzzlesuccess:{mode:puzzle,type:puzzle,diff:1.3,tolerance:4}// diff像素偏差toleranceprops设定fail:{mode:puzzle,type:puzzle,diff:18.6,tolerance:4}// mode clicksuccess:{mode:click,type:click,seq:[0,1,2]}// seq用户依次点击的目标索引fail:{mode:click,type:click,reason:wrong-order-or-miss|incomplete}对外方法通过$refs.captcha.xxx()调用方法名说明onRefresh()与点击顶部刷新按钮等效重置所有状态、重新随机背景图、缺口位置、点字分布。模式 2 / 3 切换参数如 targetCount后建议手动调用一次。onClose()触发close事件。noop()空函数用作事件占位。使用示例示例 1基础滑块验证登录/注册前template view sl-wx-captcha refcap modeslide :width660 slide-label请按住滑块向右拖动完成验证 successonCapOk failonCapFail / /view /template script import SlWxCaptcha from /components/SL-WX-Captcha/SL-WX-Captcha.vue export default { components: { SlWxCaptcha }, methods: { onCapOk() { uni.showToast({ title: 验证通过正在登录, icon: none }) this.submitLogin() // 验证成功后再调用登录接口 }, onCapFail(e) { console.log(滑块未到底, e.progress %) } } } /script示例 2拼图验证容差 6px较宽松template sl-wx-captcha refcap modepuzzle :puzzle-tolerance6 :width620 :radius20 successonSuccess failonFail refreshonRefresh / /template示例 3顺序点字4 字验证作为重要操作二次确认template sl-wx-captcha refcap modeclick :target-count4 :distract-count5 :show-closetrue title请先完成二次验证 successonPay closeonCancel / /template script export default { methods: { onPay(e) { // e.seq 可上报后端进行二次审计 console.log(验证通过点字顺序, e.seq) this.confirmPay() }, onCancel() { uni.navigateBack() } } } /script示例 4弹层uni-popup / 自定义遮罩内使用 关闭按钮 刷新template view classmask tapclose/view view classpop tap.stop sl-wx-captcha refcap :modemode :show-closetrue successonOk closeclose refresh(e)console.log(刷新了, e.mode) / /view /template实现要点可二次开发事件链路滑块 / 拼图使用touchstart/move/end/capture.stop.prevent保证在小程序端优先锁定手势避免父容器 scroll-view 把横拖误识别为纵向滚动。H5 端在组件mounted时document级绑定mousemove / mouseupbeforeDestroy自动解绑防止鼠标抬出滑块外导致卡着手势。测量prepareStage()中用uni.createSelectorQuery().in(this)取舞台和滑块条的真实像素宽度兼容不同宽度配置下拼图比例/滑块行程正确。拼图实现用「相同背景图 × 2」一张铺底另一张放入.sl-puzzle-pieceoverflow:hidden 固定宽高 拼图块通过 piece 的top/left与滑块位置联动实现切片效果无需后端合成拼图。缺口用半透明白色蒙版 内描边提示用户拼图目标位置。点字命中判定以用户点击像素为圆心半径 26px 范围内取最近字作为命中候选字的样式随机倾斜/颜色/大小/字体贴近真实点字验证码观感。无障碍与反馈每次失败或成功都会在舞台顶部弹出半透明遮罩绿色通过/红色失败并且统一触发success/fail事件便于接入业务。注意事项拼图背景图域名白名单如果使用小程序端请在微信公众平台配置picsum.photos为合法 downloadFile 域名生产时换成自己的 OSS/CDN 即可。图片加载失败兜底onPuzzleImgError已经监听了底图失败会走白底 缺口形状交互依然可用建议后端额外监控图片 404。拼图容差与用户体验puzzleTolerance建议 2~4难~ 6~8宽松超过 10px 基本等同于无校验。不要把安全校验放前端本组件实现的是前端交互和基础判定在前端判定成功后建议把diff/seq/progress等摘要一并上报后端使用后端接口做最终决策或使用加密 token避免被自动化脚本绕过。mode 切换时自动重绘组件已 watchmode切换会立即resetAll prepareStage无需手动刷新但如果是在同一 mode 下改了targetCount / puzzleTolerance等参数建议调用this.$refs.cap.onRefresh()手动刷新一次题目。
延伸阅读

更多相关文章

2026/9/8 17:39:18

SL-WX-FlipCard 翻转卡片组件

SL-WX-FlipCard 翻转卡片组件 插件市场 操作视频 组件简介 基于 CSS Transform 体系实现的点击翻转卡片组件。内置 7 种切换动画(左右翻转、上下翻转、旋风旋转、淡入淡出、底部滑入、右侧滑入、缩放切换),支持单列 / 多列网格布局、互斥展…

2026/9/8 17:34:17

ML-KWS-for-MCU源码拆解:MCU上实现低功耗关键词识别的工程实践

在嵌入式AI这一块摸爬滚打久了,就会发现一个很有意思的现象:很多人一提起边缘AI,脑子里全是高通的Hexagon、瑞萨的DRP或者树莓派加NPU加速棒这类“大家伙”。但在真正的海量出货场景里,比如智能家电、可穿戴设备、工业传感器&…

2026/9/8 19:44:39

Clawdbot深度解析:智能体编码、云端沙箱与无人值守自动化

1. Clawdbot是什么,以及它为什么值得单独拿出来聊Clawdbot这个项目名,最近在AI编程圈子里出现的频率明显高了起来。虽然和Claude系工具存在一定血缘关系,但Clawdbot并不是又一个简单包装的编码助手,而是一套以"agentic codin…

2026/9/8 19:44:39

灵巧手硬件设计中的高速数字信号:从信号完整性到PCB布线实战

刚接过“高速数字信号硬件工程师(灵巧手方向)”这个岗位时,我心里其实打了问号。灵巧手在直觉里是机械结构件、微型电机、传感器阵列的堆叠,为什么需要“高速数字信号”?进去做了小半年才明白:当一只多自由…

2026/9/8 19:44:39

Vue全端自适应攻略:从vw/rem到媒体查询,PC与移动端一次搞定

简介:这是一份基于Vue.js实现PC端与移动端自适应的完整项目源码,面向需要掌握跨设备响应式开发的前端工程师。项目以adaptiveDifferentiation-master为主线,覆盖Flexbox弹性布局、媒体查询、Vue Router动态路由、Vuex状态管理、生命周期设备检…

2026/9/8 19:39:38

保持时间违例详解:为何是芯片设计中最致命的时序问题

芯片回到手里的那一刻,才是最考验人的时候。我在一次项目验收前就撞上过这么一回:功能仿真全绿、时序报告里建立时间(setup)也干净,结果样片一上电,低速模式下反而随机出错,高速模式下直接罢工。…

2026/9/8 7:15:10

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/8 7:15:10

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/8 0:01:49

踩多轮坑才跑通|OpenClaw 3.1.0 双平台本地 AI 自动化搭建实操实录

🔹 工具简述 OpenClaw 是一款备受开发者与办公人群青睐的开源本地智能工具,凭借离线本地运行、可视化图形面板、全流程自主任务处理三大核心特点,积累了众多忠实用户。与普通对话类 AI 产品不同,它能够直接调用电脑的软硬件操作权…

2026/9/8 0:01:50

拒绝复杂命令行,Hermes Agent 一键包快速解锁智能办公能力

🔍前言 不少想要体验 Hermes Agent 办公能力的使用者,往往会被复杂的环境配置拦住使用脚步。手动下载匹配依赖、反复调整系统目录、处理命令行持续报错、修复权限异常、补全丢失核心文件等一系列操作,对普通使用者而言门槛较高,很…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/7 22:45:59

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码