• js实现滑动解锁功能(PC+Moblie)


    http://dummyimage.com/600x400/

    http://placehold.it/140x70

    实现效果:

    css样式代码略。

    html代码:

    页面上导入了jquery.mobile 、jquery

    <script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
        <script src="http://apps.bdimg.com/libs/jquerymobile/1.4.2/jquery.mobile.min.js"></script>
    
    <div id="pageSlide">
                            <input type="hidden" value="" id="captcha"/>
    
                            <div id="slider" class="slider">
                                <span id="label" class="label"></span>
                                <span id="lableTip">Slide to confirm I am human!</span>
                            </div>
                        </div>
    

     js代码:

      1 /**
      2  * Created by Administrator on 15-1-9.
      3  */
      4 //滑动条对象
      5 function Slider(swipestart, min, max, index, IsOk, lableIndex) {
      6     var _self = this;
      7     //是否开始滑动
      8     _self.swipestart = swipestart;
      9     //最小值
     10     _self.min = min;
     11     //最大值
     12     _self.max = max;
     13     //当前滑动条所处的位置
     14     _self.index = index;
     15     //是否滑动成功
     16     _self.IsOk = IsOk;
     17     //鼠标在滑动按钮的位置
     18     _self.lableIndex = lableIndex;
     19 }
     20 
     21 //初始化
     22 Slider.prototype.Init = function () {
     23     document.getElementById("btnSubmit").disabled = true;
     24     var _self = this;
     25     $("#label").on("mousedown", function (event) {
     26         var e = event || window.event;
     27         _self.lableIndex = e.clientX - this.offsetLeft;
     28         _self.HanderIn();
     29     });
     30 
     31     $("#pageSlide").on("mousemove", function (event) {
     32         _self.HanderMove(event);
     33     });
     34 
     35     $(document).on("mouseup", function (event) {
     36         _self.HanderOut();
     37     });
     38 
     39 
     40     $("#label").on("touchstart", function (event) {
     41         try {
     42             var e = event || window.event;
     43             //event.originalEvent.changedTouches[0].clientX //event.originalEvent.pageX
     44             _self.lableIndex = event.originalEvent.changedTouches[0].clientX - this.offsetLeft;
     45             _self.HanderIn();
     46         } catch (e) {
     47             console.log(navigator.appVersion + "不支持TouchEvent事件!" + e.message);
     48         }
     49     });
     50 
     51     $("#pageSlide").on("touchmove", function (event) {
     52         try {
     53             _self.HanderMove(event, "mobile");
     54         } catch (e) {
     55             console.log(navigator.appVersion + "不支持touchmove事件!" + e.message);
     56         }
     57 
     58     });
     59 
     60     $(document).on("touchend", function (event) {
     61         try {
     62             _self.HanderOut();
     63         } catch (e) {
     64             console.log(navigator.appVersion + "不支持touchend事件!" + e.message);
     65         }
     66 
     67     });
     68 }
     69 
     70 //鼠标/手指接触滑动按钮
     71 Slider.prototype.HanderIn = function () {
     72     var _self = this;
     73     _self.swipestart = true;
     74     _self.min = 0;
     75     _self.max = $("#slider").width();
     76     if(_self.lableIndex<0){_self.lableIndex=0;}
     77 }
     78 
     79 //鼠标/手指移出
     80 Slider.prototype.HanderOut = function () {
     81     var _self = this;
     82     //停止
     83     _self.swipestart = false;
     84     _self.Move();
     85 }
     86 
     87 //鼠标/手指移动
     88 Slider.prototype.HanderMove = function (event, type) {
     89     var _self = this;
     90     if (_self.swipestart) {
     91         event.preventDefault();
     92         var event = event || window.event;
     93         if (type == "mobile") {
     94             //event.originalEvent.changedTouches[0].clientX //event.originalEvent.pageX
     95             _self.index = event.originalEvent.changedTouches[0].clientX - _self.lableIndex;
     96         } else {
     97             _self.index = event.clientX - _self.lableIndex;
     98         }
     99         _self.Move();
    100     }
    101 }
    102 
    103 //鼠标/手指移出
    104 Slider.prototype.Move = function () {
    105     var _self = this;
    106     //$(".warn").text("index:" + _self.index + ", max" + _self.max + ",lableIndex:" + _self.lableIndex + ",value:" + $("#captcha").val() + " date:" + new Date().getUTCDate());
    107     //$(".warn").text("max:"+ _self.max +",index:"+_self.index +",lableIndex:"+_self.lableIndex);
    108     if ((_self.index + 20) >= _self.max) {
    109         _self.index = _self.max - 20;
    110     }
    111 
    112     if (_self.index < 0) {
    113         _self.index = _self.min;
    114     }
    115     $(".label").css("left", _self.index + "px");
    116     if (_self.index == (_self.max - 20)) {
    117         //停止
    118         _self.swipestart = false;
    119         _self.IsOk = true;//解锁
    120         $("#captcha").val(1);
    121 
    122         var style = {"filter": "alpha(opacity=1)",
    123             "-moz-opacity": "1", "opacity": "1"}
    124         $(".ui-btn.ui-input-btn.ui-corner-all.ui-shadow").css(style);
    125 
    126         $("#slider").css("background-color", "#E5EE9F");
    127         $("#lableTip").text("Thank You!");
    128         document.getElementById("btnSubmit").disabled = false;
    129         document.getElementById("btnSubmit").parentNode.classList.remove("ui-state-disabled");
    130     } else {
    131         _self.IsOk = false;//未解锁
    132         $("#captcha").val(0);
    133         var style = { "filter": "alpha(opacity=0.2)",
    134             "-moz-opacity": "0.2", "opacity": "0.2"}
    135         $(".ui-btn.ui-input-btn.ui-corner-all.ui-shadow").css(style);
    136         $("#slider").css("background-color", "#FDEB9C");
    137         $("#lableTip").text("Slide to confirm I am human!");
    138         document.getElementById("btnSubmit").disabled = true;
    139 
    140         document.getElementById("btnSubmit").parentNode.classList.add("ui-state-disabled");
    141 
    142     }
    143 }
    效果实现:


  • 相关阅读:
    JS中原型对象中的constructor的作用?
    ES Module,commonjs和Typescript模块系统
    webpack中的hash、chunkhash和contenthash
    react-spring介绍(翻译)
    Typescript中的对象多可能类型推导的解决办法
    博客定制样式和脚本代码
    React和Vue对比
    CSS动画属性/重绘重排组合层/GPU加速 渲染优化相关及联系
    Object.create()探索
    await的错误处理问题,一个issue引发的ts社区的讨论
  • 原文地址:https://www.cnblogs.com/goesby/p/4187159.html
Copyright © 2020-2023  润新知