原生JS实现滑动验证功能
一般很多网站都有滑动验证的功能,简单滑动验证的原理如下图所示:
主要理解思想就行 图中的代码可能和实际写的有所不同 HTML和CSS也可根据仔细的喜好就行修改

完整代码:
<!DOCTYPE html>
<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>Document</title>
<style>
.drag {
width: 300px;
height: 40px;
position: relative;
background-color: #e8e8e8;
margin: auto auto;
user-select: none;
} .bg {
height: 100%;
position: absolute;
width: 40px;
background-color: rgb(39, 233, 21);
} .text {
width: 100%;
height: 100%;
position: absolute;
text-align: center;
line-height: 40px;
} .btn {
width: 40px;
height: 38px;
border: 1px solid #ccc;
background-color: #fff;
color: #666;
line-height: 38px;
text-align: center;
position: absolute;
cursor: move;
}
</style>
</head> <body>
<div class="drag">
<div class="bg"></div>
<div class="text" onselectstart="return false;">滑动验证</div>
<div class="btn">>></div>
</div>
</body>
<script>
onload = function () {
function $(a) {
return document.querySelector(a);//获取元素的函数
}
var oDarg = $(".drag");
var oBg = $(".bg");
var oText = $(".text");
var oBtn = $(".btn");
var success = false;//判断验证是否成功
var distance = oDarg.offsetWidth - oBtn.offsetWidth;//验证成功的距离
oBtn.onmousedown = function (eve) {//给物块设置鼠标按下事件
oBg.style.transition = "";//在点击事件按下后 必须清除后面设置的transition属性 否则会造成物块移动的bug 具体可自行测试
oBtn.style.transition = "";
var e = eve || window.event;
var downX = e.clientX;//获取鼠标刚按下时的坐标 相对于浏览器页面
document.onmousemove = function (eve) {//这里要给document设置鼠标移动事件 而不能设置物块 如果设置了物块移动也会有小bug 自行测试
var e = eve || window.event;
var moveX = e.clientX;//获取鼠标移动时的坐标 相对于浏览器页面
var offsetX = moveX - downX;//物块移动的距离
if (offsetX > distance) {//如果移动的距离已经大于本应该移动的距离 那么就将它设置为验证成功时的距离
offsetX = distance;
} else if (offsetX < 0) {//同样 如果移动的距离小于0时 将它设置为0 保证不会超出范围
offsetX = 0;
}
oBtn.style.left = offsetX + "px";
oBg.style.width = offsetX + "px";
if (offsetX == distance) {//判断验证通过
oText.innerHTML = "验证通过";
oBtn.innerHTML = "√";
oText.style.color = "#FFF";
oBtn.style.color = "rgb(39, 233, 21)";
success = true;//验证通过时的条件
document.onmousemove = null;//验证通过后 鼠标按下事件和鼠标移动都没用了 因此需要清除
oBtn.onmousedown = null;
setTimeout(function () {
alert("解锁成功");
}, 10)
}
}
}
document.onmouseup = function () {//这里也是给document设置鼠标抬起事件
if (success) {如果已经验证成功了 那么结束函数
return;
} else {//反之 验证没有通过 则物块原来的位置
oBtn.style.left = 0;
oBg.style.width = 0;
oBg.style.transition = "width 1s ease";
oBtn.style.transition = "left 1s ease";
}
document.onmousemove = null;//返回到原来的位置过程中 需要清除鼠标移动事件和鼠标抬起事件
oBtn.onmouseup = null;
}
}
</script>
</html>
完整效果:

一般的网站都有滑动验证功能,理解实现原理,利用原生JS写不难,希望能对你有所帮助!
原生JS实现滑动验证功能的更多相关文章
- 原生JS实现购物车结算功能代码+zepto版
html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- 原生JS实现百度搜索功能
今天呢给大家分享一下自己用原生JS做的一个百度搜索功能,下面上代码: <!DOCTYPE html> <html> <head> <meta charset= ...
- 原生js实现vue组件功能
在如今VUE盛行的情况下,我们一直在惊叹于VUE的组件的功能,却不知道,原生js早就已经支持了这个功能. 最近在公开课学到的,js还有很多很多需要探索学习. 下面是一个简单的例子 <!DOCTY ...
- js实现滑动解锁功能(PC+Moblie)
http://dummyimage.com/600x400/ http://placehold.it/140x70 实现效果: css样式代码略. html代码: 页面上导入了jquery.mobil ...
- js登录滑动验证,不滑动无法登陆
js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html; ...
- 使用原生js实现前端分页功能
背景: 从后台提取出来数据,在前端进行分页. 代码: user-manage.js window.onload = function(){ var result = { message : " ...
- 【原生JS】滑动门效果
效果图: 思路:通过每次鼠标移动至目标上使所有图片重置为初始样式再向左移动目标及其左侧每个图片隐藏部分距离即实现. HTML: <!DOCTYPE html> <html> & ...
- 原生js实现拖拽功能
1. 给个div,给定一些样式 <div class="drag" style="left:0;top:0;width:100px;height:100px&quo ...
- 利用原生JS实现类似浏览器查找高亮功能(转载)
利用原生JS实现类似浏览器查找高亮功能 在完成 Navify 时,增加一个类似浏览器ctrl+f查找并该高亮的功能,在此进行一点总结: 需求 在.content中有许多.box,需要在.box中找出搜 ...
随机推荐
- springmvc流程 struts2 spring Hibernate 优缺点 使用场景介绍
为什么使用HandlerAdapter? SpringMVC使用一个Servlet(DispacherServlet)代理所有的请求 , SpringMVC中的处理器是方法级别的处理器,而非类级别的处 ...
- 使用AOP进行权限验证
首先我们定义一个切入点(匹配com.ed.controller.Seller开头的controller的所有public方法) @Pointcut("execution(public * c ...
- 人工智能对人类有哪些影响 选择Python入门怎样
人工智能对人类有哪些影响?选择Python入门怎样?人工智能是科技时代进步的产物,也是目前人们非常关注的一个产业.那么,随着人工智能的发展,对人类生活的有哪些影响呢? 1.人工智能对文化产业影响 据了 ...
- 暑期ACM集训
2019-07-17 08:42:11 这是总结昨天的做题情况 总体来说,好久的没做题了,实力下降了许多,这一个月假又学习吧!!!! A - Ropewalkers Polycarp decided ...
- 使用脚本将AspNetCore发布到IIS上
首先你必须要了解的是,没有脚本的情况下,如何把AspNetCore的应用发布到IIS上. 大致分为这些步骤: 安装MS C++ 2015 x86&x64 安装正确版本的.NET Core Ru ...
- Python内存加载shellcode
生成 首先生成一个测试的msf shellcode msfvenom -p windows/x64/exec CMD=calc.exe -f python 把其中的shellcode复制出来留待待会使 ...
- [v]Windows下Git安装指南
参考<Git权威指南>安装整理,图书配套网址参见[1] 1. Cygwin下安装配置Git 1. 在Windows下安装配置Git有2种不同的方案 (1)msysGit, (2)Cygwi ...
- TCP粘包/拆包(Netty权威指南)
无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制. TCP粘包/拆包 TCP是个“流”协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片 ...
- Html CSS transform matrix3d 3D转场特效
Html CSS transform matrix3d 3D转场特效 透视矩阵 2n/(r-l) 0 (r+l)/(r-l) 0 0 2n/(t-b) (t+b)/(t-b) 0 0 0 (n+f)/ ...
- SMARTY的简单实例写法
访问页面main.php(后台页面) <?php include("../init.inc.php"); //引入入口文件 include("../DBDA.php ...