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

原生JavaScript實(shí)現(xiàn)簡(jiǎn)單的圖形驗(yàn)證碼

 更新時(shí)間:2023年11月23日 08:22:41   作者:方苕愛吃瓜  
這篇文章主要為大家詳細(xì)介紹了如何利用原生JavaScript實(shí)現(xiàn)簡(jiǎn)單的圖形驗(yàn)證碼,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以參考下

前天接到需求要在老項(xiàng)目登陸界面加上驗(yàn)證碼功能,因?yàn)槭莾?nèi)部項(xiàng)目且無(wú)需短信驗(yàn)證環(huán)節(jié),那就直接用原生js寫一個(gè)簡(jiǎn)單的圖形驗(yàn)證碼。

示例:

思路:此處假設(shè)驗(yàn)證碼為4位隨機(jī)數(shù)值,數(shù)值刷新滿足兩個(gè)條件①頁(yè)面新進(jìn)/刷新。②點(diǎn)擊圖片刷新。(實(shí)際情況下還要考慮登錄出錯(cuò)刷新,此處只做樣式不寫進(jìn)去) 實(shí)現(xiàn)過(guò)程為1.先寫一個(gè)canvas標(biāo)簽做繪圖容器。    →     2.將拿到的值繪制到容器中并寫好樣式。    →     3.點(diǎn)擊刷新重新繪制。

寫一個(gè)canvas標(biāo)簽當(dāng)容器

<canvas
    style="width: 100px;border: 2px solid rgb(60, 137, 209);background-image: url('https://gd-hbimg.huaban.com/aa3c7f23dfdc7b2d317aa4b77bd6c7b8469564d2dfa8b-Btd5c6_fw658webp');"
    id="captchaCanvas"></canvas>

并設(shè)置容器寬高背景顏色或圖片等樣式

寫一個(gè)數(shù)值繪制到canvas的方法

//text為傳遞的數(shù)值
function generateCaptcha(text, callback) {
      var canvas = document.getElementById('captchaCanvas');
      var ctx = canvas.getContext('2d');
      // 設(shè)置字體及大小
      ctx.font = '100px Comic Sans MS';
      // 設(shè)置字體顏色
      ctx.fillStyle = 'rgb(' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ')';
      // 調(diào)整文字圖形位置
      ctx.textAlign = 'left';
      ctx.textBaseline = 'top';
      // 調(diào)整陰影范圍
      ctx.shadowBlur = Math.random() * 20;
      // 調(diào)整陰影顏色
      ctx.shadowColor = 'rgb(' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ')';
      // 調(diào)整陰影位置(偏移量)
      ctx.shadowOffsetX = Math.random() * 10;
      ctx.shadowOffsetY = Math.random() * 10;
      // 繪制文字圖形及其偏移量
      ctx.fillText(text, 25, 35);
      // 繪制文字邊框及其偏移量
      ctx.strokeText(text, Math.random() * 35, Math.random() * 45);

      var imgDataUrl = canvas.toDataURL();
      callback(imgDataUrl);

    }

拿到數(shù)值調(diào)用繪制方法

此處為樣式示例,因此數(shù)值我用4位隨機(jī)數(shù)表示,實(shí)際情況為你從后端取得的值,并依靠這個(gè)值在后端判斷驗(yàn)證碼是否一致。

// 調(diào)用函數(shù)生成驗(yàn)證碼并顯示在頁(yè)面上  
    generateCaptcha(Math.floor(Math.random() * 9000) + 1000, function (imgDataUrl) { });

監(jiān)聽標(biāo)簽點(diǎn)擊實(shí)現(xiàn)點(diǎn)擊刷新

此處要注意一定要先清空canvas中已繪制圖像再渲染新數(shù)值,因此直接將清除范圍設(shè)置較大。

 // 監(jiān)聽點(diǎn)擊更新驗(yàn)證碼
    document.getElementById("captchaCanvas").addEventListener("click", function (event) {
      // 清空畫布
      document.getElementById("captchaCanvas").getContext("2d").clearRect(0, 0, 9999, 9999);
      // 調(diào)用函數(shù)生成驗(yàn)證碼并顯示在頁(yè)面上  
      generateCaptcha(Math.floor(Math.random() * 9000) + 1000, function (imgDataUrl) { });
    })

最后實(shí)現(xiàn)效果:

完整代碼演示

<!DOCTYPE html>
<html>

<head>
  <title>String to Captcha</title>
</head>

<body>
  <canvas
    style="width: 100px;border: 2px solid rgb(60, 137, 209);background-image: url('https://gd-hbimg.huaban.com/aa3c7f23dfdc7b2d317aa4b77bd6c7b8469564d2dfa8b-Btd5c6_fw658webp');"
    id="captchaCanvas"></canvas>


  <script>
    // 監(jiān)聽點(diǎn)擊更新驗(yàn)證碼
    document.getElementById("captchaCanvas").addEventListener("click", function (event) {
      // 清空畫布
      document.getElementById("captchaCanvas").getContext("2d").clearRect(0, 0, 9999, 9999);
      // 調(diào)用函數(shù)生成驗(yàn)證碼并顯示在頁(yè)面上  
      generateCaptcha(Math.floor(Math.random() * 9000) + 1000, function (imgDataUrl) { });
    })

    function generateCaptcha(text, callback) {
      var canvas = document.getElementById('captchaCanvas');
      var ctx = canvas.getContext('2d');
      // 設(shè)置字體及大小
      ctx.font = '100px Comic Sans MS';
      // 設(shè)置字體顏色
      ctx.fillStyle = 'rgb(' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ')';
      // 調(diào)整文字圖形位置
      ctx.textAlign = 'left';
      ctx.textBaseline = 'top';
      // 調(diào)整陰影范圍
      ctx.shadowBlur = Math.random() * 20;
      // 調(diào)整陰影顏色
      ctx.shadowColor = 'rgb(' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ')';
      // 調(diào)整陰影位置(偏移量)
      ctx.shadowOffsetX = Math.random() * 10;
      ctx.shadowOffsetY = Math.random() * 10;
      // 繪制文字圖形及其偏移量
      ctx.fillText(text, 25, 35);
      // 繪制文字邊框及其偏移量
      ctx.strokeText(text, Math.random() * 35, Math.random() * 45);

      var imgDataUrl = canvas.toDataURL();
      callback(imgDataUrl);

    }

    // 調(diào)用函數(shù)生成驗(yàn)證碼并顯示在頁(yè)面上  
    generateCaptcha(Math.floor(Math.random() * 9000) + 1000, function (imgDataUrl) { });
  </script>
</body>

</html>

到此這篇關(guān)于原生JavaScript實(shí)現(xiàn)簡(jiǎn)單的圖形驗(yàn)證碼的文章就介紹到這了,更多相關(guān)JavaScript圖形驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

黑龙江省| 商河县| 潢川县| 阳信县| 德化县| 逊克县| 洪泽县| 象山县| 和田市| 本溪| 麦盖提县| 佳木斯市| 民权县| 木兰县| 江都市| 乐亭县| 富裕县| 乌苏市| 苏尼特左旗| 合水县| 甘谷县| 曲水县| 霍邱县| 阜新| 惠来县| 徐汇区| 高州市| 榆林市| 泸西县| 拜泉县| 溆浦县| 察隅县| 郧西县| 潼关县| 万荣县| 突泉县| 武邑县| 斗六市| 德钦县| 虞城县| 东阳市|