自己研究: jQuery拖拽滑动验证码插件 slideunlock.js

原理:(别人说)

响应时间,拖拽速度,时间,位置,轨迹,重试次数等。
这些因素能够构成一个采样结果或者辨识特性。

只获取到滑动时间,滑动的长度。

效果:

html页面

<link href="css/slide-unlock.css" rel="stylesheet">
<script type="text/javascript" src="js/jquery-2.0.2.min.js"></script>

<div id="slider">

<div
id="slider_bg"></div>

<span
id="label">>></span> <span
id="labelTip">拖动滑块验证</span>

</div>

<script>

var startTime =
0;

var
endTime = 0;

var
numTime = 0;

$(function
() {

var slider = new
SliderUnlock("#slider",{

successLabelTip : "欢迎注册"

},function(){

var  sli_width =
$("#slider_bg").width();

alert("验证成功");

endTime = nowTime();

numTime = endTime-startTime;

endTime = 0;

startTime = 0;

//
获取到滑动使用的时间
滑动的宽度

alert( numTime );

alert( sli_width );

});

slider.init();

})

/**

* 获取时间精确到毫秒

* @type

*/

function nowTime(){

var myDate = new
Date();

var H =
myDate.getHours();//获取小时

var M =
myDate.getMinutes(); //获取分钟

var S =
myDate.getSeconds();//获取秒

var MS =
myDate.getMilliseconds();//获取毫秒

var milliSeconds
= H * 3600 * 1000 + M * 60 * 1000 + S * 1000 + MS;

return
milliSeconds;

}

</script>

<script
src="js/jquery.slideunlock.js"></script>

