更新记录
1.0.0(2026-02-06)
下载此版本
- 首次发布
- 支持 H5、微信/支付宝小程序、Android/iOS App、鸿蒙
- Canvas 按端自动选用 type="2d" 或 canvas-id 方案
- 支持 maxWidthRpx 弹窗内限宽、refreshScale 打开后刷新缩放
- 暴露 reset、setSuccess、setFail、refreshScale 方法,便于与登录等业务联动
平台兼容性
uni-app(3.6.16)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| - |
√ |
√ |
√ |
√ |
- |
√ |
√ |
√ |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
slide-verify 滑块验证码组件
uni-app 多端滑块验证码组件,支持 H5、微信/支付宝等小程序、Android/iOS App、鸿蒙。
特性
- 支持 H5、小程序、App、鸿蒙,Canvas 按端自动选用稳定方案(H5 用 type="2d",App/鸿蒙/小程序用 canvas-id + createCanvasContext)
- 支持缩放、弹窗内限制宽度(maxWidthRpx)
- 暴露
reset、refreshScale、setSuccess、setFail 方法,便于与登录等业务联动
安装
将 slide-verify.vue 放入项目(如 components/slide-verify/),按需引入。
基本用法
<template>
<SlideVerify
ref="slideRef"
:background-img="captchaData.backgroundImg"
:slider-img="captchaData.sliderImg"
:block-y="captchaData.captchaY"
:show-error-mask="showErrorMask"
slider-text="按住滑块,拖动到合适位置"
@success="onSuccess"
@refresh="onRefresh"
/>
</template>
<script setup>
import SlideVerify from '@/components/slide-verify/slide-verify.vue'
const slideRef = ref(null)
const captchaData = ref({ backgroundImg: '', sliderImg: '', captchaY: 70 })
const showErrorMask = ref(false)
const onSuccess = (left) => {
console.log('滑动结束,x 坐标(取整):', left)
// 将 left 传给后端校验
}
const onRefresh = () => {
// 重新请求验证码接口,更新 captchaData
}
// 验证失败时
slideRef.value?.setFail?.()
showErrorMask.value = true
// 刷新/重试时
showErrorMask.value = false
slideRef.value?.reset?.()
</script>
Props
| 属性 |
类型 |
默认值 |
说明 |
| w |
Number |
500 |
画布宽度(px) |
| h |
Number |
250 |
画布高度(px) |
| blockX |
Number |
155 |
拼图块逻辑 x(一般由后端给出) |
| blockY |
Number |
70 |
拼图块垂直位置,与后端 captchaY 一致 |
| sliderText |
String |
按住滑块,拖动到合适位置 |
滑块提示文案 |
| backgroundImg |
String |
'' |
背景图 base64 或 data URL |
| sliderImg |
String |
'' |
拼图块图 base64 或 data URL |
| showErrorMask |
Boolean |
false |
是否显示“验证失败”遮罩 |
| errorText |
String |
验证失败,请根据提示重新操作 |
失败提示文案 |
| maxWidthRpx |
Number |
0 |
最大宽度(rpx),弹窗内可传 536 等避免超出 |
事件
| 事件名 |
说明 |
回调参数 |
| success |
用户松手完成滑动 |
left: number(取整后的 x 坐标) |
| refresh |
用户点击刷新图标 |
- |
方法(通过 ref 调用)
| 方法 |
说明 |
| reset() |
重置滑块与画布,并重新绘制当前 backgroundImg/sliderImg |
| refreshScale() |
重新计算缩放(如弹窗打开后调用) |
| setSuccess() |
设为成功状态(绿色) |
| setFail() |
设为失败状态(红色) |
弹窗内使用
弹窗内建议限制宽度并打开后刷新缩放,避免超出:
<SlideVerify
ref="slideRef"
:max-width-rpx="536"
:background-img="captchaData.backgroundImg"
:slider-img="captchaData.sliderImg"
:block-y="captchaData.captchaY"
@success="onSuccess"
@refresh="onRefresh"
/>
<!-- 弹窗打开后 -->
slideRef.value?.refreshScale?.()
平台说明
- H5:使用 type="2d" + getContext('2d')
- 小程序 / 鸿蒙 / Android·iOS App:使用 canvas-id + uni.createCanvasContext,保证各端显示稳定
许可证
MIT