当前位置:首页 > JavaScript

js实现滑块验证码

2026-04-04 11:39:16JavaScript

滑块验证码的基本原理

滑块验证码是一种常见的人机验证方式,用户需要拖动滑块到指定位置完成验证。核心逻辑包括生成滑块、验证拖动位置、以及后端校验。

实现步骤

HTML 结构

<div class="slider-captcha">
  <div class="slider-track"></div>
  <div class="slider-thumb"></div>
  <div class="slider-mask"></div>
</div>

CSS 样式

.slider-captcha {
  position: relative;
  width: 300px;
  height: 40px;
  background: #f0f0f0;
  border-radius: 20px;
}
.slider-thumb {
  position: absolute;
  width: 40px;
  height: 40px;
  background: #4CAF50;
  border-radius: 50%;
  cursor: grab;
  z-index: 2;
}
.slider-mask {
  position: absolute;
  width: 0;
  height: 40px;
  background: #8BC34A;
  border-radius: 20px;
}

JavaScript 逻辑

const thumb = document.querySelector('.slider-thumb');
const mask = document.querySelector('.slider-mask');
let isDragging = false;
let startX = 0;
let thumbX = 0;

thumb.addEventListener('mousedown', (e) => {
  isDragging = true;
  startX = e.clientX;
  thumbX = thumb.offsetLeft;
  thumb.style.cursor = 'grabbing';
});

document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  const deltaX = e.clientX - startX;
  let newX = thumbX + deltaX;
  const maxX = 300 - 40; // 容器宽度 - 滑块宽度

  // 限制滑块移动范围
  newX = Math.max(0, Math.min(newX, maxX));

  thumb.style.left = `${newX}px`;
  mask.style.width = `${newX}px`;
});

document.addEventListener('mouseup', () => {
  if (!isDragging) return;
  isDragging = false;
  thumb.style.cursor = 'grab';

  // 验证是否拖动到目标位置(例如最后20px范围内)
  const thumbLeft = thumb.offsetLeft;
  if (thumbLeft >= 260) {
    alert('验证成功');
  } else {
    thumb.style.left = '0px';
    mask.style.width = '0px';
  }
});

进阶优化

随机目标位置

const targetPos = Math.floor(Math.random() * 260) + 20;
// 验证时判断是否在目标位置附近
if (Math.abs(thumbLeft - targetPos) < 10) {
  alert('验证成功');
}

添加背景图案 可在滑块轨道上添加缺口图案,用户需要将滑块拖动到缺口位置。

后端校验 前端验证后,应将滑动轨迹、时间等数据发送到后端进行二次验证,防止模拟攻击。

js实现滑块验证码

注意事项

  • 移动端需添加 touchstart/touchmove 事件支持
  • 可增加滑动轨迹分析,防止机器人模拟
  • 避免使用固定阈值,增加随机性
  • 生产环境建议使用成熟库如 Geetest 等

以上代码实现了基础滑块验证功能,实际应用中需根据安全需求进一步完善。

标签: 验证码滑块
分享给朋友:

相关文章

vue怎么实现滑块验证

vue怎么实现滑块验证

Vue 实现滑块验证的方法 使用原生 Vue 实现 创建一个滑块验证组件需要结合 HTML、CSS 和 Vue 的逻辑。以下是一个简单的实现示例: 模板部分 <template>…

php实现验证码识别

php实现验证码识别

PHP 验证码识别方法 使用 Tesseract OCR 进行识别 Tesseract 是一个开源的 OCR 引擎,可以用于识别验证码。需要先安装 Tesseract 并配置 PHP 扩展。 安装…

php实现验证码注册

php实现验证码注册

生成验证码图片 使用 PHP 的 GD 库生成验证码图片,创建一个包含随机字符的图像。以下代码示例生成一个 4 位数字验证码: session_start(); $width = 120; $hei…

php实现图形验证码

php实现图形验证码

生成随机验证码字符串 使用rand()或mt_rand()函数生成随机数字,或结合chr()函数生成随机字母。验证码长度通常为4-6位: $length = 4; $code = ''; $char…

php如何实现验证码

php如何实现验证码

生成验证码图片 使用 PHP 的 GD 库创建验证码图片。通过 imagecreatetruecolor() 函数创建一个空白画布,设置背景色和文本颜色。利用 imagestring() 或 imag…

js验证码实现原理

js验证码实现原理

验证码的基本概念 验证码(CAPTCHA)是一种区分用户是计算机还是人的公共全自动程序,主要用于防止恶意程序自动化操作,如批量注册、暴力破解等。JavaScript验证码通常结合前端逻辑与后端验证实现…