zoukankan      html  css  js  c++  java
  • 滑动验证前端代码实现

    支付宝的滑块验证效果,又刷新了大家对于验证码的认知,这种滑块效果,改善了用户体验。除了它外观和用户体验上的优秀外,其实它的安全性也并未降低,后端对用户行为的分析依然保证了安全校验。 
    下面我们在此介绍一下,滑块效果的前端实现。 
    涵盖的内容主要: 滑块前端样式(html排版),滑块的闪光移动效果(CSS3 动画),以及滑块滑动脚本的编写(javascript 移动,点击,拖拽事件的编写。)

    备注: 本实例基于 网上Demo 增添 CSS效果 和 修复 JS BUG 等问题。大家直接粘贴代码到对应的文件,便可直接运行。

    运行结果

    首先给出几张效果图。 
    滑动前

    滑动中

    滑动成功

    滑块前端HTML

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>滑动</title>
        <link rel="stylesheet" href="css/drag.css">
        <script src="js/jquery-1.7.1.min.js"></script>
        <script src="js/drag.js"></script>
        <style type="text/css">
            .slidetounlock{
                font-size: 12px;
                background:-webkit-gradient(linear,left top,right top,color-stop(0,#4d4d4d),color-stop(.4,#4d4d4d),color-stop(.5,#fff),color-stop(.6,#4d4d4d),color-stop(1,#4d4d4d));
                -webkit-background-clip:text;
                -webkit-text-fill-color:transparent;
                -webkit-animation:slidetounlock 3s infinite;
                -webkit-text-size-adjust:none
            }
            @-webkit-keyframes slidetounlock{0%{background-position:-200px 0} 100%{background-position:200px 0}}
    
        </style>
    </head>
    <body>
    <div id="wrapper" style="position: relative;top: 300px;left:300px;">
        <div id="drag">
            <div class="drag_bg"></div>
            <div class="drag_text slidetounlock" onselectstart="return false;" unselectable="on">
                请按住滑块,拖动到最右边
            </div>
            <div class="handler handler_bg"></div>
        </div>
    </div>
    
        <!--<a href="#" class="img"><img src="img/Lighthouse.jpg"/></a>-->
    <script>
        $('#drag').drag();
    </script>
    </body>
    </html>

    HTML 滑块CSS 样式

    #drag{
        position: relative;
        background-color: #e8e8e8;
        width: 300px;
        height: 34px;
        line-height: 34px;
        text-align: center;
    }
    #drag .handler{
        position: absolute;
        top: 0px;
        left: 0px;
        width: 40px;
        height: 32px;
        border: 1px solid #ccc;
        cursor: move;
    }
    .handler_bg{
        background: #fff url("../img/slider.png") no-repeat center;
    }
    .handler_ok_bg{
        background: #fff url("../img/complet.png") no-repeat center;
    }
    #drag .drag_bg{
        background-color: #7ac23c;
        height: 34px;
        width: 0px;
    }
    #drag .drag_text{
        position: absolute;
        top: 0px;
        width: 300px;
        color:#9c9c9c;
        -moz-user-select: none;
        -webkit-user-select: none;
        user-select: none;
        -o-user-select:none;
        -ms-user-select:none;
    
        font-size: 12px;        //  add
    }

    滑块拖拽JS

    /**
     * Created by shuai_wy on 2017/3/14.
     */
    $.fn.drag = function(options) {
        var x, drag = this, isMove = false, defaults = {
        };
        var options = $.extend(defaults, options);
        var handler = drag.find('.handler');
        var drag_bg = drag.find('.drag_bg');
        var text = drag.find('.drag_text');
        var maxWidth = drag.width() - handler.width();  //能滑动的最大间距
    
        //鼠标按下时候的x轴的位置
        handler.mousedown(function(e) {
            isMove = true;
            x = e.pageX - parseInt(handler.css('left'), 10);
        });
    
        //鼠标指针在上下文移动时,移动距离大于0小于最大间距,滑块x轴位置等于鼠标移动距离
        $(document).mousemove(function(e) {
            var _x = e.pageX - x;// _x = e.pageX - (e.pageX - parseInt(handler.css('left'), 10)) = x
            if (isMove) {
                if (_x > 0 && _x <= maxWidth) {
                    handler.css({'left': _x});
                    drag_bg.css({'width': _x});
                } else if (_x > maxWidth) {  //鼠标指针移动距离达到最大时清空事件
                    dragOk();
                }
            }
        }).mouseup(function(e) {
            isMove = false;
            var _x = e.pageX - x;
            if (_x < maxWidth) { //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置
                handler.css({'left': 0});
                drag_bg.css({'width': 0});
            }
        });
    
        //清空事件
        function dragOk() {
            handler.removeClass('handler_bg').addClass('handler_ok_bg');
            text.removeClass('slidetounlock').text('验证通过').css({'color':'#fff'});       //modify
           // drag.css({'color': '#fff !important'});
    
            handler.css({'left': maxWidth});                   // add
            drag_bg.css({'width': maxWidth});                  // add
    
            handler.unbind('mousedown');
            $(document).unbind('mousemove');
            $(document).unbind('mouseup');
    
        }
    };



    二:基于vue实现

    https://www.jianshu.com/p/f5bf9ba0b27e


    热爱前端技术
  • 相关阅读:
    POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
    LCA 最近公共祖先 (模板)
    线段树,最大值查询位置
    带权并查集
    转负二进制
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
  • 原文地址:https://www.cnblogs.com/lcosima/p/9364713.html
Copyright © 2011-2022 走看看