一般很多网站都有滑动验证的功能,简单滑动验证的原理如下图所示:

主要理解思想就行 图中的代码可能和实际写的有所不同 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">&gt;&gt;</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 = "&radic;";
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实现滑动验证功能的更多相关文章

  1. 原生JS实现购物车结算功能代码+zepto版

    html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  2. 原生JS实现百度搜索功能

    今天呢给大家分享一下自己用原生JS做的一个百度搜索功能,下面上代码: <!DOCTYPE html> <html> <head> <meta charset= ...

  3. 原生js实现vue组件功能

    在如今VUE盛行的情况下,我们一直在惊叹于VUE的组件的功能,却不知道,原生js早就已经支持了这个功能. 最近在公开课学到的,js还有很多很多需要探索学习. 下面是一个简单的例子 <!DOCTY ...

  4. js实现滑动解锁功能(PC+Moblie)

    http://dummyimage.com/600x400/ http://placehold.it/140x70 实现效果: css样式代码略. html代码: 页面上导入了jquery.mobil ...

  5. js登录滑动验证,不滑动无法登陆

    js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html; ...

  6. 使用原生js实现前端分页功能

    背景: 从后台提取出来数据,在前端进行分页. 代码: user-manage.js window.onload = function(){ var result = { message : " ...

  7. 【原生JS】滑动门效果

    效果图: 思路:通过每次鼠标移动至目标上使所有图片重置为初始样式再向左移动目标及其左侧每个图片隐藏部分距离即实现. HTML: <!DOCTYPE html> <html> & ...

  8. 原生js实现拖拽功能

    1. 给个div,给定一些样式 <div class="drag" style="left:0;top:0;width:100px;height:100px&quo ...

  9. 利用原生JS实现类似浏览器查找高亮功能(转载)

    利用原生JS实现类似浏览器查找高亮功能 在完成 Navify 时,增加一个类似浏览器ctrl+f查找并该高亮的功能,在此进行一点总结: 需求 在.content中有许多.box,需要在.box中找出搜 ...

随机推荐

  1. Scratch编程:游泳的火柴人(四)

    “ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一个手绘的火柴人在水里游泳. ...

  2. Spring Boot集成redis完整实例

    添加依赖: (Spring Data Redis) 启动redis: 配置文件中进行配置: redis基本使用思路: redis中不存在就查询数据库然后存入redis: 查看日志:

  3. 稀疏检出-使用git检索出仓库里的某一个目录文件,而不是整个仓库的所有文件

    具体工作意义是从某一个Git仓库 克隆时,只克隆检测出这个仓库里的某些文件夹内容,而不是跟平常那样把整个仓库的内容都克隆下来 从1.7.0版本开始git提供稀疏检出的功能.所谓稀疏检出就是本地版本库检 ...

  4. CentOS7 安装 Git

    环境: 系统版本:CentOS 7.5 Git 版本:2.20.1 一.安装 Git 1.下载编译工具 $ yum -y groupinstall "Development Tools&qu ...

  5. easyExcel用于导入导出

    1.添加依赖: <!-- 现在已经更新到1.1.2-beta5 --> <dependency> <groupId>com.alibaba</groupId& ...

  6. JAVA 插入注解处理器

    JDK1.5后,Java语言提供了对注解(Annotation)的支持 JDK1.6中提供一组插件式注解处理器的标准API,可以实现API自定义注解处理器,干涉编译器的行为. 在这里,注解处理器可以看 ...

  7. 数据结构之链表(LinkedList)(三)

    数据结构之链表(LinkedList)(二) 环形链表 顾名思义 环形列表是一个首尾相连的环形链表 示意图 循环链表的特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活. 看一 ...

  8. 【转载】C#使用Split函数根据特定分隔符分割字符串

    在C#程序开发过程中,很多时候可能需要将字符串根据特定的分割字符分割成字符或者List集合,例如根据逗号将字符串分割为数组,或者根据竖线将字符串分割成数组,C#中提供了Split()函数来快速将字符串 ...

  9. js中的BOM和DOM常用事件方法

    笔记: window对象 ● window.innerHeight - 浏览器窗口的内部高度 ● window.innerWidth - 浏览器窗口的内部宽度 ● window.open() - 打开 ...

  10. jQuery笔试题汇总整理

    1 你在公司是怎么用jquery的? 答:在项目中是怎么用的是看看你有没有项目经验(根据自己的实际情况来回答) 你用过的选择器啊,动画啊,表单啊,ajax事件等 配置Jquery环境 下载jquery ...