当前位置:   article > 正文

HTML+CSS+JS生成随机验证码_html随机生成验证码

html随机生成验证码

昨天在小破站看到一个前端生成随机验证码的视频,感觉很有意思,就跟着操作了一下,成功了。
后来自己又想给它加一个提交按钮,输入并判断验证码的正确性,也可以正常运行,但是我的代码好像还是存在一些bug:
         1.canvas标签是绘图容器,自带属性使它是一个默认300*150的容器,缩小canvs容器时,里面的绘图也会变小,我没有找到合适的方法去调整它的大小。
         2.对于输入框input,我使用了float浮动,为了使input输入框和canvas里面的验证码并排,但是被vscode警告了。
这次的实战练习也经历了很多坎坷,但是也收获很大。学习到了canvas标签的用法、JS全局变量和局部变量、以及有关context的一些属性和方法。
最后,希望路过的大佬,帮我看看bug,帮帮菜鸟。

实现代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style type="text/css">
  9. label{
  10. float: left;
  11. line-height: 40px;
  12. vertical-align: middle;
  13. }
  14. #verification{
  15. padding:10px 2px;
  16. margin: 0;
  17. display: inline-block;
  18. float: left;
  19. }
  20. canvas{
  21. margin: 0;
  22. padding: 0;
  23. width: 120;
  24. height: 40;
  25. display: inline;
  26. float: left;
  27. }
  28. #login{
  29. clear: both;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <div>
  35. <label for="verification">验证码</label><input type="text" id="verification">
  36. <canvas id="canvas"></canvas>
  37. <!-- canvas标签只是图形容器,必须用脚本来绘制图形,通常是JavaScript -->
  38. <button onclick="myFunction()">提交</button>
  39. </div>
  40. <script type="text/javascript">
  41. var result=""
  42. function YZM(selector,w,h){
  43. // var result="";
  44. // 随机生成数字
  45. function rn(min,max){
  46. return parseInt(Math.random()*(max-min)+min);
  47. }
  48. //生成随机颜色
  49. function rc(min,max){
  50. var r=rn(min,max);
  51. var g=rn(min,max);
  52. var b=rn(min,max);
  53. return `rgb(${r},${g},${b})`;
  54. }
  55. //填充背景颜色
  56. var w=w;
  57. var h=h;
  58. var canvas=document.querySelector(selector);
  59. //querySelector()方法返回文档中匹配指定CSS选择器的一个元素。
  60. //querySelector()方法仅仅返回匹配指定选择器的第一个元素。如果你想要返回所有的元素,请使用querySelectorAll()方法代替。
  61. // var ctx=canvas.getContext('2d');
  62. // getContext()方法返回一个用于在画布上绘图的环境
  63. //语法:canvas.getContext(contextID)
  64. //参数contextID指定了您想要在画布上绘制的类型。当前唯一合法的值是"2d",它指定了二维绘图,并且导致该方法返回一个环境对象,该对象导出一个二维绘图API。
  65. // ctx.fillRect(0,0,w,h);
  66. var ctx=canvas.getContext("2d");
  67. ctx.fillStyle=rc(180,230);
  68. //fillStyle属性设置或者返回用于填充的颜色、渐变哦或者模式。
  69. ctx.fillRect(0,0,w,h);
  70. //fillRect()方法绘制"已填色"的矩形,默认的填充颜色是黑色。
  71. //语法:context.fillRect(x,y,width,height);
  72. //随机字符串
  73. var pool="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
  74. //取出随机数字
  75. for(var i=0;i<4;i++){
  76. var c=pool[rn(0,pool.length)];
  77. //随机字体大小
  78. var fs=rn(18,40);
  79. //随机字母数字的旋转角度
  80. var deg=rn(-30,30);
  81. ctx.font=fs+"px Simhei";
  82. ctx.textBaseline='top';
  83. //设置字体的填充颜色
  84. ctx.fillStyle=rc(80,150);
  85. ctx.save();
  86. //save()保存当前的绘图状态
  87. ctx.translate(30*i+15,15);
  88. ctx.rotate(deg*Math.PI/180);
  89. ctx.fillText(c,-10,-10);
  90. //context.fillText(text,x,y,maxWidth)----text是在画布上输出的文本,x和y是坐标,maxWidth是最大文本宽度
  91. ctx.restore();
  92. //restore()恢复之前保存的绘图状态
  93. result+=c;
  94. // console.log(c);
  95. }
  96. //随机生成干扰线
  97. for(var i=0;i<5;i++){
  98. ctx.beginPath();
  99. //beginPath()方法开始一条路径,或者重置当前的路径
  100. ctx.moveTo(rn(0,w),rn(0,h));
  101. //context.moveTo(x,y)----x是目标位置的x坐标,y是目标位置的y坐标
  102. ctx.lineTo(rn(0,w),rn(0,h));
  103. //lineTo()方法添加一个新点,然后创建从该点到画布中最后指定点的线条。(该方法并不会创建线条)
  104. //context.lineTo(x,y)-----x是目标位置的x坐标,y是目标位置的y坐标
  105. ctx.stokeStyle=rc(180,230);
  106. //strokeStyle属性设置或返回用于笔触的颜色、渐变或模式。
  107. ctx.closePath();
  108. //closePath()闭合路径
  109. ctx.stroke();
  110. //stroke()方法在画布上绘制确切的路径
  111. }
  112. //随机生成40个小的干扰圆点
  113. for(var i=0;i<40;i++){
  114. ctx.beginPath();
  115. ctx.arc(rn(0,w),rn(0,h),1,0,2*Math.PI);
  116. //arc()方法创建弧/曲线(用于创建圆或者部分圆)
  117. ctx.closePath();
  118. ctx.fillStyle=rc(150,200);
  119. ctx.fill();
  120. }
  121. return result;
  122. console.log(result);
  123. }
  124. let yzm=YZM("#canvas",120,40);
  125. console.log(yzm);
  126. //验证验证码是否正确
  127. function myFunction(){
  128. var mycode=document.getElementById("verification").value;
  129. if(mycode==result){
  130. alert("验证成功");
  131. }
  132. else{
  133. alert("验证失败,请重新输入");
  134. }
  135. console.log(mycode);
  136. }
  137. </script>
  138. </body>
  139. </html>

实现效果: 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/54510
推荐阅读
相关标签
  

闽ICP备14008679号