JavaScript实现拖动滑块验证(方法已封装)

article/2025/11/9 7:51:24

前提

  • 之前写了一篇博文,题目是《JavaScript实现拖动滑块验证》,里面都是用最简单的方式实现的。后来,群里大神推荐了一款unlock.js插件,称作幻灯片解锁插件。在这里附上它的github地址:https://github.com/menthe/unlock.js。
  • 在看了它内部的实现之后,虽然没完全看懂哈,但是基本功能都看的差不多了。然后就根据它的底层实现,自己学着将之前写的代码进行了封装,相当于进阶版
  • 做法:先根据需求定义好自己要用到的一些方法;其次将所有方法按照逻辑思维都依次罗列出来,先不填充方法体;然后根据需要互相调用方法;最后再根据要实现的功能填充之前定义好的方法。
  • 说实话,封装之后的代码看起来思路更加明确,代码层次清晰可见,不会将冗余的代码都放在一个function中包裹起来。同时也减少了代码复用,提高代码的利用效率。这是自己最直观的感受。
  • 刚开始尝试封装方法的时候,举步维艰,花费了很多时间,不过最终还是成功了。
  • 自己分析了一下,主要原因还是:思路不清晰;不懂得如何去封装;没有一个完整的逻辑思维结构;技术掌握不熟练

注意:在这里首次尝试了字体图标iconfont的使用,如果没有字体文件(即iconfont.css)滑块上的样式就不会显示。

引用方法:<link rel="stylesheet" href="font/iconfont.css">

使用位置:滑块中的图标样式,即<i><i>标签

使用方法:iconfont字体图标的使用方法–超简单!(点击链接查看)

建议:

  • 在 iconfont-阿里巴巴矢量图标库 中找到自己想要的字体图标,整合一下然后引入到自己的页面中就行。
  • <i><i>标签替换成 html中符号对应的字符转义,详情查看这里。
  • 移除掉<i><i>标签,将滑块的背景设置成一个base64格式加密过的图片或普通格式的图片。

(优点:相比普通图片,占用资源少;缺点:图片对应的代码太长了)

另外,在这里附上一个base64格式加密后的图片样式的使用方法:(可以自己尝试着使用)

//其实这个图片显示的内容就是"<<"符号。
.btn {position: absolute;width: 40px;height: 32px;background: #fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTEyNTVEMURGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTEyNTVEMUNGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MTc5NzNmZS02OTQxLTQyOTYtYTIwNi02NDI2YTNkOWU5YmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+YiRG4AAAALFJREFUeNpi/P//PwMlgImBQkA9A+bOnfsIiBOxKcInh+yCaCDuByoswaIOpxwjciACFegBqZ1AvBSIS5OTk/8TkmNEjwWgQiUgtQuIjwAxUF3yX3xyGIEIFLwHpKyAWB+I1xGSwxULIGf9A7mQkBwTlhBXAFLHgPgqEAcTkmNCU6AL9d8WII4HOvk3ITkWJAXWUMlOoGQHmsE45ViQ2KuBuASoYC4Wf+OUYxz6mQkgwAAN9mIrUReCXgAAAABJRU5ErkJggg==) center no-repeat;background-size: 13px;//不设置这个属性,背景图片会不成比例的显示border: 1px solid #ccc;cursor: move;
}


这里写图片描述

