Vueはグラフィック検証コードを実装する

Vueはグラフィック検証コードを実装する

この記事の例では、グラフィック検証コードを実装するためのVueの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

効果画像:

または

または

または

コード:

検証コードのコンポーネント:

src/common/sIdentify.vue

<テンプレート>
  <div class="s-canvas">
    <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas>
  </div>
</テンプレート>
<スクリプト>
  エクスポートデフォルト{
    名前: 'SIdentify',
    小道具: {
      識別コード:
        タイプ: 文字列、
        デフォルト: '1234'
      },
      フォントサイズ最小: {
        タイプ: 数値、
        デフォルト: 18
      },
      フォントサイズ最大: {
        タイプ: 数値、
        デフォルト: 40
      },
      背景色最小: {
        タイプ: 数値、
        デフォルト: 180
      },
      背景色最大: {
        タイプ: 数値、
        デフォルト: 240
      },
      色最小:
        タイプ: 数値、
        デフォルト: 50
      },
      色最大値: {
        タイプ: 数値、
        デフォルト: 160
      },
      ラインカラー最小: {
        タイプ: 数値、
        デフォルト: 40
      },
      ラインカラー最大: {
        タイプ: 数値、
        デフォルト: 180
      },
      ドットカラー最小: {
        タイプ: 数値、
        デフォルト: 0
      },
      ドットカラーマックス: {
        タイプ: 数値、
        デフォルト: 255
      },
      コンテンツ幅: {
        タイプ: 数値、
        デフォルト: 111
      },
      コンテンツの高さ: {
        タイプ: 数値、
        デフォルト: 38
      }
    },
    メソッド: {
      // 乱数を生成する randomNum(min, max) {
        Math.floor(Math.random() * (max - min) + min) を返します。
      },
      // ランダムな色を生成する randomColor(min, max) {
        r = this.randomNum(最小値, 最大値) とします。
        g = this.randomNum(min, max) とします。
        b = this.randomNum(最小値, 最大値) とします。
        'rgb(' + r + ',' + g + ',' + b + ')' を返します
      },
      描画画像() {
        キャンバス = document.getElementById('s-canvas') とします。
        ctx = canvas.getContext('2d') とします。
        ctx.textBaseline = '下'
        // 背景を描画します ctx.fillStyle = this.randomColor(this.backgroundColorMin, this.backgroundColorMax)
        ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)
        // テキストを描画する for (let i = 0; i < this.identifyCode.length; i++) {
          this.drawText(ctx, this.identifyCode[i], i)
        }
        // this.drawLine(ctx) // 干渉線を描画 // this.drawDot(ctx) // 干渉点を描画},
      // テキストを描画する drawText(ctx, txt, i) {
        ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax)
        ctx.font = this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'
        x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1)) とします。
        y = this.randomNum(this.fontSizeMax, this.contentHeight - 5) とします。
        var deg = this.randomNum(-30, 30) // 文字の回転角度(45度以下が望ましい)
        // 座標原点と回転角度を変更する ctx.translate(x, y)
        ctx.rotate(度 * Math.PI / 180) です。
        ctx.fillText(txt, 0, 0)
        // 座標原点と回転角度を復元します ctx.rotate(-deg * Math.PI / 180)
        ctx.translate(-x, -y)
      },
      描画線(ctx) {
        // 干渉線を描く for (let i = 0; i < 8; i++) {
          ctx.strokeStyle = this.randomColor(this.lineColorMin、this.lineColorMax)
          ctx.beginPath()
          ctx.moveTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
          ctx.lineTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
          ctx.ストローク()
        }
      },
      描画ドット(ctx) {
        // 干渉点を描画する for (let i = 0; i < 100; i++) {
          ctx.fillStyle = this.randomColor(0, 255)
          ctx.beginPath()
          ctx.arc(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight), 1, 0, 2 * Math.PI)
          ctx.fill()
        }
      }
    },
    時計:
      識別コード() {
        この.drawPic()
      }
    },
    マウント() {
      この.drawPic()
    }
  }
</スクリプト>

親コンポーネント

<テンプレート>
  <div>
    <div>検証コードテスト</div>
    <div @click="refreshCode()" class="code" style="cursor:pointer;" title="クリックして確認コードを切り替えます">
      <s-identify :identifyCode="identifyCode"></s-identify>
    </div>
  </div>
</テンプレート>

