更新记录
1.0.0(2026-08-31) 下载此版本
- 首次发布:滑块拼图验证码组件,支持自定义验证图片、滑块大小与颜色、遮罩与主体颜色
- 验证误差范围可调(between),支持底部滑动条及底部滑块自定义
- 文案支持外部传入(title/tips/closeText),方便国际化展示,未传入时使用内置默认文案
- 支持成功(success)、失败(error)、关闭(close)事件,以及 show/hide 实例方法
平台兼容性
uni-app(5.24)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| √ | × | √ |
Drag Verify 滑动验证码
一款基于 uni-app(Vue3)的滑块拼图验证码组件。通过拖动滑块到指定位置完成人机校验,支持自定义验证图片、滑块样式、验证误差范围、底部滑动条,以及文案国际化配置,开箱即用。
🚀 功能特性
- ✅ 滑块拼图验证:拖动滑块与图片缺口位置匹配即通过,验证误差范围可调(
between) - ✅ 自定义验证图片:通过
verifyImg传入任意图片,不传使用组件内置默认图 - ✅ 文案可配置(国际化):标题、提示、关闭按钮文案均可传入,未传入时使用内置默认文案
- ✅ 样式可配置:滑块大小/颜色、遮罩色、主体背景色、底部滑块大小/颜色均可配置
- ✅ 底部滑动条:可开关底部滑动条(
showBottomSlider) - ✅ 完整事件:验证成功(
success)、验证失败(error)、弹窗关闭(close) - ✅ 实例方法:
show()打开验证弹窗、hide()主动关闭 - ✅ 多端适配:触摸事件支持移动端,鼠标事件支持 H5 桌面端
📦 安装引入
- 将
uni_modules/drag-verify整个目录复制到项目的uni_modules目录下; - 开启 easycom 时可直接使用
<drag-verify>标签,无需手动引入; - 若未开启 easycom,可在页面中手动引入:
<script setup>
import DragVerify from "@/uni_modules/drag-verify/components/drag-verify/drag-verify.vue";
</script>
🚀 快速开始
<template>
<view>
<button @click="openVerify">点击验证</button>
<drag-verify
ref="dragVerifyRef"
title="安全验证"
tips="请将滑块拖到指定位置完成验证"
close-text="关闭"
@success="successHandle"
@error="errorHandle"
@close="closeHandle"
/>
</view>
</template>
<script setup>
import { ref } from "vue";
const dragVerifyRef = ref(null);
// 打开验证弹窗
function openVerify() {
dragVerifyRef.value?.show();
}
// 验证通过
function successHandle(msg) {
console.log("验证通过:", msg);
}
// 验证失败(组件会自动重新初始化,可再次尝试)
function errorHandle(msg) {
console.log("验证失败:", msg);
}
// 弹窗关闭
function closeHandle(msg) {
console.log("弹窗关闭:", msg);
}
</script>
🔧 Props 属性配置
| 属性名 | 类型 | 默认值 | 必填 | 说明 |
|---|---|---|---|---|
title |
String | "" |
❌ | 弹窗标题,为空时展示默认文案「滑动校验」 |
tips |
String | "" |
❌ | 弹窗提示文案,为空时展示默认文案「请将左侧透明滑块拖进白色框内」 |
closeText |
String | "" |
❌ | 右上角关闭按钮文案,为空时展示默认文案「关闭」 |
slideSize |
Number | 40 |
❌ | 图片上滑块大小(px) |
slideColor |
String | rgba(0,0,0,0.4) |
❌ | 图片上滑块颜色 |
maskColor |
String | rgba(0,0,0,0.4) |
❌ | 遮罩层背景色 |
verifyImg |
String | "" |
❌ | 验证图片地址,不传使用组件内置默认图 |
wrapColor |
String | #ffffff |
❌ | 弹窗主体背景色 |
between |
Number | 10 |
❌ | 校验正负差值区间像素(容错范围),值越大越容易通过 |
showBottomSlider |
Boolean | true |
❌ | 是否显示底部滑动条 |
bottomSlideSize |
Number | 40 |
❌ | 底部滑块大小(px) |
bottomSlideColor |
String | #2b94e7 |
❌ | 底部滑块颜色 |
📡 事件
各事件的回调参数均为固定字符串,非对象,可直接使用或打印。
| 事件名 | 参数 | 说明 | 触发时机 |
|---|---|---|---|
success |
"验证通过" |
验证通过事件 | 滑块拖到缺口位置且误差在 between 范围内时。验证成功时会自动关闭弹窗,先触发 close 再触发 success |
error |
"验证失败" |
验证失败事件 | 未匹配缺口位置时,失败后自动重新初始化,可再次尝试 |
close |
"关闭" |
弹窗关闭事件 | 验证成功自动关闭或点击右上角关闭按钮时 |
ℹ️ 验证成功时事件顺序:组件自动关闭弹窗,先触发
close再触发success;点击右上角关闭则仅触发close。close每次只触发一次。如需在close回调中执行跳转等副作用,请留意其先于success执行。
🎯 组件方法
通过 ref="dragVerifyRef" 获取组件实例后调用:
| 方法名 | 参数 | 说明 |
|---|---|---|
show() |
- | 打开验证弹窗,并随机生成滑块缺口位置 |
hide() |
- | 关闭验证弹窗 |
<script setup>
import { ref } from "vue";
const dragVerifyRef = ref(null);
// 打开验证弹窗
function openVerify() {
dragVerifyRef.value?.show();
}
// 关闭验证弹窗(内部走关闭逻辑,会触发 close 事件)
function closeVerify() {
dragVerifyRef.value?.hide();
}
</script>
Vue3
<script setup>下使用ref获取组件实例;调用hide()内部实际执行关闭逻辑,同样会触发close事件。
🌍 国际化说明
组件标题、提示、关闭按钮文案支持外部传入,配合业务方 i18n 实现多语言展示:
<!-- 传入国际化文案 -->
<drag-verify
:title="t('verify.title')"
:tips="t('verify.tips')"
:close-text="t('common.close')"
/>
文案优先级(从高到低):
- props 传入的
title/tips/closeText - 组件内置默认中文文案
🎨 样式自定义
组件为弹窗式全屏展示,内置样式类可在外部覆盖:
| 类名 | 说明 |
|---|---|
.zmdrag-verify |
弹窗整体(全屏遮罩容器) |
.zmdrag-verify-mask |
遮罩层 |
.zmdrag-verify-wrap |
弹窗主体 |
.zmdrag-verify-top |
顶部标题栏(标题 + 关闭按钮) |
.zmdrag-verify-title |
标题文字 |
.zmdrag-verify-close |
关闭按钮 |
.zmdrag-verify-tips |
提示文案容器 |
.zmdrag-verify-tips-text |
提示文案文字 |
.zmdrag-verify-box |
验证图片区域 |
.zmdrag-verify-img |
验证图片 |
.zmdrag-verify-block-verify |
缺口滑块 |
.zmdrag-verify-block-move |
跟随移动的滑块 |
.zmdrag-verify-block-touch |
手指/鼠标触摸滑块 |
.zmdrag-verify-slider |
底部滑动条区域 |
.zmdrag-verify-slider-move |
底部跟随移动的滑块 |
.zmdrag-verify-slider-touch |
底部触摸滑块 |
⚠️ 覆盖方式:组件样式为
scoped,外部页面直接写同名类选择器无法命中组件内部元素,需使用:deep()穿透或写入全局(非 scoped)样式:
<style lang="scss" scoped>
:deep(.zmdrag-verify-wrap) {
background-color: #f5f5f5;
}
</style>
⚠️ 使用注意事项
- 调用方式:组件默认隐藏,需通过
ref.show()打开验证弹窗 - 验证原理:纯前端校验,滑块位置与随机缺口在
between容差内即通过,如需后端强校验请在success事件后自行请求服务端 - 验证图片:建议使用与缺口风格一致的图片;传入网络图片需保证可访问;使用默认图时请勿删除插件
static/Verify.jpg - 误差范围:
between越大越容易通过,建议根据实际使用场景调整(默认 10px) - 平台兼容:触摸事件支持 App/H5/小程序,鼠标拖拽(PC)仅 H5 生效;组件使用
document仅在 H5 鼠标事件中调用,其他端不受影响 - nvue 平台:组件使用 rpx/px 混合布局与 scoped scss,建议在 app-vue/H5/小程序中使用,nvue 需自行验证
- 失败反馈:验证失败会自动重新初始化滑块位置,同时弹出
tips文案的 toast 提示 - 避免与组件标签同名:页面(
<script setup>)内不要定义与标签同名的局部变量或函数(如dragVerify)。Vue 编译时局部变量优先于 easycom 组件,此时<drag-verify>会被解析成该局部函数,组件并未真正注册,调用dragVerifyRef.value.show()会报dragVerifyRef.value?.show is not a function。请使用openVerify、openDragVerify等不与标签冲突的命名;若确需同名,则改为在页面中显式 import 组件,并通过局部注册的方式引入
📞 更新日志
v1.0.0(2026-08-31)
- 🎉 首个版本发布,支持:滑块拼图验证、自定义验证图片、滑块与弹窗样式配置、误差范围调节、底部滑动条、文案国际化配置、成功/失败/关闭事件与 show/hide 方法
祝您使用愉快! 🎉

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 1
赞赏 0
下载 12551500
赞赏 1948
赞赏
京公网安备:11010802035340号