js仿百度贴吧验证码特效实例代码


Posted in Javascript onJanuary 16, 2014

今天看到有百度验证码挺有意思的,就把它仿下来了。

利用JS实现当选择满4个后自动对比,本文中采用静态对比的方法看你是否全部选择对。然后提示【答案正确!】或【答案错误!】,

以后有空再去做成程序,先分享给大家!

效果图如下:

js仿百度贴吧验证码特效实例代码

源代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    <html xmlns="http://www.w3.org/1999/xhtml">  
    <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
    <title>js仿百度贴吧验证码特效</title>  
    <style>  
    div{margin:0;padding:0;}  
    .com{width:246px;font-size:12px;padding:12px;border:1px solid #ccc;}  
    .clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.clearfix{zoom:1}      .j_captcha_input{border:1px solid #ccc;}  
    .val_add b,.input_show span,.val_input a b{background:url(http://images/20140113213606506.png) no-repeat -500px -500px;}  
    .input_show{height:36px;margin-bottom:5px;}  
    .input_show span{background-position:0 0;display: inline-block;height: 36px;margin-right: 5px;vertical-align: middle;width: 150px;}  
    .val_add{border:1px solid #CCC;word-break: break-all;margin:0 20px 5px 0;}  
    .val_add b{border-right:1px solid #ddd;height: 34px;width: 45px;float:left;}  
    .val_add .delete{background:url(http://images/20140113213531521.png) no-repeat 0 0 #ccc;border-right:0 none;cursor:pointer;width: 40px;}  
    .ation i{font-style:normal;color:#ff0000;}  
    .val_input{width:190px;margin-top:5px;}  
    .val_input a{display:block;float:left;margin:0 5px 5px 0;width:54px;height:40px;border:1px solid #e0e0e0;border-bottom-color:#bfbfbf;outline:0;background:-ms-linear-gradient(top,#fff,#f5f5f5);background:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f5f5f5));background:-moz-linear-gradient(top,#fff,#fafafa);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#FFFFFF,endColorStr=#F5F5F5);zoom:1}  
    .val_input a b{width:54px;height:40px;cursor:pointer;zoom:1;display:block;}  
    .val_input #v_0{background-position:0 -36px}  
    .val_input #v_1{background-position:-53px -36px}/*-56px -41px;*/  
    .val_input #v_2{background-position:-97px -36px}  
    .val_input #v_3{background-position:0 -87px}  
    .val_input #v_4{background-position:-53px -87px}  
    .val_input #v_5{background-position:-97px -87px}  
    .val_input #v_6{background-position:0 -133px}  
    .val_input #v_7{background-position:-53px -133px}  
    .val_input #v_8{background-position:-97px -133px}  
    </style>  
    </head>  
    <body>  
    <div class="com">  
      <div class="val_add clearfix" id="val_add">  
          <b></b>  
          <b></b>  
          <b></b>  
          <b></b>  
          <b class="delete" title="清除" onclick="dele();"></b>  
      </div>  
      <div class="input_show"><span></span><a>看不清?</a></div>  
      <div class="ation">点击框内文字输入上图中<i>汉字或拼音</i>对应汉字</div>  
      <div class="val_input clearfix" id="val_input">  
          <a href="javascript:;"><b id="v_0"></b></a>  
          <a href="javascript:;"><b id="v_1"></b></a>  
          <a href="javascript:;"><b id="v_2"></b></a>  
          <a href="javascript:;"><b id="v_3"></b></a>  
          <a href="javascript:;"><b id="v_4"></b></a>  
          <a href="javascript:;"><b id="v_5"></b></a>  
          <a href="javascript:;"><b id="v_6"></b></a>  
          <a href="javascript:;"><b id="v_7"></b></a>  
          <a href="javascript:;"><b id="v_8"></b></a>  
      </div>  
    </div>  
    <script>  
    function getid(id) {  
        return document.getElementById(id);  
    }  
    //获取属性样式  
    function getStyle(id,prop){   
        var obj=getid(id);  
        var ie = !+"\v1";//简单判断ie6~8  
        if(prop=="backgroundPosition"){//IE6~8不兼容backgroundPosition写法,识别backgroundPositionX/Y  
            if(ie){       
                return obj.currentStyle.backgroundPositionX +" "+obj.currentStyle.backgroundPositionY;  
            }  
        }  
        if (obj.currentStyle) {  
            return obj.currentStyle[prop];       
        }  
        else if (window.getComputedStyle) {  
            proppropprop = prop.replace (/([A-Z])/g, "-$1");             
            proppropprop = prop.toLowerCase ();       
             return document.defaultView.getComputedStyle (obj,null)[prop];       
        }  
    }  
    var anslist = ["","","",""];//储存容器  
    var crent="-56px -92px,-100px -138px,-100px -92px,-3px -138px"; //正确答案容器  
    var flag=0;//从第0个开始算起到当到第3个时自动对比答案  
    var adbs=getid("val_add").getElementsByTagName("b");  
    function addans(va){  
        for(var i=0;i<anslist.length;i++)  
        {  
            if(anslist[i]=="")  
            {         
                anslist[i]=va;  
                adbs[i].style.cssText="background-position:"+anslist[i];  
                flag=i;  
                break;  
            }  
        }  
        if(flag==3)  
        {  
            if(anslist==crent)  
            {  
                alert("答案正确!");  
            }  
            else  
            {  
                alert("答案错误!");  
                dele();  
            }  
        }  
    }  
    //清除原有值  
    function dele(){  
        flag=0;  
        for(var i=0;i<adbs.length;i++)  
            adbs[i].style.cssText="";  
        anslist = ["","","",""];  
    }  
    //绑定九宫格验证码的点击事件  
    function addEvt(tab,ct,type){  
        var ctab = getid(tab).getElementsByTagName("b");  
        //var cdiv = getid(ct).getElementsByTagName(type);  
        for(var i = 0;i<ctab.length;i++)  
        {   
            ctab[i].onclick =function std(){              
                //alert(this.id);  
                var st=getStyle(this.id,"backgroundPosition");  
                var ststd=st.split(" ");//属性中间的空间作为分隔符如:background-position:215px 215px; getStyle方法取得值是215px 215px;  
                var st1,st2="";  
                /*-53px -36px,-56px -41px;经对比九宫格与显示选择的答案x差-3,y差-5*/  
                st1= parseInt(std[0].replace("px"))-3;  
                st2= parseInt(std[1].replace("px"))-5;            
                addans(st1+"px "+st2+"px");  
            }  
        }  
    }  
    addEvt("val_input");  
    </script>  
    </body>  
    </html>

出处:http://www.86y.org/art_detail.aspx?id=682

Javascript 相关文章推荐
Bookmarklet实现启动jQuery(模仿 云输入法)
Sep 15 Javascript
jquery delay()介绍及使用指南
Sep 02 Javascript
jQuery验证表单格式的使用方法
Jan 10 Javascript
vue.js实现请求数据的方法示例
Feb 07 Javascript
原生javascript实现读写CSS样式的方法详解
Feb 20 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
Jul 05 Javascript
关于webpack代码拆分的解析
Jul 20 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 Javascript
原生JS实现列表子元素顺序反转的方法分析
Jul 02 Javascript
javascrit中undefined和null的区别详解
Apr 07 Javascript
使用node-media-server搭建一个简易的流媒体服务器
Jan 20 Javascript
JavaScript中的宏任务和微任务详情
Nov 27 Javascript
js中传递特殊字符(+,&amp;)的方法
Jan 16 #Javascript
利用浏览器全屏api实现js全屏
Jan 16 #Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
Jan 15 #Javascript
JS和Jquery获取和修改label的值的示例代码
Jan 15 #Javascript
javascript中验证大写字母、数字和中文
Jan 15 #Javascript
setTimeout自动触发一个js的方法
Jan 15 #Javascript
JS记录用户登录次数实现代码
Jan 15 #Javascript
You might like
php使用codebase生成随机数
2014/03/25 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
PHP7新功能总结
2019/04/14 PHP
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
2017/01/16 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
js实现轮播图特效
2020/05/28 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
在Docker上开始部署Python应用的教程
2015/04/17 Python
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
Python列表与元组的异同详解
2019/07/02 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
秋季开学典礼主持词
2014/03/19 职场文书
文艺晚会主持词
2014/03/24 职场文书
防沙治沙典型材料
2014/05/07 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
记者节感言
2015/08/03 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL
Python 文本滚动播放器的实现代码
2021/04/25 Python
MySQL中连接查询和子查询的问题
2021/09/04 MySQL
无线电通信名词解释
2022/02/18 无线电