滑块验证码实现

滑块验证码实现前言滑块验证码也是生活中常见的 本文会介绍如何实现以及原理 如果对验证码实现感兴趣的可以看这篇文章 验证码实现 html 页面版如果对验证码实现感兴趣的可以看这篇文章 验证码实现 工具类调用版代码实现滑块验证码主要用到几个属性 clientX screenX pageX offsetX 代码的解释在注释中已经写的很清楚了 如有更好的实现方式欢迎留言 lt pagecontentT text html charset UTF 8 language java amp g

前言

代码实现

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>滑块验证码 
     title> <style> * { 
      margin: 0px; padding: 0px; font-family: "微软雅黑"; } .drag { 
      width: 300px; height: 40px; line-height: 40px; background-color: #e8e8e8; position: relative; margin: 0 auto; } .bg { 
      width: 40px; height: 100%; position: absolute; background-color: #75CDF9; } .text { 
      position: absolute; width: 100%; height: 100%; text-align: center; user-select: none; } .btn { 
      width: 40px; height: 38px; position: absolute; border: 1px solid #ccc; cursor: move; font-family: "宋体"; text-align: center; background-color: #fff; user-select: none; color: #666; }  
      style>  
       head> <body> <div class="drag"> <div class="bg"> 
        div> <div class="text" onselectstart="return false">请拖动滑块解锁 
         div> <div class="btn">>> 
          div>  
           div> <script> //一、定义一个获取DOM元素的方法 var $ = function (selector) { 
            return document.querySelector(selector); }, box = $(".drag"),//容器 bg = $(".bg"),//背景 text = $(".text"),//文字 btn = $(".btn"),//滑块 success = false,//是否通过验证的标志 distance = box.offsetWidth - btn.offsetWidth;//滑动成功的宽度(距离) //二、给滑块注册鼠标按下事件 btn.onmousedown = function (e) { 
            //1.鼠标按下之前必须清除掉后面设置的过渡属性 btn.style.transition = ""; bg.style.transition = ""; //说明:clientX 事件属性会返回当事件被触发时,鼠标指针向对于浏览器页面(或客户区)的水平坐标。 //2.当滑块位于初始位置时,得到鼠标按下时的水平位置 var e = e || window.event; var downX = e.clientX; //三、给文档注册鼠标移动事件 document.onmousemove = function (e) { 
            var e = e || window.event;//是为了更好的兼容IE浏览器和非ie浏览器。在ie浏览器中,window.event是全局变量,在非ie中,就需要自己传入一个参数来获取event啦,所以就有了var e = e||window.event //1.获取鼠标移动后的水平位置 var moveX = e.clientX; //2.得到鼠标水平位置的偏移量(鼠标移动时的位置 - 鼠标按下时的位置) var offsetX = moveX - downX; //3.在这里判断一下:鼠标水平移动的距离 与 滑动成功的距离 之间的关系 if (offsetX > distance) { 
            offsetX = distance;//如果滑过了终点,就将它停留在终点位置 } else if (offsetX < 0) { 
            offsetX = 0;//如果滑到了起点的左侧,就将它重置为起点位置 } //4.根据鼠标移动的距离来动态设置滑块的偏移量和背景颜色的宽度 btn.style.left = offsetX + "px"; bg.style.width = offsetX + "px"; //如果鼠标的水平移动距离 = 滑动成功的宽度 if (offsetX == distance) { 
            //1.设置滑动成功后的样式 text.innerHTML = "验证通过"; text.style.color = "#fff"; btn.innerHTML = "√"; btn.style.color = "green"; bg.style.backgroundColor = "lightgreen"; //2.设置滑动成功后的状态 success = true; //成功后,清除掉鼠标按下事件和移动事件(因为移动时并不会涉及到鼠标松开事件) btn.onmousedown = null; document.onmousemove = null; //3.成功解锁后的回调函数 setTimeout(function () { 
            alert('解锁成功!'); }, 100); } } //四、给文档注册鼠标松开事件 document.onmouseup = function (e) { 
            //如果鼠标松开时,滑到了终点,则验证通过 if (success) { 
            return; } else { 
            //反之,则将滑块复位(设置了1s的属性过渡效果) btn.style.left = 0; bg.style.width = 0; btn.style.transition = "left 1s ease"; bg.style.transition = "width 1s ease"; } //只要鼠标松开了,说明此时不需要拖动滑块了,那么就清除鼠标移动和松开事件。 document.onmousemove = null; document.onmouseup = null; } }  
            script>  
             body>  
              html> 

效果图展示

在这里插入图片描述


如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发

创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214899.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:11
下一篇 2026年3月18日 下午3:11


相关推荐

  • IOS-导航路线_iphone导航

    IOS-导航路线_iphone导航1.可以将需要导航的位置丢给系统自带的APP进行导航2.发送网络请求到公司服务器获取导航数据,然后自己手动绘制导航3.利用三方SDK实现导航(百度)>当点击开始导航时获取用户输入的起点和

    2022年8月4日
    10
  • OpenClaw如何重置系统?全场景重置教程、安全操作与数据恢复指南

    OpenClaw如何重置系统?全场景重置教程、安全操作与数据恢复指南

    2026年3月13日
    2
  • matlab中trapz,MATLAB Trapz

    matlab中trapz,MATLAB TrapzMATLAB 函数 trapz x y n 其中 y 是 x 的积分 使用梯形法则逼近函数 y f x 的积分 并且 n 可选 与维度 n 进行积分 句法 Z trapz Y Z trapz X Y Z trapz dim 例 1 使用 MATLAB 函数 trapz x y 估算积分成本并与精确值进行比较 评估 n 5 和 n 10 时的百分比误差 解确切的值从对于使用梯形法

    2026年3月19日
    2
  • BP神经网络算法_bp神经网络算法流程图

    BP神经网络算法_bp神经网络算法流程图1、前馈神经网络、反馈神经网络、BP网络等,他们之间的关系前馈型神经网络:取连续或离散变量,一般不考虑输出与输入在时间上的滞后效应,只表达输出与输入的映射关系;在此种神经网络中,各神经元从输入层开始,接收前一级输入,并输入到下一级,直至输出层。整个网络中无反馈,可用一个有向无环图表示。常见的前馈神经网络有感知机(Perceptrons)、BP(BackPropagation)网络、RBF(

    2025年8月27日
    26
  • chmod- linux修改文件权限[通俗易懂]

    chmod- linux修改文件权限[通俗易懂]在Unix和Linux的各种操作系统下,每个文件(文件夹也被看作是文件)都按读、写、运行设定权限。例如我用ls-l命令列文件表时,得到如下输出:-rw-r–r–1appleusers22542006-05-2013:47tt.htm从第二个字符起rw-是说用户apple有读、写权,没有运行权,接着的r–表示用户组users只有读权限,没有运行权,最后的r–指其他人(others)只有读权限,没有写权和运行权。这是系统默认设置,我可以改写tt.htm,同组的人和其他

    2025年8月26日
    8
  • tcplayer 源码改造第二弹 -> 加入倍速播放

    tcplayer 源码改造第二弹 -> 加入倍速播放前序简介主要介绍了基于 tcplayer 的源码改造 加入倍速播放功能不涉及 tcplayer 的使用以及框架如何调用 详情请看腾讯云点播文档源码解析中有些注释是笔者加的 如需定位 请不要复制注释以下示例的代码为重新混淆压缩过 与原来的 tcplayer js 函数名不同 不可直接复制使用 请务必跟着笔者一步步执行人群不想自己写播放器而使用 tcplayer 但是又受限于播放器本身不带有倍速

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号