欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

原生JavaScript實現簡單的圖形驗證碼

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

前天接到需求要在老項目登陸界面加上驗證碼功能,因為是內部項目且無需短信驗證環(huán)節(jié),那就直接用原生js寫一個簡單的圖形驗證碼。

示例:

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

寫一個canvas標簽當容器

<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>

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

寫一個數值繪制到canvas的方法

//text為傳遞的數值
function generateCaptcha(text, callback) {
      var canvas = document.getElementById('captchaCanvas');
      var ctx = canvas.getContext('2d');
      // 設置字體及大小
      ctx.font = '100px Comic Sans MS';
      // 設置字體顏色
      ctx.fillStyle = 'rgb(' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ')';
      // 調整文字圖形位置
      ctx.textAlign = 'left';
      ctx.textBaseline = 'top';
      // 調整陰影范圍
      ctx.shadowBlur = Math.random() * 20;
      // 調整陰影顏色
      ctx.shadowColor = 'rgb(' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ')';
      // 調整陰影位置(偏移量)
      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);

    }

拿到數值調用繪制方法

此處為樣式示例,因此數值我用4位隨機數表示,實際情況為你從后端取得的值,并依靠這個值在后端判斷驗證碼是否一致。

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

監(jiān)聽標簽點擊實現點擊刷新

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

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

最后實現效果:

完整代碼演示

<!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)聽點擊更新驗證碼
    document.getElementById("captchaCanvas").addEventListener("click", function (event) {
      // 清空畫布
      document.getElementById("captchaCanvas").getContext("2d").clearRect(0, 0, 9999, 9999);
      // 調用函數生成驗證碼并顯示在頁面上  
      generateCaptcha(Math.floor(Math.random() * 9000) + 1000, function (imgDataUrl) { });
    })

    function generateCaptcha(text, callback) {
      var canvas = document.getElementById('captchaCanvas');
      var ctx = canvas.getContext('2d');
      // 設置字體及大小
      ctx.font = '100px Comic Sans MS';
      // 設置字體顏色
      ctx.fillStyle = 'rgb(' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ')';
      // 調整文字圖形位置
      ctx.textAlign = 'left';
      ctx.textBaseline = 'top';
      // 調整陰影范圍
      ctx.shadowBlur = Math.random() * 20;
      // 調整陰影顏色
      ctx.shadowColor = 'rgb(' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ', ' + Math.floor(Math.random() * 256) + ')';
      // 調整陰影位置(偏移量)
      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);

    }

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

</html>

到此這篇關于原生JavaScript實現簡單的圖形驗證碼的文章就介紹到這了,更多相關JavaScript圖形驗證碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JavaScript的防抖和節(jié)流案例

    JavaScript的防抖和節(jié)流案例

    這篇文章介紹了JavaScript的防抖和節(jié)流案例的代碼實現和概念.包含詳細的代碼,希望對你有所幫助
    2021-06-06
  • Three.js+React使二維圖片呈現3D效果

    Three.js+React使二維圖片呈現3D效果

    這篇文章主要為大家介紹了如何利用Three.js+React技術棧,將二維漫畫圖片轉化為三維視覺效果。文中的實現方法講解詳細,需要的可以參考一下
    2022-02-02
  • 微信小程序使用uni-app和springboot實現一鍵登錄功能(JWT鑒權)

    微信小程序使用uni-app和springboot實現一鍵登錄功能(JWT鑒權)

    微信一鍵登錄是指用戶在使用小程序時,可以通過微信賬號進行快速登錄,而無需額外的注冊和密碼設置,這篇文章主要給大家介紹了關于微信小程序使用uni-app和springboot實現一鍵登錄功能的相關資料,需要的朋友可以參考下
    2023-11-11
  • 原生js實現抽獎小游戲

    原生js實現抽獎小游戲

    這篇文章主要為大家詳細介紹了原生js實現抽獎小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • JavaScript編程設計模式之構造器模式實例分析

    JavaScript編程設計模式之構造器模式實例分析

    這篇文章主要介紹了JavaScript編程設計模式之構造器模式,簡單講述了構造器模式的概念、原理,并結合實例形式分析了構造器模式的定義與使用方法,需要的朋友可以參考下
    2017-10-10
  • bootstrap輸入框組件使用方法詳解

    bootstrap輸入框組件使用方法詳解

    這篇文章主要為大家詳細介紹了bootstrap輸入框組件使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • UniApp中Scroll-View設置占滿下方剩余高度的方法記錄

    UniApp中Scroll-View設置占滿下方剩余高度的方法記錄

    在使用uniapp開發(fā)項目過程中有時候會想讓一些組件占有屏幕剩余的高度,下面這篇文章主要給大家介紹了關于UniApp中Scroll-View設置占滿下方剩余高度的方法,需要的朋友可以參考下
    2023-04-04
  • 使用pdf-lib.js實現拼接兩個pdf文件并添加水印

    使用pdf-lib.js實現拼接兩個pdf文件并添加水印

    這篇文章主要為大家詳細介紹了如何使用pdf-lib.js實現拼接兩個pdf文件并添加水印,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2024-11-11
  • Math.js解決js中小數精度丟失問題

    Math.js解決js中小數精度丟失問題

    在JavaScript中進行小數運算時,會容易出現精度丟失的問題,例如在進行兩個小數相加時,結果并不是預期的精確值,而是一個近似值,,使用第三方庫Math.js可以避免精度丟失的問題,本文導入Math.js庫和使用Math.js的方法來進行小數運算,同時還可以指定格式來保留小數位數
    2023-12-12
  • JavaScript動畫函數封裝詳解

    JavaScript動畫函數封裝詳解

    動畫的原理是通過定時器setInterval() 不斷移動盒子位置。但是如果同時有好幾個元素都需要添加動畫呢?我們就可以考慮將其封裝成一個簡單的動畫函數。本文將為大家介紹如何進行封裝,需要的可以參考一下
    2021-12-12

最新評論