【JavaScript】滑块验证码

举报
原来是咔咔 发表于 2022/03/27 02:15:58 2022/03/27
【摘要】 author:咔咔 wechat:fangkangfk   <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>滑块验证解锁</title> &lt...

author:咔咔

wechat:fangkangfk

 


  
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>滑块验证解锁</title>
  6. <style>
  7. .drag{
  8. width: 300px;
  9. height: 40px;
  10. line-height: 40px;
  11. background-color: #e8e8e8;
  12. position: relative;
  13. margin:0 auto;
  14. }
  15. .bg{
  16. width:40px;
  17. height: 100%;
  18. position: absolute;
  19. background-color: #75CDF9;
  20. }
  21. .text{
  22. position: absolute;
  23. width: 100%;
  24. height: 100%;
  25. text-align: center;
  26. user-select: none;
  27. }
  28. .btn{
  29. width:40px;
  30. height: 38px;
  31. position: absolute;
  32. border:1px solid #ccc;
  33. cursor: move;
  34. font-family: "宋体";
  35. text-align: center;
  36. background-color: #fff;
  37. user-select: none;
  38. color:#666;
  39. }
  40. </style>
  41. </head>
  42. <body>
  43. <div class="drag">
  44. <div class="bg"></div>
  45. <div class="text" onselectstart="return false;">请拖动滑块解锁</div>
  46. <div class="btn">>></div>
  47. </div>
  48. <script>
  49. //一、定义一个获取DOM元素的方法
  50. var $ = function(selector){
  51. return document.querySelector(selector);
  52. },
  53. box = $(".drag"),//容器
  54. bg = $(".bg"),//背景
  55. text = $(".text"),//文字
  56. btn = $(".btn"),//滑块
  57. success = false,//是否通过验证的标志
  58. distance = box.offsetWidth - btn.offsetWidth;//滑动成功的宽度(距离)
  59. //二、给滑块注册鼠标按下事件
  60. btn.onmousedown = function(e){
  61. //1.鼠标按下之前必须清除掉后面设置的过渡属性
  62. btn.style.transition = "";
  63. bg.style.transition ="";
  64. //说明:clientX 事件属性会返回当事件被触发时,鼠标指针向对于浏览器页面(或客户区)的水平坐标。
  65. //2.当滑块位于初始位置时,得到鼠标按下时的水平位置
  66. var e = e || window.event;
  67. var downX = e.clientX;
  68. //三、给文档注册鼠标移动事件
  69. document.onmousemove = function(e){
  70. var e = e || window.event;
  71. //1.获取鼠标移动后的水平位置
  72. var moveX = e.clientX;
  73. //2.得到鼠标水平位置的偏移量(鼠标移动时的位置 - 鼠标按下时的位置)
  74. var offsetX = moveX - downX;
  75. //3.在这里判断一下:鼠标水平移动的距离 与 滑动成功的距离 之间的关系
  76. if( offsetX > distance){
  77. offsetX = distance;//如果滑过了终点,就将它停留在终点位置
  78. }else if( offsetX < 0){
  79. offsetX = 0;//如果滑到了起点的左侧,就将它重置为起点位置
  80. }
  81. //4.根据鼠标移动的距离来动态设置滑块的偏移量和背景颜色的宽度
  82. btn.style.left = offsetX + "px";
  83. bg.style.width = offsetX + "px";
  84. //如果鼠标的水平移动距离 = 滑动成功的宽度
  85. if( offsetX == distance){
  86. //1.设置滑动成功后的样式
  87. text.innerHTML = "验证通过";
  88. text.style.color = "#fff";
  89. btn.innerHTML = "√";
  90. btn.style.color = "green";
  91. bg.style.backgroundColor = "lightgreen";
  92. //2.设置滑动成功后的状态
  93. success = true;
  94. //成功后,清除掉鼠标按下事件和移动事件(因为移动时并不会涉及到鼠标松开事件)
  95. btn.onmousedown = null;
  96. document.onmousemove = null;
  97. //3.成功解锁后的回调函数
  98. setTimeout(function(){
  99. alert('解锁成功!');
  100. },100);
  101. }
  102. }
  103. //四、给文档注册鼠标松开事件
  104. document.onmouseup = function(e){
  105. //如果鼠标松开时,滑到了终点,则验证通过
  106. if(success){
  107. return;
  108. }else{
  109. //反之,则将滑块复位(设置了1s的属性过渡效果)
  110. btn.style.left = 0;
  111. bg.style.width = 0;
  112. btn.style.transition = "left 1s ease";
  113. bg.style.transition = "width 1s ease";
  114. }
  115. //只要鼠标松开了,说明此时不需要拖动滑块了,那么就清除鼠标移动和松开事件。
  116. document.onmousemove = null;
  117. document.onmouseup = null;
  118. }
  119. }
  120. </script>
  121. </body>
  122. </html>

 

文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fangkang7/article/details/88640116

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。