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

发布时间:2026/10/29 17:48:20

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/10/28 23:04:13

SL-WX-FlipCard 翻转卡片组件

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

2026/10/29 14:00:30

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

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

2026/10/29 18:58:17

ROS2开发环境搭建与核心概念入门指南

1. ROS入门:从零开始搭建机器人开发环境作为一名机器人开发者,第一次接触ROS(Robot Operating System)时往往会被它庞大的生态系统吓到。记得我2015年刚开始学习ROS时,光是安装环境就折腾了整整两天。现在回头看&#…

2026/10/29 18:58:17

Multisim 14.0 安装激活全流程与避坑指南

简介:这份PDF文档面向电子工程、自动化及相关专业的学生与初级工程师,针对Multisim 14.0仿真软件安装流程繁琐、授权配置易出错的问题,提供一份图文对照的完整安装指引。资源包内仅含1个PDF文件,体积约728KB,轻量易存&…

2026/10/29 18:58:17

10款AI论文工具提升学术研究效率

1. 为什么需要AI论文工具? 写MBA论文的朋友们应该都深有体会,那种面对海量文献却无从下手的痛苦。记得我第一次写战略管理论文时,光是找相关文献就花了整整两周时间,最后交上去的初稿被导师批得"体无完肤"。直到后来发现…

2026/10/29 18:58:17

10款AI工具助力MBA论文写作全流程

1. 为什么MBA论文写作需要AI工具辅助?写MBA论文的朋友们应该都深有体会,这绝对是个既费脑力又耗时间的苦差事。我当年写论文时,光是文献检索就花了将近一个月,每天泡在图书馆翻各种商业期刊,最后整理出来的参考文献堆起…

2026/10/29 18:58:17

Agent-Reach:用Python打造开箱即用的CLI AI Agent工具

1. 项目缘起与核心定位Agent-Reach 这个名字,第一次看到的时候我以为是某个做远程调用的框架,后来翻了一圈资料才明白,它其实是一个把 AI Agent 能力封装成命令行工具的 Python 项目。说白了,就是让你在终端里敲一行命令&#xff…

2026/10/29 18:53:17

OpenShell 工作流引擎:从命令行脚本到可复用编排的工程实践

1. OpenShell 是什么:从一个终端工具到一套工作流引擎第一次看到 OpenShell 这个名字,很多人会下意识以为它只是又一个“开源终端模拟器”或者“命令行壳层”的替代品。我最初也是这么想的,直到真正把它拉下来跑了一遍,才发现这个…

2026/10/29 17:05:52

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/29 17:06:02

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/29 17:06:13

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/29 0:03:42

学生选课系统DFD图绘制指南:边界划分与分层校验实战

简介:文档以顶层与第一层DFD图为核心,完整刻画学生选课系统的逻辑模型,面向软件工程课程设计、系统分析学习及毕设前期建模人群。顶层图界定系统边界,外部实体包括管理员、教师和学生三类角色;第一层图进一步细化用户登…

2026/10/29 0:03:42

JIRA敏捷落地:Scrum角色权限、Sprint与燃尽图避坑指南

简介:围绕“基于JIRA的敏捷开发项目管理”这一主题,面向产品负责人、Scrum Master及研发测试成员,梳理Scrum角色分工、迭代流程与JIRA工具配置的对应关系,适合初、中级团队导入敏捷管理时参考。压缩包共1个docx文件,大…

2026/10/29 0:03:42

SEMI S8人机工程验收实战:从条款拆解到现场实测的完整指南

简介:面向半导体设备设计、制造与运维工程师及安全合规人员,这份资料聚焦SEMI标准体系下的设备安全规范,重点收录SEMI S8-0308《半导体制造设备人体工程学工程安全指南》。内容围绕设备设计原则、错误与事故预防、人体工程学适配三大主线展开…

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

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

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