更新记录

1.1.1(2026-10-12) 下载此版本

  1. 同步 README 使用说明、Props 和示例代码,统一补充 theme 用法
  2. 本次仅文档更新,不改变组件运行行为和 1.1.0 暗色适配逻辑

1.1.0(2026-10-12) 下载此版本

  1. 新增 theme 属性(light / dark,默认 light),由外部传入主题
  2. 暗色模式下默认适配弹窗主体背景、标题、提示文字和底部滑动条
  3. 自定义 wrapColor 时仍优先使用外部值,默认 light 行为不变

1.0.0(2026-08-31) 下载此版本

  1. 首次发布:滑块拼图验证码组件,支持自定义验证图片、滑块大小与颜色、遮罩与主体颜色
  2. 验证误差范围可调(between),支持底部滑动条及底部滑块自定义
  3. 文案支持外部传入(title/tips/closeText),方便国际化展示,未传入时使用内置默认文案
  4. 支持成功(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() 主动关闭
  • ✅ 主题模式:支持 theme="light" / "dark",由外部传入主题
  • ✅ 多端适配:触摸事件支持移动端,鼠标事件支持 H5 桌面端

📦 安装引入

  1. 将 uni_modules/drag-verify 整个目录复制到项目的 uni_modules 目录下;
  2. 开启 easycom 时可直接使用 <drag-verify> 标签,无需手动引入;
  3. 若未开启 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"
      :theme="theme"
      title="安全验证"
      tips="请将滑块拖到指定位置完成验证"
      close-text="关闭"
      @success="successHandle"
      @error="errorHandle"
      @close="closeHandle"
    />
  </view>
</template>

<script setup>
import { ref } from "vue";

const dragVerifyRef = ref(null);
const theme = "dark"; // light / dark

// 打开验证弹窗
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 属性配置

属性名 类型 默认值 必填 说明
theme String light ❌ 主题模式,可选 light / dark。默认不改变原浅色视觉
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')"
/>

文案优先级(从高到低):

  1. props 传入的 title / tips / closeText
  2. 组件内置默认中文文案

🎨 样式自定义

组件为弹窗式全屏展示,内置样式类可在外部覆盖:

类名 说明
.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>

⚠️ 使用注意事项

  1. 调用方式:组件默认隐藏,需通过 ref.show() 打开验证弹窗
  2. 验证原理:纯前端校验,滑块位置与随机缺口在 between 容差内即通过,如需后端强校验请在 success 事件后自行请求服务端
  3. 验证图片:建议使用与缺口风格一致的图片;传入网络图片需保证可访问;使用默认图时请勿删除插件 static/Verify.jpg
  4. 误差范围:between 越大越容易通过,建议根据实际使用场景调整(默认 10px)
  5. 平台兼容:触摸事件支持 App/H5/小程序,鼠标拖拽(PC)仅 H5 生效;组件使用 document 仅在 H5 鼠标事件中调用,其他端不受影响
  6. nvue 平台:组件使用 rpx/px 混合布局与 scoped scss,建议在 app-vue/H5/小程序中使用,nvue 需自行验证
  7. 失败反馈:验证失败会自动重新初始化滑块位置,同时弹出 tips 文案的 toast 提示
  8. 避免与组件标签同名:页面(<script setup>)内不要定义与标签同名的局部变量或函数(如 dragVerify)。Vue 编译时局部变量优先于 easycom 组件,此时 <drag-verify> 会被解析成该局部函数,组件并未真正注册,调用 dragVerifyRef.value.show() 会报 dragVerifyRef.value?.show is not a function。请使用 openVerify、openDragVerify 等不与标签冲突的命名;若确需同名,则改为在页面中显式 import 组件,并通过局部注册的方式引入

📞 更新日志

v1.1.1(2026-10-12)

  • 📝 同步 README 使用说明、Props 和示例代码,统一补充 theme 用法
  • 本次仅文档更新,不改变组件运行行为和 1.1.0 暗色适配逻辑

v1.1.0(2026-10-12)

  • 🆕 新增 theme 属性(light / dark,默认 light),由外部传入主题
  • 🌓 暗色模式下默认适配弹窗主体背景、标题、提示文字和底部滑动条
  • 兼容性:自定义 wrapColor 优先,默认 light 行为不变

v1.0.0(2026-08-31)

  • 🎉 首个版本发布,支持:滑块拼图验证、自定义验证图片、滑块与弹窗样式配置、误差范围调节、底部滑动条、文案国际化配置、成功/失败/关闭事件与 show/hide 方法

祝您使用愉快! 🎉

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

无

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议