当前位置:首页 > 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 样式

js实现滑块验证码

.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';
  }
});

进阶优化

随机目标位置

js实现滑块验证码

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

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

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

注意事项

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

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

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

相关文章

vue怎么实现滑块验证

vue怎么实现滑块验证

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

php实现手机验证码

php实现手机验证码

PHP实现手机验证码功能 手机验证码是常见的用户验证方式,通过短信或语音发送验证码到用户手机。以下是在PHP中实现手机验证码功能的步骤: 生成随机验证码 使用PHP的rand()或mt_rand()…

php验证码实现原理

php验证码实现原理

PHP验证码实现原理 验证码(CAPTCHA)用于区分人类用户和自动化程序,防止恶意攻击。PHP实现验证码通常涉及生成随机字符串、创建图像、干扰元素添加和会话存储。 生成随机字符串 使用PHP的随机…

php实现图形验证码

php实现图形验证码

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

js实现滑块

js实现滑块

实现滑块的基本思路 HTML部分需要创建一个滑块轨道和滑块按钮,CSS负责样式设计,JavaScript处理交互逻辑。 <div class="slider-container">…

uniapp滑块组件

uniapp滑块组件

uniapp滑块组件实现方法 uniapp提供了slider组件用于实现滑块功能,支持自定义样式、范围选择等特性。以下是具体实现方式和示例代码。 基本滑块实现 在.vue文件中添加slider组件,…