You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中实现类似Binance的滑块验证码功能?

币安风格滑块验证码实现方案

可用开源组件推荐

不用从零开始手写,现有成熟库已经覆盖了币安滑块验证码的全部交互效果,可以直接选用:

  • Vue生态:vue-monoplasty-slide-verify、vue3-slide-verify,支持自定义缺口样式、拖拽动效,配置后可直接和后端校验逻辑对接
  • React生态:react-slider-verify、@alitajs/captcha,支持自定义背景图、校验容错阈值
  • 原生JS:slide-verify 无框架依赖,压缩后体积不到10KB,直接引入即可使用

手动实现的核心逻辑

如果需要自定义程度更高的实现,针对你提的两个具体问题,解决方法如下:

1. 自动裁剪图片指定部分

通过Canvas API即可实现指定区域的精准裁剪,核心逻辑:

缺口的坐标、宽高建议由后端随机生成返回,避免前端生成被爬虫破解,同时后端存储正确的缺口坐标用于后续校验。

核心代码示例:

const bgCanvas = document.getElementById('bgCanvas') // 背景图画布
const bgCtx = bgCanvas.getContext('2d')
const blockCanvas = document.getElementById('blockCanvas') // 滑块拼图画布
const blockCtx = blockCanvas.getContext('2d')

// 示例缺口参数:x坐标140,y坐标75,宽48,高48
const gapParams = { x: 140, y: 75, w: 48, h: 48 }

// 加载完成背景图后绘制完整背景
bgImg.onload = () => {
  bgCtx.drawImage(bgImg, 0, 0, bgCanvas.width, bgCanvas.height)
  // 裁剪缺口区域像素
  const blockData = bgCtx.getImageData(gapParams.x, gapParams.y, gapParams.w, gapParams.h)
  blockCanvas.width = gapParams.w
  blockCanvas.height = gapParams.h
  // 把裁剪的像素绘制到滑块画布上
  blockCtx.putImageData(blockData, 0, 0)
}

2. 裁剪部分跟随滑块移动

通过监听拖拽事件同步偏移量即可实现,核心逻辑:
核心代码示例:

const sliderBar = document.getElementById('slider') // 底部可拖拽滑块
const moveBlock = document.getElementById('blockCanvas')
let startX = 0
let isDrag = false
const maxOffset = bgCanvas.width - gapParams.w // 最大可移动距离

// 按下滑块记录初始位置
sliderBar.addEventListener('mousedown', (e) => {
  startX = e.clientX
  isDrag = true
})

// 拖拽过程同步偏移量
document.addEventListener('mousemove', (e) => {
  if (!isDrag) return
  let moveX = e.clientX - startX
  moveX = Math.max(0, Math.min(moveX, maxOffset)) // 限制移动范围
  // 同步移动底部滑块和裁剪的拼图块
  sliderBar.style.transform = `translateX(${moveX}px)`
  moveBlock.style.transform = `translateX(${moveX}px)`
})

// 松开滑块结束拖拽,提交校验
document.addEventListener('mouseup', () => {
  if (!isDrag) return
  isDrag = false
  // 把当前偏移量传给后端,和正确缺口坐标对比,误差在2-3像素内即可判定验证通过
})

正式上线时校验逻辑必须放在后端,前端仅负责收集拖拽偏移量,避免前端校验被爬虫绕过。

内容的提问来源于stack exchange,提问作者Trần Văn Hiếu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:06:04