最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生js生成圖片驗(yàn)證碼

 更新時(shí)間:2020年10月11日 10:39:34   作者:九布  
這篇文章主要為大家詳細(xì)介紹了原生js生成圖片驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了js生成圖片驗(yàn)證碼的具體代碼,供大家參考,具體內(nèi)容如下

html代碼

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>圖形驗(yàn)證碼</title>
 </head>
 <body>
  <div id="v_container" style="width: 200px;height: 50px;"></div>
  <input type="text" id="code_input" value="" placeholder="請(qǐng)輸入驗(yàn)證碼"/><button id="my_button">驗(yàn)證</button>
 </body>
 <script src="../js/picCode.js"></script>
 <script>
  var verifyCode = new GVerify("v_container");
  document.getElementById("my_button").onclick = function(){
   var res = verifyCode.validate(document.getElementById("code_input").value);
   if(res){
    alert("驗(yàn)證正確");
   }else{
    alert("驗(yàn)證碼錯(cuò)誤");
   }
  }
 </script>
</html>

js

!(function(window, document) {
 var size = 5;//設(shè)置驗(yàn)證碼長(zhǎng)度
 function GVerify(options) { //創(chuàng)建一個(gè)圖形驗(yàn)證碼對(duì)象,接收options對(duì)象為參數(shù)
  this.options = { //默認(rèn)options參數(shù)值
   id: "", //容器Id
   canvasId: "verifyCanvas", //canvas的ID
   width: "100", //默認(rèn)canvas寬度
   height: "30", //默認(rèn)canvas高度
   type: "blend", //圖形驗(yàn)證碼默認(rèn)類型blend:數(shù)字字母混合類型、number:純數(shù)字、letter:純字母
   code: "",
  }
  if(Object.prototype.toString.call(options) == "[object Object]"){//判斷傳入?yún)?shù)類型
   for(var i in options) { //根據(jù)傳入的參數(shù),修改默認(rèn)參數(shù)值
    this.options[i] = options[i];
   }
  }else{
   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 = {
  /**版本號(hào)**/
  version: '1.0.0',
  
  /**初始化方法**/
  _init: function() {
   var con = document.getElementById(this.options.id);
   var canvas = document.createElement("canvas");
   this.options.width = con.offsetWidth > 0 ? con.offsetWidth : "100";
   this.options.height = con.offsetHeight > 0 ? con.offsetHeight : "30";
   canvas.id = this.options.canvasId;
   canvas.width = this.options.width;
   canvas.height = this.options.height;
   canvas.style.cursor = "pointer";
   canvas.innerHTML = "您的瀏覽器版本不支持canvas";
   con.appendChild(canvas);
   var parent = this;
   canvas.onclick = function(){
    parent.refresh();
   }
  },
  
  /**生成驗(yàn)證碼**/
  refresh: function() {
   this.options.code = "";
   var canvas = document.getElementById(this.options.canvasId);
   if(canvas.getContext) {
    var ctx = canvas.getContext('2d');
   }else{
    return;
   }
   
   ctx.textBaseline = "middle";
 
   ctx.fillStyle = randomColor(180, 240);
   ctx.fillRect(0, 0, this.options.width, this.options.height);
 
   if(this.options.type == "blend") { //判斷驗(yàn)證碼類型
    var txtArr = this.options.numArr.concat(this.options.letterArr);
   } else if(this.options.type == "number") {
    var txtArr = this.options.numArr;
   } else {
    var txtArr = this.options.letterArr;
   }
 
   for(var i = 1; i <=size; i++) {
    var txt = txtArr[randomNum(0, txtArr.length)];
    this.options.code += txt;
    ctx.font = randomNum(this.options.height/2, this.options.height) + 'px SimHei'; //隨機(jī)生成字體大小
    ctx.fillStyle = randomColor(50, 160); //隨機(jī)生成字體顏色  
    ctx.shadowOffsetX = randomNum(-3, 3);
    ctx.shadowOffsetY = randomNum(-3, 3);
    ctx.shadowBlur = randomNum(-3, 3);
    ctx.shadowColor = "rgba(0, 0, 0, 0.3)";
    var x = this.options.width / (size+1) * i;
    var y = this.options.height / 2;
    var deg = randomNum(-30, 30);
    /**設(shè)置旋轉(zhuǎn)角度和坐標(biāo)原點(diǎn)**/
    ctx.translate(x, y);
    ctx.rotate(deg * Math.PI / 180);
    ctx.fillText(txt, 0, 0);
    /**恢復(fù)旋轉(zhuǎn)角度和坐標(biāo)原點(diǎn)**/
    ctx.rotate(-deg * Math.PI / 180);
    ctx.translate(-x, -y);
   }
   /**繪制干擾線**/
   for(var i = 0; i < 4; i++) {
    ctx.strokeStyle = randomColor(40, 180);
    ctx.beginPath();
    ctx.moveTo(randomNum(0, this.options.width), randomNum(0, this.options.height));
    ctx.lineTo(randomNum(0, this.options.width), randomNum(0, this.options.height));
    ctx.stroke();
   }
   /**繪制干擾點(diǎn)**/
   for(var i = 0; i < this.options.width/4; i++) {
    ctx.fillStyle = randomColor(0, 255);
    ctx.beginPath();
    ctx.arc(randomNum(0, this.options.width), randomNum(0, this.options.height), 1, 0, 2 * Math.PI);
    ctx.fill();
   }
  },
  
  /**驗(yàn)證驗(yàn)證碼**/
  validate: function(code){
   var code = code.toLowerCase();
   var v_code = this.options.code.toLowerCase();
   if(code == v_code){
    return true;
   }else{
    this.refresh();
    return false;
   }
  }
 }
 /**生成字母數(shù)組**/
 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(",");
 }
 /**生成一個(gè)隨機(jī)數(shù)**/
 function randomNum(min, max) {
  return Math.floor(Math.random() * (max - min) + min);
 }
 /**生成一個(gè)隨機(jī)色**/
 function randomColor(min, max) {
  var r = randomNum(min, max);
  var g = randomNum(min, max);
  var b = randomNum(min, max);
  return "rgb(" + r + "," + g + "," + b + ")";
 }
 window.GVerify = GVerify;
})(window, document);

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。 

相關(guān)文章

  • p5.js臨摹動(dòng)態(tài)圖形實(shí)現(xiàn)方法詳解

    p5.js臨摹動(dòng)態(tài)圖形實(shí)現(xiàn)方法詳解

    這篇文章主要為大家詳細(xì)介紹了p5.js臨摹動(dòng)態(tài)圖形的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • javascript加載導(dǎo)出3mf文件

    javascript加載導(dǎo)出3mf文件

    3MF是一種開放標(biāo)準(zhǔn)的文件格式,專門用于三維制造和打印,這篇文章主要介紹了如何使用JavaScript實(shí)現(xiàn)加載導(dǎo)出3mf文件,感興趣的可以了解下
    2024-11-11
  • JS重學(xué)系列之聊聊new操作符

    JS重學(xué)系列之聊聊new操作符

    這篇文章主要給大家介紹了關(guān)于JS重學(xué)系列之new操作符的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 微信小程序自定義菜單導(dǎo)航實(shí)現(xiàn)樓梯效果

    微信小程序自定義菜單導(dǎo)航實(shí)現(xiàn)樓梯效果

    在html開發(fā)中,我們可以用到a標(biāo)簽錨點(diǎn)實(shí)現(xiàn),jq的動(dòng)畫相結(jié)合實(shí)現(xiàn)類似效果。在框架中vant UI框架也為我們實(shí)現(xiàn)了這一效果。接下來通過本文給大家介紹微信小程序自定義菜單導(dǎo)航實(shí)現(xiàn)樓梯效果,感興趣的朋友一起看看吧
    2021-12-12
  • 原生js代碼能實(shí)現(xiàn)call和bind嗎

    原生js代碼能實(shí)現(xiàn)call和bind嗎

    這篇文章主要介紹了原生js代碼能實(shí)現(xiàn)call和bind嗎,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • JavaScript實(shí)現(xiàn)平滑滾動(dòng)效果

    JavaScript實(shí)現(xiàn)平滑滾動(dòng)效果

    頁面平滑滾動(dòng)是網(wǎng)頁一種常見的效果,平滑滾動(dòng)的原理其實(shí)很簡(jiǎn)單,無非就是讓頁面一種肉眼可見的速度從當(dāng)前位置滾動(dòng)到指定位置,那如何用原生的JS實(shí)現(xiàn)這也效果呢?本文給大家介紹了JavaScript實(shí)現(xiàn)平滑滾動(dòng)效果,需要的朋友可以參考下
    2024-06-06
  • javascript和php使用ajax通信傳遞JSON的實(shí)例

    javascript和php使用ajax通信傳遞JSON的實(shí)例

    今天小編就為大家分享一篇javascript和php使用ajax通信傳遞JSON的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • javascript中處理時(shí)間戳為日期格式的方法

    javascript中處理時(shí)間戳為日期格式的方法

    本文為大家介紹下javascript中如何將時(shí)間戳處理為日期格式,下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下
    2014-01-01
  • 怎樣用Javascript實(shí)現(xiàn)建造者模式

    怎樣用Javascript實(shí)現(xiàn)建造者模式

    這篇文章主要介紹了怎樣用Javascript實(shí)現(xiàn)建造者模式,想學(xué)習(xí)設(shè)計(jì)模式的同學(xué),可以參考下
    2021-04-04
  • javascript簡(jiǎn)單寫的判斷電話號(hào)碼實(shí)例

    javascript簡(jiǎn)單寫的判斷電話號(hào)碼實(shí)例

    這篇文章主要介紹了javascript簡(jiǎn)單寫的判斷電話號(hào)碼實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評(píng)論

涟水县| 蓬安县| 正镶白旗| 泾川县| 宁明县| 廊坊市| 固镇县| 神木县| 五大连池市| 乐清市| 涟源市| 中方县| 兰考县| 义乌市| 金华市| 望江县| 巴林左旗| 连云港市| 永泰县| 宜丰县| 罗定市| 阿拉善左旗| 利辛县| 西吉县| 惠安县| 黄冈市| 樟树市| 财经| 绥宁县| 龙江县| 来凤县| 图木舒克市| 冷水江市| 托克逊县| 甘孜县| 土默特右旗| 临朐县| 女性| 牡丹江市| 揭阳市| 南充市|