Vue を通じて QR コードスキャン機能を実装する

Vue を通じて QR コードスキャン機能を実装する

ヒント

このプラグインは https プロトコルでのみアクセスできます。http プロトコルはうまく機能しません。vue3 はエラーが発生しやすいため、vue2 を使用することをお勧めします。 ! ! ! !

説明する

vueでコードスキャン機能を実現する

参考ドキュメント: vue-qrcode-reader 公式サイトへ移動 –> 公式ドキュメント

エフェクト表示

ここに画像の説明を挿入

実装手順:

ステップ1(プラグインをインストールする)

npm インストール --save vue-qrcode-reader

ステップ 2 (コンポーネントの作成)

複数ページで使用される可能性があるため、コンポーネント化します(1)srcの下のcomponentsにqrcode.vueを作成します
(2)コードの実装

// qrcode.vue
<テンプレート>
  <div>
      <!-- <p class="error">{{ エラー }}</p> -->
      <!--エラーメッセージ-->

      <!-- <p class="decode-result">
          スキャン結果:
          {{ 結果 }}
      </p> -->
      <!--スキャン結果-->
      <!-- <p @click="openCamera">カメラを開く</p>
      <div v-show="表示" class="カメラメッセージ">
          <p @click="closeCamera">カメラを閉じる</p>
          <p @click="openFlash">懐中電灯を開く</p>
          <p @click="switchCamera">カメラ反転</p>
      </div> -->

      <qrコードストリーム
          v-show="qrコード"
          :camera="カメラ"
          :torch="トーチアクティブ"
          @decode="デコード中"
          @init="onInit"
      >
          <div>
              <div class="qr-scanner">
                  <div class="box">
                      <div class="line"></div>
                      <div class="angle"></div>
                  </div>
                  <div class="txt">
                      QR コード/バーコードをボックスに入れると、<div class="myQrcode">My QR code</div> が自動的にスキャンされます。
                  </div>
              </div>
          </div>
      </qrcode-stream>
  </div>
</テンプレート>

<スクリプト>
// プラグインをダウンロード // cnpm install --save vue-qrcode-reader

// インポート import { QrcodeStream } from 'vue-qrcode-reader';

