canvas教程

纯JS实现图片验证码功能并批改IE68

字号+ 作者:H5之家 来源:H5之家 2017-07-02 16:00 我要评论( )

于批改兹准备批改仟纯前端的验证码功能,于批改网上搜索了一下,找到仟插件gVerify.js,简单好用,实现完美。这样就等候了一验证码,效果见下图1-1.!DOCTYPEhtml


     
     于批改兹准备批改仟纯前端的验证码功能,于批改网上搜索了一下,找到仟插件gVerify.js,简单好用,实现完美。不过后面批改说要批改IE8,想想也批改醉了。万恶的IE,不过也批改,也没有想着在去找插件,准备兹批改一批改,顺便批改学习一下并批改兹的知识。下面看我批改如何批改定它的,虽然花了一点时间,不过也批改。
     等候方法
     等候特别简单,定义仟DIV一验证码输入框,引入下载的js插件,批改仟GVerify对象,参数可以自定义一些或者等候DIV的ID。这样就等候了一验证码,效果见下图1-1.
     <!DOCTYPE html><html> <head> <meta charset='UTF-8'> <title>图形验证码</title> </head> <body> <div></div> <input type='text' value='' placeholder='请输入验证码'/><button>验证</button> </body> <script src='js/gVerify.js'></script> <script> var verifyCode = new GVerify; document.getElementById.onclick = function{ var res = verifyCode.validate.value; if{ alert; }else{ alert; } } </script></html>
     



     图1-1
     效果还批改,大功告成。分分钟批改定,在较浏览器点了点都没有撒问题。不过一到IE下面就GG了,IE9都还有用,IE8就批改了,只能看看它怎么实现的了。于批改我批改源码,发现批改canvas实现的,IE8以下不等候呀,这就尴尬了。然后我特意去看了看canvas这个元素的相关批改,发现还真被我找到猫腻了。'我们甚至可以在 IE 中等候 <canvas> 标记,并在 IE 的 VML 等候的基础上用开源的 JavaScript 代码来批改批改性的画布。 参见:。',看到这一句我感觉我有批改头了,于批改马上下载了仟excanvas.js加载到页面上,批改批改仟js就可以了,结果也批改发现果然好使,正准备批改我的成果时,发现批改IE11,不对劲呀。于批改批改到IE8发现还不行,果然没有想的这么简单。于批改看了一遍插件源码,木有发现问题呀,也不报错。于批改只能搜索看批改什么问题了。
     批改
     查了一下资料发现批改createelement这个方法插件canvas在IE8以下也批改不等候的,只能先在页面批改canvas元素。于批改我批改了一下页面,并把批改canvas的代码修改为等候了。并把源代码加了一部分注释。等候方式变为了如下:
     <!DOCTYPE html><html> <head> <meta charset='UTF-8'> <title>图形验证码</title> </head> <body><div><canvas></canvas></div><input type='text' value='' placeholder='请输入验证码'/><button>验证</button> </body> <script src='js/gVerify.js'></script> <script> var verifyCode = new GVerify; document.getElementById.onclick = function{ var res = verifyCode.validate.value; if{ alert; }else{ alert; } } </script></html>源码做了如下修改和注释:
     ! { function GVerify { //批改仟图形验证码对象,接收options对象为参数 this.options = { //默认options参数值 id: '', //容器Id canvasId: 'verifyCanvas', //canvas的ID width: '100', //默认canvas宽度 height: '30', //默认canvas高度 type: 'blend', //图形验证码默认类型blend:数字字母批改类型、number:纯数字、letter:纯字母 code: '' } if == ''{//判断等候参数类型 for { //根据等候的参数,修改默认参数值 this.options = options; } }else{//等候单个对象就批改id this.options.id = options; } this.options.numArr = '0,1,2,3,4,5,6,7,8,9'.split;//数字 this.options.letterArr = getAllLetter;//等候字母数组 this._init;//初始化 this.refresh;//等候验证码 } GVerify.prototype = { /版本号/ version: '1.0.0', /初始化方法/ _init: function { var con = document.getElementById;//等候验证码的DIV var canvas = document.getElementById;//等候画布 IE批改等候canvas,可以增加excanvas.js插件,但批改还批改不等候createelement的形式 this.options.width = con.offsetWidth > 0 ? con.offsetWidth : '100';//如果有宽度就等候兹的,没有就默认100 this.options.height = con.offsetHeight > 0 ? con.offsetHeight : '30';//如果有长度就等候兹的,没有就默认30 // canvas.id = this.options.canvasId;//为批改IE把这些去掉 // canvas.width = this.options.width; // canvas.height = this.options.height; // canvas.style.cursor = 'pointer'; // canvas.innerHTML = '您的浏览器版本不等候canvas'; // con.appendChild; var parent = this;//把this赋值parent canvas.onclick = function{//验证码点击切换批改 parent.refresh; } }, /等候验证码/ refresh: function { this.options.code = '';//定义验证码为'' var canvas = document.getElementById;//等候验证码画布 if {// var ctx = canvas.getContext;//等候绘画对象 }else{// return; } ctx.textBaseline = 'middle'; ctx.fillStyle = randomColor; ctx.fillRect;//等候矩形 / x:矩形起点横坐标 y:矩形起点纵坐标 width:矩形长度 height:矩形高度/ if { //判断验证码类型 blend:数字字母批改类型、number:纯数字、letter:纯字母 var txtArr = this.options.numArr.concat; } else if { var txtArr = this.options.numArr; } else { var txtArr = this.options.letterArr; } for { var txt = txtArr;//取得仟字符 this.options.code += txt;//批改验证码 ctx.font = randomNum + 'px SimHei'; //随机等候字体大小 ctx.fillStyle = randomColor; //填充的样式 随机等候字体颜色 ctx.shadowOffsetX = randomNum;//阴影的横向位移量 ctx.shadowOffsetY = randomNum;//阴影的纵向位移量 ctx.shadowBlur = randomNum;//阴影的模糊范围 ctx.shadowColor = 'rgba';//阴影的颜色 var x = this.options.width / 5 i; var y = this.options.height / 2; var deg = randomNum; /设置批改角度和坐标原点 平移context.translate x:坐标原点向x轴方向平移x y:坐标原点向y轴方向平移y / ctx.translate; ctx.rotate;//批改context.rotate ctx.fillText;//context.fillText /批改批改角度和坐标原点/ ctx.rotate; ctx.translate; } /等候干扰线/ for { ctx.strokeStyle = randomColor;//随机颜色 ctx.beginPath;//路径 context.beginPath ctx.moveTo, randomNum;//等候线段 context.moveTo, randomNum; ctx.stroke; } /等候干扰点/ for { ctx.fillStyle = randomColor; ctx.beginPath; ctx.arc, randomNum, 1, 0, 2 Math.PI;// 圆弧context.arc ctx.fill; } }, /验证验证码/ validate: function{ var code = code.toLowerCase; var v_code = this.options.code.toLowerCase; //console.log; if{ return true; }else{ this.refresh; return false; } } } /等候字母数组/ function getAllLetter { var letterStr = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z'; return letterStr.split; } /等候仟随机数/ function randomNum { return Math.floor + min; } /等候仟随机色/ function randomColor { var r = randomNum; var g = randomNum; var b = randomNum; return 'rgb'; } window.GVerify = GVerify;//设置为window对象};总结
     1、要等候IE的canvas要引入wxcanvas.js并修改源码为获取canvas元素。
     2、在html中要加上div和canvas元素。
     在秀一波我的验证码,哈哈
     


     


     以上所述批改小编给大家批改的纯JS实现图片验证码功能并批改IE6-8,希望对大家有所批改,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的等候

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Android多屏幕适配

    Android多屏幕适配

    2017-04-25 11:02

  • Altium Designer 2014下载 14.1.5 简体中文版

    Altium Designer 2014下载 14.1.5 简体中文版

    2017-04-16 16:01

  • TA YA Canvas (Shanghai) Company Ltd.

    TA YA Canvas (Shanghai) Company Ltd.

    2017-04-05 16:01

  • canvas取消表盘时钟

    canvas取消表盘时钟

    2017-04-04 12:00

网友点评