更新记录

2.0.0(2026-05-15) 下载此版本

本版重点解决 iOS Safari / WKWebView(含 uni-app H5App-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 touchmovetranslate3d(px)、视口坐标同步测量、H5 滚动锁定等),减轻橡皮筋与页面惯性干扰
  • 支持缩放、弹窗内限制宽度(maxWidthRpx)
  • 暴露 resetrefreshScalesetSuccesssetFail 方法,便于与登录等业务联动

安装

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

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT协议