<スクリプト>
'vue' から defineComponent をインポートします。
"@/common/sIdentify.vue" から sIdentify をインポートします。
// 'axios' から axios をインポート
エクスポートデフォルトdefineComponent({
  名前: 'WatermarkTest'、
  コンポーネント: { sIdentify },
  データ() {
    戻る {
      識別コード: "",
      identifyCodes: ['0','1','2','3','4','5','6','7','8','9','a','b','c','d'], //実際のニーズに応じて必要な文字を追加します}
  },
  マウント() {
    this.refreshCode()
 },
 アンマウント() {

 },
  メソッド: {
    // 乱数を生成する randomNum(min, max) {
      最大値 = 最大値 + 1
      Math.floor(Math.random() * (max - min) + min) を返します。
    },
    // 検証コードを更新する refreshCode() {
      this.identifyCode = "";
      this.makeCode(this.identifyCodes, 4);
      console.log('現在の検証コード:',this.identifyCode);
    },
    // 検証コードをランダムに生成する string makeCode(data, len) {
      console.log('データ, 長さ:', データ, 長さ)
      (i = 0; i < len; i++) の場合 {
        this.identifyCode += this.identifyCodes[this.randomNum(0, this.identifyCodes.length-1)]
      }
    },
  },
});
</スクリプト>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue検証コードの60秒カウントダウン機能の簡単な実装
  • vueは携帯電話経由でSMS認証コードを送信する登録機能を実装します
  • Vueはランダムな検証コードサンプルコードを生成します
  • Vue+element-uiはランダム検証コード+ユーザー名+パスワードフォーム検証機能を統合します
  • VUEは画像検証コード機能を実装
  • Vue にモバイル検証コードコンポーネント機能を追加する方法
  • Vueは検証コード入力ボックスコンポーネントを実装します
  • Vue がスライディングパズル検証コード機能を実装
  • Vueプロジェクトがグラフィック検証コードを実装
  • Vueはログイン時に画像認証コードを実装します

<<:  MySQLの遅いクエリ問題の詳細な分析データ送信

>>:  画像の盗難を防ぐために Nginx で Referer を設定する方法

推薦する

MySQLが大量のデータを処理する際にクエリ速度を最適化するいくつかの方法

実際に参加したプロジェクトでは、MySQL テーブルのデータ量が数百万に達すると、通常の SQL ク...

一般的な docker コマンドの概要 (推奨)

1. 要約:一般的に、次のカテゴリに分類できます。 Docker 環境情報 — docker [i...

Dockerでの接続例外中のエラーを解決する

Docker を初めて使い始めると、通常とは異なる問題に遭遇して、必然的に混乱してしまいます。大丈夫...

docker で zabbix_agent をデプロイする方法

zabbix_agent のデプロイメント:推奨事項: zabbix_agent は docker-...

Docker で Node.js をデプロイする方法

序文プロジェクトでは中間層としてNodeを使用し、Nodeのデプロイにはdockerを使用します。こ...

JSに関する7つの面接の質問、あなたはいくつ正しく答えられますか

序文JavaScript では、これは関数呼び出しコンテキストです。この動作が非常に複雑であるからこ...

Mybatis+mysqlはストアドプロシージャを使用してシリアル番号実装コードを生成します。

同時操作によるデータの重複を避けるために、データベースを操作するときにストアドプロシージャを使用して...

Dockerは元のタグのイメージの再タグ付けと削除を実装します

docker イメージ ID は一意であり、イメージを物理的に識別できます。repository: ...

JavaScriptはeコマースプラットフォームの製品詳細を実装します

この記事では、電子商取引プラットフォームで商品の詳細を表示する一般的な例を紹介します。たとえば、ある...

Vue3.0 における Ref と Reactive の違いの詳細な分析

目次参照と反応参照反応的RefとReactiveの違いshallowRef と shallowRea...

Typescript の as、疑問符、感嘆符の詳細な説明

1. asキーワードはアサーションを示すTypescript では、アサーションを表現する方法が 2...

MySql ページングで limit+order by を使用する場合のデータ重複の解決策

目次まとめ問題の説明問題を分析する問題を解決するまとめ複雑な知識をシンプルに説明できることは重要です...

VueにおけるAxios非同期通信の詳細な説明

1. まず、インタラクティブに使用するための .json ファイルを作成します。json データ形式...

Docker で Python スクリプトを実行する方法

まず、Docker イメージ用の特定のプロジェクト ディレクトリを作成します。例: mkdir /h...

Linuxパフォーマンス監視コマンドの簡単な紹介

システムでさまざまな IO ボトルネック、メモリ使用量の増加、CPU 使用率の増加などの問題が発生し...