css样式

  1. #slider {
    margin: 10px 5%;
    width: 90%;
    height: 40px;
    position: relative;
    border-radius: 8px;
    background-color: #dae2d0;
    overflow: hidden;
    text-align: center;
    user-select: none;
    -moz-user-select: none;
    -webkit-user-select: none;
    }
  2.  
  3. #slider_bg {
    position: absolute;
    left: 0;
    top: 0;
    height: 100%;
    background-color: #7AC23C;
    z-index: 1;
    }
  4.  
  5. #label {
    width: 46px;
    position: absolute;
    left: 0;
    top: 0;
    height: 38px;
    line-height: 38px;
    border: 1px solid #cccccc;
    background: #fff;
    z-index: 3;
    cursor: move;
    color: #ff9e77;
    font-size: 16px;
    font-weight: 900;
    }
  6.  
  7. #labelTip {
    position: absolute;
    left: 0;
    width: 100%;
    height: 100%;
    font-size: 13px;
    font-family: 'Microsoft Yahei', serif;
    color: #787878;
    line-height: 38px;
    text-align: center;
    z-index: 2;
    }
  8.  
  9. js效果
  10.  
  1. /**
    * jquery plugin -- jquery.slideunlock.js
    * www.sucaijiayuan.com
    * created: March 27, 2016
    */
  2.  
  3. ;(function ($,window,document,undefined) {
    function SliderUnlock(elm, options, success){
    var me = this;
    var $elm = me.checkElm(elm) ? $(elm) : $;
    success = me.checkFn(success) ? success : function(){};
  4.  
  5. var opts = {
    successLabelTip: "Successfully Verified",
    duration: 200,
    swipestart: false,
    min: 0,
    max: $elm.width(),
    index: 0,
    IsOk: false,
    lableIndex: 0
    };
  6.  
  7. opts = $.extend(opts, options||{});
  8.  
  9. //$elm
    me.elm = $elm;
    //opts
    me.opts = opts;
    //是否开始滑动
    me.swipestart = opts.swipestart;
    //最小值
    me.min = opts.min;
    //最大值
    me.max = opts.max;
    //当前滑动条所处的位置
    me.index = opts.index;
    //是否滑动成功
    me.isOk = opts.isOk;
    //滑块宽度
    me.labelWidth = me.elm.find('#label').width();
    //滑块背景
    me.sliderBg = me.elm.find('#slider_bg');
    //鼠标在滑动按钮的位置
    me.lableIndex = opts.lableIndex;
    //success
    me.success = success;
    }
  10.  
  11. SliderUnlock.prototype.init = function () {
    var me = this;
  12.  
  13. me.updateView();
    me.elm.find("#label").on("mousedown", function (event) {
    var e = event || window.event;
    me.lableIndex = e.clientX - this.offsetLeft;
    me.handerIn();
    }).on("mousemove", function (event) {
    me.handerMove(event);
    }).on("mouseup", function (event) {
    me.handerOut();
    }).on("mouseout", function (event) {
    me.handerOut();
    }).on("touchstart", function (event) {
    var e = event || window.event;
    me.lableIndex = e.originalEvent.touches[0].pageX - this.offsetLeft;
    me.handerIn();
    }).on("touchmove", function (event) {
    me.handerMove(event, "mobile");
    }).on("touchend", function (event) {
    me.handerOut();
    });
    };
  14.  
  15. /**
    * 鼠标/手指接触滑动按钮
    */
    SliderUnlock.prototype.handerIn = function () {
    var me = this;
    me.swipestart = true;
  16.  
  17. var myDate = new Date();
    var H = myDate.getHours();//获取小时
    var M = myDate.getMinutes(); //获取分钟
    var S = myDate.getSeconds();//获取秒
    var MS = myDate.getMilliseconds();//获取毫秒
    var milliSeconds = H * 3600 * 1000 + M * 60 * 1000 + S * 1000 + MS;
  18.  
  19. startTime = milliSeconds;
  20.  
  21. me.min = 0;
    me.max = me.elm.width();
    };
  22.  
  23. /**
    * 鼠标/手指移出
    */
    SliderUnlock.prototype.handerOut = function () {
    var me = this;
    //停止
    me.swipestart = false;
  24.  
  25. weizhi = me.labelWidth;
  26.  
  27. //me.move();
    if (me.index < me.max) {
    me.reset();
    }
    };
  28.  
  29. /**
    * 鼠标/手指移动
    * @param event
    * @param type
    */
    SliderUnlock.prototype.handerMove = function (event, type) {
    var me = this;
    if (me.swipestart) {
    event.preventDefault();
    event = event || window.event;
    if (type == "mobile") {
    me.index = event.originalEvent.touches[0].pageX - me.lableIndex;
    } else {
    me.index = event.clientX - me.lableIndex;
    }
    me.move();
    }
    };
  30.  
  31. /**
    * 鼠标/手指移动过程
    */
    SliderUnlock.prototype.move = function () {
    var me = this;
    if ((me.index + me.labelWidth) >= me.max) {
    me.index = me.max - me.labelWidth -2;
    //停止
    me.swipestart = false;
    //解锁
    me.isOk = true;
    }
    if (me.index < 0) {
    me.index = me.min;
    //未解锁
    me.isOk = false;
    }
    if (me.index+me.labelWidth+2 == me.max && me.max > 0 && me.isOk) {
    //解锁默认操作
    $('#label').unbind().next('#labelTip').
    text(me.opts.successLabelTip).css({'color': '#fff'});
  32.  
  33. me.success();
    }
    me.updateView();
    };
  34.  
  35. /**
    * 更新视图
    */
    SliderUnlock.prototype.updateView = function () {
    var me = this;
  36.  
  37. me.sliderBg.css('width', me.index);
    me.elm.find("#label").css("left", me.index + "px")
    };
  38.  
  39. /**
    * 重置slide的起点
    */
    SliderUnlock.prototype.reset = function () {
    var me = this;
  40.  
  41. startTime = 0;
  42.  
  43. me.index = 0;
    me.sliderBg .animate({'width':0},me.opts.duration);
    me.elm.find("#label").animate({left: me.index}, me.opts.duration)
    .next("#lableTip").animate({opacity: 1}, me.opts.duration);
    me.updateView();
    };
  44.  
  45. /**
    * 检测元素是否存在
    * @param elm
    * @returns {boolean}
    */
    SliderUnlock.prototype.checkElm = function (elm) {
    if($(elm).length > 0){
    return true;
    }else{
    throw "this element does not exist.";
    }
    };
  46.  
  47. /**
    * 检测传入参数是否是function
    * @param fn
    * @returns {boolean}
    */
    SliderUnlock.prototype.checkFn = function (fn) {
    if(typeof fn === "function"){
    return true;
    }else{
    throw "the param is not a function.";
    }
    };
  48.  
  49. window['SliderUnlock'] = SliderUnlock;
    })(jQuery, window, document);
  1.  

两个链接

https://www.zhihu.com/question/32209043/answer/55252171

http://www.zhihu.com/question/35538123