这里写图片描述

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>滑块解锁封装js方法</title><!--注:这里首次用到了iconfont的语法,即矢量图标--><link rel="stylesheet" href="font/iconfont.css"><style>*{padding: 0;margin: 0;}#box{position: relative;width: 300px;height: 40px;margin: 0 auto;margin-top: 10px; background-color: #e8e8e8;box-shadow: 1px 1px 5px rgba(0,0,0,0.2);}.bgColor{position: absolute;left:0;top:0;width:40px;height: 40px;background-color: lightblue;}.txt{position: absolute;width: 100%;height: 40px;line-height: 40px;font-size: 14px;color: #000;text-align: center;}.slider{position: absolute;left:0;top:0;width: 50px;height: 38px;border: 1px solid #ccc;background: #fff;text-align: center;cursor: move;}.slider>i{position: absolute;top:50%;left:50%;transform: translate(-50%,-50%);}.slider.active>i{color:green;}</style>
</head>
<body><div id="box" onselectstart="return false;"><div class="bgColor"></div><div class="txt" >滑动解锁</div><!--给i标签添加上相应字体图标的类名即可--><div class="slider"><i class="iconfont icon-double-right"></i></div></div>  <script>//一、定义了一个获取元素的方法function getEle(selector){return document.querySelector(selector);}//二、获取到需要用到的DOM元素var box = getEle("#box"),//容器bgColor = getEle(".bgColor"),//背景色txt = getEle(".txt"),//文本slider = getEle(".slider"),//滑块icon = getEle(".slider>i"),successMoveDistance = box.offsetWidth- slider.offsetWidth,//解锁需要滑动的距离downX,//用于存放鼠标按下时的位置isSuccess = false;//是否解锁成功的标志,默认不成功//三、给滑块添加鼠标按下事件slider.onmousedown = mousedownHandler;//3.1鼠标按下事件的方法实现function mousedownHandler(e){bgColor.style.transition = "";slider.style.transition = "";var e = e || window.event || e.which;downX = e.clientX;//在鼠标按下时,分别给鼠标添加移动和松开事件document.onmousemove = mousemoveHandler;document.onmouseup = mouseupHandler;};//四、定义一个获取鼠标当前需要移动多少距离的方法function getOffsetX(offset,min,max){if(offset < min){offset = min;}else if(offset > max){offset = max;}return offset;}//3.1.1鼠标移动事件的方法实现function mousemoveHandler(e){var e = e || window.event || e.which;var moveX = e.clientX;var offsetX = getOffsetX(moveX - downX,0,successMoveDistance);bgColor.style.width = offsetX + "px";slider.style.left = offsetX + "px";if(offsetX == successMoveDistance){success();}//如果不设置滑块滑动时会出现问题(目前还不知道为什么)e.preventDefault();};//3.1.2鼠标松开事件的方法实现function mouseupHandler(e){if(!isSuccess){bgColor.style.width = 0 + "px";slider.style.left = 0 + "px";bgColor.style.transition = "width 0.8s linear";slider.style.transition = "left 0.8s linear";}document.onmousemove = null;document.onmouseup = null;};//五、定义一个滑块解锁成功的方法function success(){isSuccess = true;txt.innerHTML = "解锁成功";bgColor.style.backgroundColor ="lightgreen";slider.className = "slider active";icon.className = "iconfont icon-xuanzhong";//滑动成功时,移除鼠标按下事件和鼠标移动事件slider.onmousedown = null;document.onmousemove = null;};</script>
</body>
</html>



http://chatgpt.dhexx.cn/article/kGdFfD9P.shtml

相关文章

JavaScript封装拖动滑块验证

原生JS封装拖动验证滑块 最终效果分析最终如何使用&#xff1f;编写库的整体初始框架编写核心函数1(创建dom和css)编写核心函数2(绑定事件)添加工具方法(核心函数2中用到的) 最终完整可运行代码使用 最终效果 分析 看到这个效果我们首先应该想到和拖动有关的api: onmousedown, …

vue拖动滑块验证组件

组件Slider.vue <template><div class"drag" ref"dragDiv"><div class"drag_bg"></div><div class"drag_text">{{ confirmWords }}</div><div ref"moveDiv" mousedown"moused…

js实现拖动滑块验证

介绍一个比较6的网站&#xff1a;Element.setPointerCapture() - Web API 接口参考 | MDN 里面用到的setPointerCapture&#xff0c;getBoundingClientRect方法都是这个网站里面有的 &#xff08;看看效果图&#xff0c;动态图我不知道怎么搞&#xff0c;简单来说就是没拉到底…

php拖动滑块验证原理,原生js实现拖动滑块验证

原生js实现拖动滑块验证题 前言 验证的目的是为了减轻超高数据量的访问时,服务器的压力,减少同时请求量;前端基本都不能避免与验证打交道,这里记录一下我对于滑块验证的学习过程。 思路 作为前端,我们要将自己带入用户的角度,对用户的操作习惯进行考虑,我将拖动滑块验证…

Vue - 滑块拖动拼图验证(滑块验证安全检测)

前言 😃 提供您一个示例,您可以轻松移植到您项目中。 您一定见过很多系统都 “配备” 了滑块验证、拼图验证、找不同等, 本质上都是为了验证登录系统的是人还是机器(代码), 如下图所示效果:

Uipath实现简单的滑块拖动验证

本篇文章主要介绍使用【Click】Activities这一个活动来实现拖动滑块的验证&#xff0c;为拖动滑块验证提供了一种思路。但只能应用于滑块从头滑到尾&#xff0c;不支持拼图的滑块验证。 说白了&#xff0c;这篇文章更像是介绍【Click】这个Activities中&#xff0c;"clic…

数据库技术与应用 学习笔记1

1.软件的安装 SQL Server 2019 安装教程 大佬的安装教程链接: https://blog.csdn.net/CHQC388/article/details/104550963. 2.数据库技术与应用 2.1 什么是数据库技术 数据库技术所研究的问题就是如何科学地组织和存储数据&#xff0c;如何高效地获取和处理数据。 2.2 什么…

SQL Server数据库笔记整理(一)

数据库&#xff1a;持久化存储&#xff0c;优化读写&#xff0c;保证数据的有效性。 关系型数据库是基于E-R模型&#xff08;即实体-模型&#xff09;&#xff0c;使用SQL语言进行操作。数据库分类&#xff1a;文档型数据库、服务型数据库&#xff08;使用居多&#xff09; &am…

