JavaScript 滑动验证

[复制链接]
haoyangtian实名认证 手机认证 视频认证 发表于 2017-9-29 17:38:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
20170216234107408.jpg 20170216234122614.jpg
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="utf8">
  5.     <style>
  6.         /* 滑动控件容器,亮灰色背景 */
  7.         #dragContainer {
  8.             position: relative;
  9.             display: inline-block;
  10.             background: #e8e8e8;
  11.             width: 300px;
  12.             height: 33px;
  13.             border: 2px solid #e8e8e8;
  14.         }
  15.         /* 滑块左边部分,绿色背景 */
  16.         #dragBg {
  17.             position: absolute;
  18.             background-color: #7ac23c;
  19.             width: 0px;
  20.             height: 100%;
  21.         }
  22.         /* 滑动验证容器文本 */
  23.         #dragText {
  24.             position: absolute;
  25.             width: 100%;
  26.             height: 100%;
  27.             /* 文字水平居中 */
  28.             text-align: center;
  29.             /* 文字垂直居中,这里不能用百分比,因为百分比是相对原始line-height的,而非div高度 */
  30.             line-height: 33px;
  31.             /* 文本不允许选中 */
  32.             user-select: none;
  33.             -webkit-user-select: none;
  34.         }
  35.         /* 滑块 */
  36.         #dragHandler {
  37.             position: absolute;
  38.             width: 40px;
  39.             height: 100%;
  40.             cursor: move;
  41.         }
  42.         /* 滑块初始背景 */
  43.         .dragHandlerBg {
  44.             background: #fff no-repeat center url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTEyNTVEMURGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTEyNTVEMUNGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MTc5NzNmZS02OTQxLTQyOTYtYTIwNi02NDI2YTNkOWU5YmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+YiRG4AAAALFJREFUeNpi/P//PwMlgImBQkA9A+bOnfsIiBOxKcInh+yCaCDuByoswaIOpxwjciACFegBqZ1AvBSIS5OTk/8TkmNEjwWgQiUgtQuIjwAxUF3yX3xyGIEIFLwHpKyAWB+I1xGSwxULIGf9A7mQkBwTlhBXAFLHgPgqEAcTkmNCU6AL9d8WII4HOvk3ITkWJAXWUMlOoGQHmsE45ViQ2KuBuASoYC4Wf+OUYxz6mQkgwAAN9mIrUReCXgAAAABJRU5ErkJggg==");
  45.         }
  46.         /* 验证成功时的滑块背景 */
  47.         .dragHandlerOkBg {
  48.             background: #fff no-repeat center url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDlBRDI3NjVGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDlBRDI3NjRGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWEzMWNhMC1hYmViLTQxNWEtYTEwZS04Y2U5NzRlN2Q4YTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+k+sHwwAAASZJREFUeNpi/P//PwMyKD8uZw+kUoDYEYgloMIvgHg/EM/ptHx0EFk9I8wAoEZ+IDUPiIMY8IN1QJwENOgj3ACo5gNAbMBAHLgAxA4gQ5igAnNJ0MwAVTsX7IKyY7L2UNuJAf+AmAmJ78AEDTBiwGYg5gbifCSxFCZoaBMCy4A4GOjnH0D6DpK4IxNSVIHAfSDOAeLraJrjgJp/AwPbHMhejiQnwYRmUzNQ4VQgDQqXK0ia/0I17wJiPmQNTNBEAgMlQIWiQA2vgWw7QppBekGxsAjIiEUSBNnsBDWEAY9mEFgMMgBk00E0iZtA7AHEctDQ58MRuA6wlLgGFMoMpIG1QFeGwAIxGZo8GUhIysmwQGSAZgwHaEZhICIzOaBkJkqyM0CAAQDGx279Jf50AAAAAABJRU5ErkJggg==");
  49.         }
  50.     </style>
  51.     <script>
  52.         window.onload = function() {
  53.             var dragContainer = document.getElementById("dragContainer");
  54.             var dragBg = document.getElementById("dragBg");
  55.             var dragText = document.getElementById("dragText");
  56.             var dragHandler = document.getElementById("dragHandler");

  57.             //滑块最大偏移量
  58.             var maxHandlerOffset = dragContainer.clientWidth - dragHandler.clientWidth;
  59.             //是否验证成功的标记
  60.             var isVertifySucc = false;
  61.             initDrag();

  62.             function initDrag() {
  63.                 dragText.textContent = "拖动滑块验证";
  64.                 dragHandler.addEventListener("mousedown", onDragHandlerMouseDown);
  65.             }

  66.             function onDragHandlerMouseDown() {
  67.                 document.addEventListener("mousemove", onDragHandlerMouseMove);
  68.                 document.addEventListener("mouseup", onDragHandlerMouseUp);
  69.             }

  70.             function onDragHandlerMouseMove() {
  71.                 /*
  72.                 html元素不存在width属性,只有clientWidth
  73.                 offsetX是相对当前元素的,clientX和pageX是相对其父元素的
  74.                 */
  75.                 var left = event.clientX - dragHandler.clientWidth / 2;
  76.                 if(left < 0) {
  77.                     left = 0;
  78.                 } else if(left > maxHandlerOffset) {
  79.                     left = maxHandlerOffset;
  80.                     verifySucc();
  81.                 }
  82.                 dragHandler.style.left = left + "px";
  83.                 dragBg.style.width = dragHandler.style.left;
  84.             }
  85.             function onDragHandlerMouseUp() {
  86.                 document.removeEventListener("mousemove", onDragHandlerMouseMove);
  87.                 document.removeEventListener("mouseup", onDragHandlerMouseUp);
  88.                 dragHandler.style.left = 0;
  89.                 dragBg.style.width = 0;
  90.             }

  91.             //验证成功
  92.             function verifySucc() {
  93.                 isVertifySucc = true;
  94.                 dragText.textContent = "验证通过";
  95.                 dragText.style.color = "white";
  96.                 dragHandler.setAttribute("class", "dragHandlerOkBg");
  97.                 dragHandler.removeEventListener("mousedown", onDragHandlerMouseDown);
  98.                 document.removeEventListener("mousemove", onDragHandlerMouseMove);
  99.                 document.removeEventListener("mouseup", onDragHandlerMouseUp);
  100.             };
  101.         }
  102.     </script>
  103. </head>
  104. <body>
  105.     <div id="dragContainer">
  106.         <div id="dragBg"></div>
  107.         <div id="dragText"></div>
  108.         <div id="dragHandler" class="dragHandlerBg"></div>
  109.     </div>
  110. </body>
  111. </html>
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

专注源码分享,教程分享
全国服务电话

187-8198-7163

周一至周8:00-22:00

反馈建议

cdhaoyt@163.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.2© 2001-2013 Comsenz Inc.( 蜀ICP备16032957号-1