参数和变量:inputCod_数字验证 前端怎么展示">
当前位置:   article > 正文

前端实现展示和点击更换验证码效果_数字验证 前端怎么展示

数字验证 前端怎么展示

HTML代码:

  1. <Input v-model="yanzhengma" style="width:200px;"></Input>
  2. <!-- 画布用于展示验证码 -->
  3. <canvas class="codeCanvas" ref="checkCode" @click="getCode"></canvas>
  4. <Button @click="checkMe">下一步</Button>

参数和变量:

  1. inputCode: '', // 输入的值
  2. checkCode: '', // 图片验证码的值
  3. // canvas各种设置
  4. cvs: {
  5. w: 100, // 给出默认宽度 宽度会在图片绘制时根据长度更改
  6. h: 40, // 高 与input保持一致
  7. fontSize: 24, // 字体大小
  8. // 字符串生成范围
  9. str: '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM',
  10. len: 4, // 字符串长度
  11. line: 3 // 噪音线个数
  12. }

js函数和方法:

  1. mounted(){
  2. this.getCode();
  3. },
  4. methods:{
  5. onClick(name){
  6. this.status = name
  7. },
  8. getCode(){
  9. // vue的话可直接用$refs取值,不用vue的话可绑定id然后通过document处理
  10. let domCvs = this.$refs.checkCode;
  11. this.drawCode(domCvs);
  12. },
  13. // 随机整数生成器,范围[0, max)
  14. rInt(max) {
  15. return Math.floor(Math.random() * 100000 % max);
  16. },
  17. // 生成随机字符串
  18. rCode() {
  19. let code = '';
  20. let len = this.cvs.len;
  21. let strLen = this.cvs.str.length;
  22. for(let i = 0; i < len; i ++) {
  23. code += this.cvs.str.charAt(this.rInt(strLen));
  24. }
  25. this.checkCode = code;
  26. return code;
  27. },
  28. // 生成随机颜色 rgba格式
  29. rColor() {
  30. let a = ((Math.random()*5 + 5) / 10).toFixed(2);
  31. return `rgba(${this.rInt(256)}, ${this.rInt(256)}, ${this.rInt(256)}, ${a})`
  32. },
  33. // 验证码图片绘制
  34. drawCode(domCvs) {
  35. let _this = this;
  36. // 随机字符串
  37. let checkCode = this.rCode();
  38. // 宽设置
  39. this.cvs.w = 10 + this.cvs.fontSize * this.cvs.len;
  40. // 判断是否支持canvas
  41. if(domCvs !== null && domCvs.getContext && domCvs.getContext('2d')){
  42. // 设置显示区域大小
  43. domCvs.style.width = _this.cvs.w;
  44. // 设置画板宽高
  45. domCvs.setAttribute('width', _this.cvs.w);
  46. domCvs.setAttribute('height', _this.cvs.h);
  47. // 画笔
  48. let pen = domCvs.getContext('2d');
  49. // 背景: 颜色 区域
  50. pen.fillStyle = '#eee';
  51. pen.fillRect(0, 0, _this.cvs.w, _this.cvs.h);
  52. // 水平线位置
  53. pen.textBaseline = 'middle'; // top middle bottom
  54. // 内容
  55. for(let i = 0; i < _this.cvs.len; i ++) {
  56. pen.fillStyle = _this.rColor(); // 随机颜色
  57. pen.font = `bold ${_this.cvs.fontSize}px 微软雅黑`; // 字体设置
  58. // 字符绘制: (字符, X坐标, Y坐标)
  59. pen.fillText(checkCode.charAt(i), 10 + _this.cvs.fontSize * i, 17 + _this.rInt(10));
  60. }
  61. // 噪音线
  62. for(let i = 0; i < _this.cvs.line; i ++) {
  63. // 起点
  64. pen.moveTo(_this.rInt(_this.cvs.w) / 2, _this.rInt(_this.cvs.h));
  65. // 终点
  66. pen.lineTo(_this.rInt(_this.cvs.w), _this.rInt(_this.cvs.h));
  67. // 颜色
  68. pen.strokeStyle = _this.rColor();
  69. // 粗细
  70. pen.lineWidth = '2';
  71. // 绘制
  72. pen.stroke();
  73. }
  74. } else {
  75. this.$message.error('不支持验证码格式,请升级或更换浏览器重试');
  76. }
  77. },
  78. }

最后效果如下:   点击验证码时就自动刷新。

 

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

闽ICP备14008679号