php 滑动验证码的更多相关文章

  1. selenium处理极验滑动验证码

    要爬取一个网站遇到了极验的验证码,这周都在想着怎么破解这个,网上搜了好多知乎上看到有人问了这问题https://www.zhihu.com/question/28833985,我按照这思路去大概实现了 ...

  2. thinkphp整合系列之极验滑动验证码

    对于建站的筒子们来说:垃圾广告真是让人深恶痛绝:为了清净:搞个难以识别的验证码吧:又被用户各种吐槽:直到后来出现了极验这个滑动的验证码:这真是一个体验好安全高的方案:官网:http://www.gee ...

  3. 一步步实现滑动验证码,Java图片处理关键代码

    最近滑动验证码在很多网站逐步流行起来,一方面对用户体验来说,比较新颖,操作简单,另一方面相对图形验证码来说,安全性并没有很大的降低.当然到目前为止,没有绝对的安全验证,只是不断增加攻击者的绕过成本. ...

  4. selenium+java破解极验滑动验证码的示例代码

    转自: https://www.jianshu.com/p/1466f1ba3275 selenium+java破解极验滑动验证码 卧颜沉默 关注 2017.08.15 20:07* 字数 3085  ...

  5. VUE中使用geetest滑动验证码

    一,准备工作:服务端部署 下载文件gt.gs: https://github.com/GeeTeam/gt3-python-sdk 需要说明的是这里的gt.js文件,它用于加载对应的验证JS库. 1. ...

  6. vue_drf之实现极验滑动验证码

    一.需求 1,场景 我们在很多登录和注册场景里,为了避免某些恶意攻击程序,我们会添加一些验证码,也就是行为验证,让我们相信现在是一个人在交互,而不是一段爬虫程序.现在市面上用的比较多的,比较流行的是极 ...

  7. Python——破解极验滑动验证码

    极验滑动验证码 以上图片是最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/. 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家 ...

  8. selenium+java破解滑动验证码

    2019-04-16更新 修复极验页面改版,这次采用极验官方的demo地址:https://www.geetest.com/demo/slide-bind.html 截止2019-04-16,极验和腾 ...

  9. 使用python实现滑动验证码

    首先安装一个需要用到的模块 pip install social-auth-app-django 安装完后在终端输入pip list会看到 social-auth-app-django social- ...

随机推荐

  1. PHP慢脚本日志和Mysql的慢查询日志(转)

      1.PHP慢脚本日志 间歇性的502,是后端 PHP-FPM 不可用造成的,间歇性的502一般认为是由于 PHP-FPM 进程重启造成的. 在 PHP-FPM 的子进程数目超过的配置中的数量时候, ...

  2. php base64_decode 解码方法

    <?php header('Content-Type:text/html;charset=utf-8'); function encode_file_contents($filename) { ...

  3. JDBC 1

    Java 中的数据存储技术 在Java中,数据库存取技术可分为如下几类: JDBC直接访问数据库 JDO技术 第三方O/R工具,如Hibernate, ibatis 等 JDBC是java访问数据库的 ...

  4. redis2.8--c/s架构流程

  5. 集成支付宝钱包支付iOS SDK的方法与经验

    流程 摘自第一个文档<支付宝钱包支付接口开发包2.0标准版.pdf> 图中的“商户客户端”就是我们的iOS客户端需要做的事情: 调用支付宝支付接口 处理支付宝返回的支付结果 在调用支付宝支 ...

  6. ios 8+ (xcode 6.0 +)应用程序Ad Hoc 发布前多设备测试流程详解

    我们开发的程序在经过simulator以及自己的iOS设备测试后,也基本完成应用程序了,这时候我们就可以把它发布出去了更更多的人去测试,我们可以在iOS平台使用ad hoc实现. 你在苹果购买的开发者 ...

  7. HTML--5 JavaScript

    一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...

  8. 关押罪犯(noip2010)

    解法: (1)搜索(30分) (2)二分(此题属于最大值最小问题) (3)贪心+并查集 下面着重说一下“贪心+并查集” 因为有A.B两座监狱,每个犯人不是在A,就是在B监狱. 至于每个犯人在那个监狱, ...

  9. poj2777 线段树

    //Accepted 4768 KB 391 ms //线段树,延时标记的应用 //对于每一段,用一个int表示被着色的情况,change标记该段的颜色是否发生整体的改变,即这一段 //用没用被全部涂 ...

  10. 2016-1-15 抽屉效果实现demo

    // // ViewController.m // 抽屉 // // Created by Mac on 16/1/15. // Copyright © 2016年 Mac. All rights r ...