更新记录
2.0.0(2026-05-15) 下载此版本
本版重点解决 iOS Safari / WKWebView(含 uni-app H5 与 App-Vue 内嵌 WebView)下滑块验证码常见的 橡皮筋回弹、页面惯性滚动、松手仍滑动、跟手发飘 等问题。微信小程序等非 WebKit-WebView 端仍走原有 Vue 触摸事件路径。对外 Props、事件、defineExpose 方法与 v1 一致,无破坏性变更,升级时替换组件文件即可。
1.0.0(2026-02-06) 下载此版本
- 首次发布
- 支持 H5、微信/支付宝小程序、Android/iOS App、鸿蒙
- Canvas 按端自动选用 type="2d" 或 canvas-id 方案
- 支持 maxWidthRpx 弹窗内限宽、refreshScale 打开后刷新缩放
- 暴露 reset、setSuccess、setFail、refreshScale 方法,便于与登录等业务联动
平台兼容性
uni-app(4.63)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| - | √ | √ | √ | √ | - | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | - | - | - | - | - | - | - | - | - | - | - |
slide-verify 滑块验证码组件
uni-app 多端滑块验证码组件,支持 H5、微信/支付宝等小程序、Android/iOS App、鸿蒙。
当前组件版本:v2.0.0(第二版)。更新记录见插件包内 更新说明。
特性
- 支持 H5、小程序、App、鸿蒙,Canvas 按端自动选用稳定方案(H5 用 type="2d",App/鸿蒙/小程序用 canvas-id + createCanvasContext)
- v2:针对 iOS Safari / WKWebView 优化拖动体验(非 passive
touchmove、translate3d(px)、视口坐标同步测量、H5 滚动锁定等),减轻橡皮筋与页面惯性干扰 - 支持缩放、弹窗内限制宽度(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

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