エクスポートデフォルト{
  // コンポーネントを登録: { QrcodeStream },

  データ() {
      戻る {
          結果: '', // スキャン結果情報 error: '', // エラーメッセージ // 表示: false,
          // QRコード: false,
          QRコード: 真、
          torchActive: false、
          カメラ: '前面'、
      };
  },

  メソッド: {
      onDecode(結果) {
          console.log(結果);
          this.result = 結果;
      },
      非同期 onInit(promise) {
          const { 機能 } = promise を待機します。

          TORCH_IS_SUPPORTED はサポートされています。
          試す {
              約束を待つ;
          } キャッチ(エラー){
              if (error.name === 'NotAllowedError') {
                  this.error = 'エラー: カメラへのアクセスを許可する必要があります';
              } それ以外の場合 (error.name === 'NotFoundError') {
                  this.error = 'エラー: このデバイスにはカメラがありません';
              } それ以外の場合 (error.name === 'NotSupportedError') {
                  this.error = 'エラー: セキュリティ コンテキストが必要です (HTTPS、localhost)';
              } それ以外の場合 (error.name === 'NotReadableError') {
                  this.error = 'エラー: カメラが使用されています';
              } そうでない場合 (error.name === 'OverconstrainedError') {
                  this.error = 'エラー: カメラのインストールが不適切です';
              } そうでない場合 (error.name === 'StreamApiNotSupportedError') {
                  this.error = 'エラー: このブラウザはストリーム API をサポートしていません';
              }
          }
      },
      // カメラを開く // openCamera() {
      // this.camera = 'リア'
      // this.qrcode = true
      // this.show = true
      // },
      // カメラを閉じる // closeCamera() {
      // this.camera = 'オフ'
      // this.qrcode = false
      // this.show = false
      // },
      // 懐中電灯をオンにする // openFlash() {
      // スイッチ (this.torchActive) {
      // 真のケース:
      // this.torchActive = false
      // 壊す
      // 偽の場合:
      // this.torchActive = true
      // 壊す
      // }
      // },
      // カメラ反転 // switchCamera() {
      // // console.log(this.camera);
      // スイッチ (this.camera) {
      // ケース 'front':
      // this.camera = 'リア'
      // コンソールログ(このカメラ)
      // 壊す
      // ケース '背面':
      // this.camera = 'front'
      // コンソールログ(このカメラ)
      // 壊す
      // }
      // }
  },
};
</スクリプト>
<スタイルスコープ>
。エラー {
  フォントの太さ: 太字;
  色: 赤;
}
.カメラメッセージ{
  幅: 100%;
  高さ: 60px;
}
.qrスキャナー{
  背景画像: 線形グラデーション(
          0度、
          透明 24%、
          RGBA(32, 255, 77, 0.1) 25%,
          RGBA(32, 255, 77, 0.1) 26%,
          透明 27%、
          透明度74%、
          RGBA(32, 255, 77, 0.1) 75%,
          RGBA(32, 255, 77, 0.1) 76%,
          透明度77%、
          透明
      )、
      線形グラデーション(
          90度、
          透明 24%、
          RGBA(32, 255, 77, 0.1) 25%,
          RGBA(32, 255, 77, 0.1) 26%,
          透明 27%、
          透明度74%、
          RGBA(32, 255, 77, 0.1) 75%,
          RGBA(32, 255, 77, 0.1) 76%,
          透明度77%、
          透明
      );
  背景サイズ: 3rem 3rem;
  背景位置: -1rem -1rem;
  幅: 100%;
  /* 高さ: 100%; */
  高さ:100vh;
  /* 高さ: 288px; */
  位置: 相対的;
  背景色: #1110;

  /* 背景色: #111; */
}
/* .qrcode-stream-wrapper {
  ディスプレイ: フレックス;
  コンテンツの中央揃え: 中央;
  アイテムの位置を中央揃えにします。
  上マージン: 82px;
  クリア: 両方;
} */
/* .qrcode-stream-wrapper >>> .qrcode-stream-camera {
  幅: 213px;
  高さ: 210px;
  クリア: 両方;
  上マージン: 39px;
} */
.qr-スキャナー .box {
  幅: 213px;
  高さ: 213px;
  位置: 絶対;
  左: 50%;
  上位: 50%;
  変換: translate(-50%, -50%);
  オーバーフロー: 非表示;
  境界線: 0.1rem実線rgba(0, 255, 51, 0.2);
  /* 背景: url('http://resource.beige.world/imgs/gongconghao.png') 繰り返しなし 中央 中央; */
}
.qr-スキャナー .txt {
  幅: 100%;
  高さ: 35px;
  行の高さ: 35px;
  フォントサイズ: 14px;
  テキスト配置: 中央;
  /* 色: #f9f9f9; */
  マージン: 0 自動;
  位置: 絶対;
  上位:70%
  左: 0;
}
.qr-scanner .myQrcode {
  テキスト配置: 中央;
  色: #00ae10;
}
.qr-スキャナー .line {
  高さ: calc(100% - 2px);
  幅: 100%;
  背景: linear-gradient(180deg, rgba(0, 255, 51, 0) 43%, #00ff33 211%);
  下境界線: 3px 実線 #00ff33;
  変換: translateY(-100%);
  アニメーション: レーダービーム 2 秒無限交互;
  アニメーションタイミング関数: 立方ベジェ(0.53, 0, 0.43, 0.99);
  アニメーション遅延: 1.4秒;
}

.qr-scanner .box:after、
.qr-scanner .box:before,
.qr-scanner .angle:after,
.qr-scanner .angle:before {
  コンテンツ: '';
  表示: ブロック;
  位置: 絶対;
  幅: 3vw;
  高さ: 3vw;

  境界線: 0.2rem 透明実線;
}

.qr-scanner .box:after、
.qr-スキャナー .box:before {
  上: 0;
  上の境界線の色: #00ff33;
}

.qr-scanner .angle:after,
.qr-scanner .angle:before {
  下部: 0;
  境界線下部の色: #00ff33;
}

.qr-scanner .box:before,
.qr-scanner .angle:before {
  左: 0;
  左境界線の色: #00ff33;
}

.qr-scanner .box:after、
.qr-scanner .angle:after {
  右: 0;
  右境界線の色: #00ff33;
}

@keyframes レーダービーム {
  0% {
      変換: translateY(-100%);
  }

  100% {
      変換: translateY(0);
  }
}
</スタイル>

(3)スキャンコードが必要なページで紹介

// 
'@/components/qrcode.vue' から qrcode をインポートします。

(4)コンポーネントの登録

// 
コンポーネント:
        'vue-qrcode': qrコード、
    },

