• 原生JS实现拖动滑块验证登录效果


    ♀分享一组利用原生JS实现拖动滑块验证效果

    ♀在这个组代码中涉及三个方面的知识:

    ⑴事件处理

    ⑵添加验证标记

    ⑶选择器的封装

     

    代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>验证码</title>
        <style>
          .box{
                 position:relative;
             width: 200px;
             height: 40px;
             background: #CCC;
             display: block;
             margin:150px auto;
          }
          .btn{
            background:#EEE url(1.png) no-repeat;
            background-position: center center;
              position:absolute;
              top:0; 
              width: 40px;
              height: 40px;
              z-index: 3;
            line-height:40px;
          } 
          .text{
              position: absolute;
              width: 100%;
              margin: 0;
            line-height:40px;
              text-align: center;
              z-index: 2;
          }
          .bg{
              position: absolute;
              height: 100%;
              background-color: #7ac23c;
              z-index: 1;
          }
        </style>
    </head>
    <body>
        <div class="box">
        <!-- 滑块 -->
        <div class="btn"></div>
        <!-- 文字 -->
        <p class="text">请向右滑动滑块</p>
        <!-- 背景 -->
        <div class="bg"></div>
        </div>
        <script>
          window.onload = function(){
              //选择器封装
              var fun2 = function(name){//函数表达式
                 return document.querySelector(name);
              };
              var btn = fun2(".btn"),//按钮
                  box = fun2(".box"),//盒子
                  text = fun2(".text"),//文字
                  bg = fun2(".bg"),//背景
                  flag = false;//验证失败
    
              //鼠标按下
              //event 对象 事件的状态
              btn.onmousedown = function(event){
                  var e = event || window.event;
                  var downX = e.clientX; //按下与X轴的点
                  //移动
                  btn.onmousemove = function(event){
                      var moveX = event.clientX - downX;  //移入的距离-按下的距离
                      //移动范围
                      if(moveX > 0){
                          this.style.left = moveX + 'px';
                          bg.style.width = moveX + 'px';
                          //验证成功
                          if(moveX >= (box.offsetWidth - this.offsetWidth)){
                              flag = true; //'验证成功'
                              text.innerHTML = '验证成功';
                              text.style.color = '#fff';
                              btn.onmousemove = null;  //清除事件
                              btn.onmousedown = null;  //清除事件
                          }
                      }
                  };
              };
              //松开
              btn.onmouseup = function(){
                  btn.onmousemove = null;  //清除事件
                  //判断条件
                  if(flag) return;
                  this.style.left = 0;
                  bg.style.width = 0;
               }    
          }
        </script>
    </body>
    </html>

     

    效果图:

     

    参考:https://www.bilibili.com/video/av75439023

  • 相关阅读:
    CCF NOI1006 捡石头
    POJ NOI MATH-7648 蓄水池水管问题
    CCF NOI1005 存款收益
    CCF NOI1004 填充矩形
    CCF NOI1003 猜数游戏
    CCF NOI1002 三角形
    Project Euler Problem 26 Reciprocal cycles
    HDU1799 循环多少次?
    CCF NOI1001 温度转换
    POJ NOI MATH-7647 余数相同问题
  • 原文地址:https://www.cnblogs.com/shihaiying/p/11906350.html
Copyright © 2020-2023  润新知