软件测试工程师学习笔记11 - 数据库篇

软件测试工程师学习笔记 -11 一、入门必读二、Linux三、数据库1.MySQL基础1&#xff09; sql语言的注释2&#xff09;mysql中常用数据类型3&#xff09;表、字段、记录4&#xff09;数据库中的常用命令4&#xff09;字段的约束5&#xff09;总结 一、入门必读 二、Linux 三、…

计算机三级 数据库技术 学习笔记

版权声明&#xff1a;本文为CSDN博主「RanLZ」的原创文章&#xff0c;转载请附上原文出处链接。 计算机三级 数据库技术 第一章 数据库应用系统开发方法 1.1 数据库应用系统生命周期 1.1.1 软件工程与软件开发方法 瀑布模型快速原型模型螺旋模型 1.1.2 DBAS生命周期模型 p …

数据库系统概论复习笔记

Ch1 绪论 1.1 基本概念 数据Data、数据库DB、数据库管理系统DBMS、数据库系统DBS 数据是数据库中存储的基本对象,是用来描述事物的符号。数据库是长期储存在计算机内的、有组织的、可共享的、大量数据的集合。数据库管理系统位于用户与操作系统之间的一层数据管理软件,用于…

数据库系统概论学习笔记(1)

数据库系统第一章 目录 数据库系统第一章1. 绪论1.1 数据库系统概述1.2 数据(Data)图解注意点例子 1.3 数据库(DataBase)注意点1.4 数据库管理系统(DateBase Management System DBMS)1.5 数据库系统(DateBase System,DBS)1.6 数据库管理的三个阶段 1. 绪论 1.1 数据库系统概述…

软件工程学习笔记

其他 【专栏必读】王道考研408操作系统万字笔记&#xff08;有了它不需要你再做笔记了&#xff09;&#xff1a;各章节内容概述导航和思维导图 【专栏必读】王道考研408数据结构万字笔记&#xff08;有了它不需要你再做笔记了&#xff09;&#xff1a;各章节内容概述导航和思维…

数据库原理第七章笔记

一、 数据库设计概述 数据库设计&#xff0c;广义的讲是数据库及其应用系统的设计&#xff0c;即整个数据库应用系统。狭义的讲是设计数据库本身&#xff0c;即设计数据库的各级模式并建立数据库&#xff0c;也是数据库应用系统设计的一部分。 数据库设计是指对于一个给定的应…

软件设计师学习笔记-数据库系统

目录 数据库系统 三级模式-两级映射 数据库设计过程 E-R模型 关系代数 规范化理论-函数依赖 规范化理论-价值与用途​ 规范化理论-键 规范化理论-求候选键 规范化理论-范式 规范化理论-模式分解 并发控制概念 并发控制存在的问题 并发控制的封锁协议 数据库完整…

SQL数据库--笔记

一、数据库概念 1.数据库 数据库&#xff08;DB&#xff09;是存放数据的仓库&#xff0c;按照一定的关联&#xff0c;按照一定的格式存储在计算机中 2.数据库管理系统 数据库管理系统&#xff08;DBMS&#xff09;按一定的数据模型组织数据形成数据库&#xff0c;并对数据…

数据库系统工程师考点笔记

目录 第1章 计算机系统知识1.1 计算机硬件基础知识 11.1.1 中央处理单元 11.1.2 存储器 41.1.3 总线 71.1.4 输入输出控制 10 1.2 计算机体系结构 141.2.1 CISC和RISC…… 151.2.2 流水线技术 161.2.3 阵列处理机、并行处理机和多处理机 19 1.3 存储系统 201.3.1 高速缓存 211.…

高级数据库课程笔记

前言&#xff1a;高级数据库的课程笔记&#xff0c;按提纲整理&#xff0c;部分内容没有整入。 文章目录 其他数据库&#xff1a;XMLDB OODB ORBDXML数据库特点SQL/XML 面向对象对象关系数据库系统中扩展的关系数据类型LOBboolean集合类型array自定义类型distinct面向对象数据…

数据库与软件工程学习笔记(一)——数据库系统介绍

学习内容&#xff1a;数据库系统介绍 前言 笔者系19级电子科技大学的一名学生&#xff0c;针对本学期学习的数据库与软件工程课程&#xff0c;在csdn下记录自己的学习笔记&#xff0c;因为是边学边记录&#xff0c;博客内容难免有不够成熟之处&#xff0c;希望大家可以在评论…

狂神说数据库笔记

文章目录 1.初识数据库1.1、 什么是数据库1.2、数据库分类1.3、MySQl简介1.4、连接数据库 2.操作数据库2.1 操作数据库&#xff08;了解&#xff09;2.2 数据库的列类型2.3、数据库的字段属性&#xff08;重点&#xff09;2.4、创建数据库2.5、数据表的类型2.6、删改数据库 3.M…