(5)コンポーネントの使用

// QR コードを表示する場所をレンダリングします <vue-qrcode />
//上記が機能しない場合は、次の <vue-qrcode></vue-qrcode> を使用できます。

Vue の QR コードスキャン機能に関するこの記事はこれで終わりです。Vue の QR コードスキャンに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue は QR コード スキャン機能を実装します (スタイル付き)
  • Vue - QR コードのフロントエンド生成の例
  • VueでQRコードを動的に生成する方法
  • Vue WeChat は QR コードをスキャンしますが、Apple は画像しか保存できません (解決策)
  • Vueのキャンバスを使ってQRコードと画像ポスターの合成を実現する方法
  • vue-qr を使用して Vue の QR コードを生成する方法について深く理解する

<<:  HTML と埋め込み Flash の両方におけるスクロールバーの分析と処理

>>:  MySQL PXC クラスターの構築方法

推薦する

Nginx シグナル制御

Nginx の紹介Nginx は、高性能な HTTP およびリバース プロキシ サーバーであり、IM...

モバイル アプリのユーザー インターフェース設計に関する 10 のヒント

ヒント1: 集中力を保つ最高のモバイル アプリは、1 つのことを非常にうまく行うことに重点を置いてい...

Vueベースのビデオプレーヤーの実装例

既存のビデオ プレーヤーがニーズを満たせない場合は、ビデオを自分でカプセル化する必要があります。ビデ...

Unicode署名BOMによる事故原因の分析

ここでは、通常ヘッダーとフッターに対して行われるインクルード ファイルを使用している可能性があります...

jsはキャンバスに基づいて時計コンポーネントを実装します

圧縮アップロード画像、スクラッチカード、ポスター作成、チャートプラグインなど、フロントエンド開発にお...

Angularが予期しない例外エラーを処理する方法の詳細な説明

前面に書かれたコードがどれだけ適切に記述されていても、すべての可能性のある例外を完全に処理することは...

Vue で Excel インポート機能を実装する詳細な手順

1. フロントエンド主導の実装手順最初のステップは、ページのインポートボタンをクリックしてExcel...

キャンバスをベースにした超クールな水光効果を実現

この記事の例では、キャンバスをベースにした超クールな水の光の効果を実装するための具体的なコードを参考...

MySQLのスレッド実行の急増とクエリの遅延の問題を解決する

目次背景問題の説明原因分析CPUクエリが遅い接続数分析する拡大する総括する背景新年を迎える前は、一年...

Docker はすべてのコンテナをバッチ起動して閉じます

Dockerの場合すべてのコンテナコマンドを開始する docker を起動します $(docker ...

CentOS8でのDockerの使い方の詳しい説明

1. CentOS8でのDockerのインストール カール https://download.doc...

Linux ssh サービス情報と実行ステータスを表示する方法

Linux での ssh サービス構成など、ssh サーバー構成に関する記事は多数あります。ここでは...

CentOS 7 はネットワークカードを変更した後、インターネットにアクセスできません

不明なドメイン名 www.baidu.com を Ping するホストのIPアドレスを変更する右クリ...

MySQL LOAD_FILE() 関数メソッドの概要

MySQL では、LOAD_FILE() 関数はファイルを読み取り、その内容を文字列として返します。...

ウェブページでよく使用される共有コードの完全なリスト(フロントエンドに必須)

コードをコピーコードは次のとおりです。 1. 新浪微博<a href="http:/...