js实现canvas简单的验证码

秒速五厘米 2022-02-05 03:13 328阅读 0赞

首先,canvas:固定在浏览器上的画布,浏览器支持
Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持 及其属性和方法。
canvas为我们敞开了新一扇大门。
属于HTML5中新增的一个标签,看起来与其他标签区别不大,在验证码之前,应该学习canvas相关API,
这里介绍本次用到的canvas方法 :
fillStyle 设置或返回用于填充绘画的颜色、渐变或模式
strokeStyle 设置或返回用于笔触的颜色、渐变或模式
fillRect() 绘制“被填充”的矩形
stroke() 绘制已定义的路径
moveTo() 把路径移动到画布中的指定点,不创建线条
lineTo() 添加一个新点,然后在画布中创建从该点到最后指定点的线条
arc() 创建弧/曲线(用于创建圆形或部分圆)
font 设置或返回文本内容的当前字体属性
更多请参考w3c文档w3c

  • html

  • css

    canvas{

    1. cursor: pointer;
    2. /*border: 1px solid red;*/
    3. }
  • js

    var canvas = document.querySelector(“#canvas”);

    1. console.log(canvas);
    2. var cxt = canvas.getContext('2d');//绘图上下文环境
    3. //绘制验证码图片
    4. draw();
    5. canvas.onclick = function(){
    6. // console.log('1');
    7. draw();
    8. };
    9. function draw(){

    // 绘制一个颜色随机的矩形

    1. cxt.beginPath();
    2. cxt.fillStyle = randColor(170,250);//把颜色放到一个方法
    3. cxt.fillRect(0,0,120,30);
    4. cxt.closePath();
    5. var data = 'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ0123456789';
    6. for(var i = 0; i <= 90; i +=30){//四位验证码
    7. var c = data[randNum(0,data.length - 1)];
    8. cxt.beginPath();
    9. cxt.fillStyle = randColor(60,160);
    10. cxt.font = randNum(15,40) + 'px SimHei';
    11. cxt.fillText(c, i + randNum(0,15),randNum(15,30));//[0,15) [30,45) [60,75) [90,115)
    12. cxt.closePath();
    13. }
    14. //渲染干扰线
    15. for(var j = 0; j < 10; j ++){
    16. cxt.beginPath();
    17. cxt.moveTo(randNum(0,120), randNum(0,120));//这里的randNum(min,max)与canvas的画板宽高相联系,
    18. cxt.lineTo(randNum(0,120), randNum(0,120));
    19. cxt.strokeStyle = randColor(60,120);
    20. cxt.stroke();
    21. }
    22. for(var i = 0; i < 10; i ++){
    23. cxt.beginPath();
    24. cxt.strokeStyle = randColor(50,130);
    25. cxt.arc(randNum(0,120),randNum(0,30),randNum(1,3),0,2*Math.PI);
    26. cxt.stroke();
    27. cxt.closePath();
    28. }
    29. }
    30. function randColor(min,max){//max+1是取不到的,但是max是可以取到的,所以向下取整刚好取到[min,max]。
    31. var r = Math.floor(Math.random()*(max-min + 1)+min);//Math.random * (max- min)==>[o,min)变成[min,max-min]的范围
    32. var g = Math.floor(Math.random()*(max-min + 1)+min);
    33. var b = Math.floor(Math.random()*(max-min + 1)+min);
    34. return 'rgb('+r+','+g+','+b+')';
    35. }
    36. function randNum(min,max){
    37. var num = Math.floor(Math.random()*(max-min + 1)+min);
    38. return num;
    39. console.log(num);
    40. }

效果链接请点击:https://codepen.io/iyouu/pen/gJYKwd

发表评论

表情:
评论列表 (有 0 条评论,328人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JS实现随机验证

    验证码 验证码有很多种类,有图片,字符串,短信…首先,我们一般不能使用JS来实现验证,一般都是后台返回的,要不用户可以直接禁用JS,跳过验证,而且客户端实现的都是不安全的