zoukankan      html  css  js  c++  java
  • jquery-实现表单拖拽拼图验证功能

    一、为什么会有滑块登录验证

      很多网站为了防止机器人登录操作,往往会会添加一个滑块拼图验证,必须要拖拽拼成完整才能登录成功。
    

    二、案例展示

      本文使用的是基于jquery的语法以及jquery动画特效实现表单拖拽拼图验证,刷新页面,产生随机位置的两个方块,只有图片滑块滑倒空白方块附近才能算验证成功,可以设置允许有几像素的误差;离目标较远会自动返回。
    

    三、具体实现代码

        <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <style>
          .box {
               533px;
              height: 300px;
              margin: 0 auto;
              position: relative;
          }
    
          .box .main {
               100%;
              height: 100%;
              display: block;
          }
    
          .btn {
              ** 533px;
              height: 50px;
              margin: 0 auto;*
              border: 1px #000 solid;
              position: relative;*
          }
    
          .btn em {
               40px;*
              height: 40px;
              position: absolute;*
              left: 0;
              top: 5px;*
              background: #aaa;*
          }
      </style>*
    </head>
    
    <body>
      <div class="box">
          <img class="main" src="1.jpg" alt="" srcset="">
      </div>*
      <div class="btn">
          <em></em>
      </div>
    </body>
    <script src="jquery.min.js">*</script>
    <script>
      var l;
      createBlock();
      function createBlock(){
        //初始确定两个方块的位置,产生范围随机数
          var top = randomNum(0,230);
          var left = randomNum(300,480);
           //循环创建不同位置的两个方块
          for(var i = 0 ; i < 2;i++){
              $div = $('<span></span>');
              //左侧方块里面需要插入一张与原图一样的图片
              if(i == 1){
                  $img = $('<img src="1.jpg" alt="">');
                  $img.css({
                      position:'absolute',
                      top : -top,
                      left:-left
                  });
                  $div.append($img);
                  $div.css({
                      position : 'absolute',
                      top,
                      left:0,
                      zIndex:2,
                      40,
                      height:40,
                      overflow:'hidden',
                      background:'#fff'
                  })
              }else{
                  $div.css({
                  position : 'absolute',
                  top,
                  left,
                  zIndex:2,
                  40,
                  height:40,
                  overflow:'hidden',
                  background:'#fff'
              })
              }   
              
              $('.box').append($div);
          }
      }
        //利用jquery的鼠标按下,移动,抬起三个时间完成拖拽效果
      $('em').mousedown(function (eve) {
          $(document).mousemove(function (eve) {
              //拖动过程中判断位置,限制滑块可移动区域
              l = eve.clientX - $('.box').offset().left - $('em').outerWidth() / 2;
              if (l < 0) {
                  l = 0;
              }
              if (l > $('.box').outerWidth() - $('em').outerWidth()) {
                  l = $('.box').outerWidth() - $('em').outerWidth();
              }
              $('em').css({
                  left: l
              })
              $('.box span:nth-of-type(2)').css({
                  left: l
              })
          })
          $(document).mouseup(function () {
              //鼠标抬起时候判断是否到达目的地,距离差距太大,则返回初始状态
              console.log($('.box span:nth-of-type(1)').position().left);
              if( l < $('.box span:nth-of-type(1)').position().left || l>$('.box span:nth-of-type(1)').position().left+5){
                  $('em').animate({
                      left:0
                  },500);
                  $('.box span:nth-of-type(2)').animate({
                      left:0
                  },500)
              }
              // jquery清除事件的方法
              $(document).unbind("mousemove")
              $(document).unbind("mouseup")
          })
      })
      //  产生范围随机数
      function randomNum(min, max) {
          if (min > max) {
              var t = max;
              max = min;
              min = t;
          }
          return Math.floor(Math.random() * (max - min + 1) + min);
      }
    </script>
    
    </html>
    
  • 相关阅读:
    SAP OPEN UI5 Step 8: Translatable Texts
    SAP OPEN UI5 Step7 JSON Model
    SAP OPEN UI5 Step6 Modules
    SAP OPEN UI5 Step5 Controllers
    SAP OPEN UI5 Step4 Xml View
    SAP OPEN UI5 Step3 Controls
    SAP OPEN UI5 Step2 Bootstrap
    SAP OPEN UI5 Step1 环境安装和hello world
    2021php最新composer的使用攻略
    Php使用gzdeflate和ZLIB_ENCODING_DEFLATE结果gzinflate报data error
  • 原文地址:https://www.cnblogs.com/piaoyi1997/p/13215796.html
Copyright © 2011-2022 走看看