Vue implementiert QR-Code-Scanfunktion (mit Stil)

Vue implementiert QR-Code-Scanfunktion (mit Stil)

brauchen:
Verwenden Sie Vue, um das Scannen von QR-Codes zu realisieren.

Plugins:
QR-Code-Leser;

Plugin herunterladen

npm installieren --save vue-qrcode-reader

Beachten:
Zum Scannen des Codes kann die Kamera nur über das https-Protokoll aufgerufen werden.
Sie können devServer in vue.config.js konfigurieren: {https: true}
Oder lesen Sie den vorherigen Artikel, um das Nuxt-Framework auf dem Frontend zu verwenden, den lokalen https-Zugriff zu konfigurieren und lokale Zertifikate zu konfigurieren

Bildbeschreibung hier einfügen

<Vorlage>
  <div>
    <p class="error">{{ Fehler }}</p>
    <!--Fehlermeldung-->

    <p Klasse="Dekodierungsergebnis">
      Scan-Ergebnisse:
      {{ Ergebnis }}
    </p>
    <!--Scan-Ergebnisse-->

    <qrcode-stream @decode="beimDecoden" @init="beimInit" style="Höhe: 100vh;">
      <div>
        <div Klasse="QR-Scanner">
          <div Klasse="Box">
            <div Klasse="Zeile"></div>
            <div Klasse="Winkel"></div>
          </div>
        </div>
      </div>
    </qrcode-stream>
  </div>
</Vorlage>

<Skript>
// Laden Sie das Plugin herunter // cnpm install --save vue-qrcode-reader

// Importieren importiere { QrcodeStream } von 'vue-qrcode-reader'

Standard exportieren {
  //Komponenten registrieren: { QrcodeStream },

  Daten() {
    zurückkehren {
      result: '', // Scan-Ergebnisinformationen error: '' // Fehlermeldung }
  },

  Methoden: {
    onDecode(Ergebnis) {
      Alarm(Ergebnis)
      this.result = Ergebnis
    },

    asynchron beiInit(Versprechen) {
      versuchen {
        warten Versprechen
      } Fehler abfangen {
        if (error.name === 'Nicht zulässiger Fehler') {
          this.error = „FEHLER: Sie müssen den Kamerazugriff gewähren“
        } sonst wenn (Fehler.name === 'Nicht gefundener Fehler') {
          this.error = „FEHLER: Auf diesem Gerät ist keine Kamera vorhanden“
        } sonst wenn (Fehler.name === 'Nicht unterstützter Fehler') {
          this.error = 'FEHLER: Sicherheitskontext erforderlich (HTTPS, localhost)'
        } sonst wenn (Fehler.name === 'Nicht lesbarer Fehler') {
          this.error = 'FEHLER: Die Kamera ist belegt'
        } sonst wenn (Fehler.name === 'ÜberbeanspruchterFehler') {
          this.error = „FEHLER: Die Kamerainstallation ist ungeeignet“
        } sonst wenn (Fehler.name === 'StreamApiNotSupportedError') {
          this.error = „FEHLER: Dieser Browser unterstützt die Streaming-API nicht“
        }
      }
    }
  }
}
</Skript>

<Stilbereich>
.Fehler {
  Schriftstärke: fett;
  Farbe: rot;
}
</Stil>

<Stilbereich>
    /* * {
      Rand: 0;
      Polsterung: 0;
    }
    Körper {
      Höhe: 700px;
      Rand: 0;
    } */

    .qr-scanner {
      Hintergrundbild:
        linearer Gradient (0 Grad,
          transparent 24%,
          rgba(32, 255, 77, 0.1) 25%,
          rgba(32, 255, 77, 0.1) 26%,
          transparent 27%,
          transparent 74%,
          rgba(32, 255, 77, 0.1) 75%,
          rgba(32, 255, 77, 0,1) 76%,
          transparent 77%,
          transparent),
        linearer Gradient (90 Grad,
          transparent 24%,
          rgba(32, 255, 77, 0.1) 25%,
          rgba(32, 255, 77, 0.1) 26%,
          transparent 27%,
          transparent 74%,
          rgba(32, 255, 77, 0.1) 75%,
          rgba(32, 255, 77, 0,1) 76%,
          transparent 77%,
          transparent);
      Hintergrundgröße: 3rem 3rem;
      Hintergrundposition: -1rem -1rem;
      Breite: 100 %;
      /* Höhe: 100 %; */
      Höhe: 100vh;
      Position: relativ;
      Hintergrundfarbe: #1110;

      /* Hintergrundfarbe: #111; */
    }

    .qr-scanner .box {
      Breite: 213px;
      Höhe: 213px;
      Position: absolut;
      links: 50%;
      oben: 50 %;
      transformieren: übersetzen(-50 %, -50 %);
      Überlauf: versteckt;
      Rand: 0,1rem durchgezogen rgba(0, 255, 51, 0,2);
      /* Hintergrund: URL('http://resource.beige.world/imgs/gongconghao.png') keine Wiederholung Mitte Mitte; */
    }

    .qr-scanner .line {
      Höhe: berechnet (100 % – 2 Pixel);
      Breite: 100 %;
      Hintergrund: linearer Farbverlauf (180 Grad, RGBA (0, 255, 51, 0) 43 %, #00ff33 211 %);
      Rahmen unten: 3px durchgezogen #00ff33;
      transformieren: verschiebeY(-100%);
      Animation: Radarstrahl, 2 s, unendlich, abwechselnd;
      Animations-Timing-Funktion: kubische Bézierkurve (0,53, 0, 0,43, 0,99);
      Animationsverzögerung: 1,4 s;
    }

    .qr-scanner .box:nach,
    .qr-scanner .box:vorher,
    .qr-scanner .angle:nach,
    .qr-scanner .angle:vor {
      Inhalt: '';
      Anzeige: Block;
      Position: absolut;
      Breite: 3vw;
      Höhe: 3vw;

      Rand: 0,2rem durchgehend transparent;
    }

    .qr-scanner .box:nach,
    .qr-scanner .box:vor {
      oben: 0;
      Rahmenfarbe oben: #00ff33;
    }

    .qr-scanner .angle:nach,
    .qr-scanner .angle:vor {
      unten: 0;
      Farbe des unteren Rahmens: #00ff33;
    }

    .qr-scanner .box:vorher,
    .qr-scanner .angle:vor {
      links: 0;
      Rahmenfarbe links: #00ff33;
    }

    .qr-scanner .box:nach,
    .qr-scanner .angle:nach {
      rechts: 0;
      Rahmenfarbe rechts: #00ff33;
    }

    @keyframes Radarstrahl {
      0% {
        transformieren: verschiebeY(-100%);
      }

      100 % {
        transformieren: übersetzenY(0);
      }
    }
  </Stil>

OK, implementieren wir die Code-Scan-Funktion in einem Code-Vue-Projekt

Projektadresse: https://github.com/wkl007/vue-scan-demo.git
Das Projekt ist hauptsächlich eine Code-Scan-Funktion. Der Kerncode ist

 <div Klasse="scan">
    <div id="bcid">
      <div Stil="Höhe:40%"></div>
      <p class="tip">...Wird geladen...</p>
    </div>
    <Fußzeile>
      <button @click="startRecognize">1. Erstellen Sie ein Steuerelement</button>
      <button @click="startScan">2. Scannen starten</button>
      <button @click="cancelScan">3. Scan beenden</button>

      <button @click="closeScan">4. Schließen Sie das Steuerelement</button>
    </Fußzeile>
  </div>
</Vorlage>

<Skripttyp = "Text/ecmascript-6">
  let scan = null

  Standard exportieren {
    Daten () {
      zurückkehren {
        Code-URL: '',
      }
    },
    Methoden: {
      //Erstellen Sie ein Scan-Steuerelement startRecognize () {
        lass das = dies
        wenn (!window.plus) return
        scan = neuer plus.barcode.Barcode('bcid')
        scan.onmarked = aktiviert

        Funktion onmarked (Typ, Ergebnis, Datei) {
          Schalter (Typ) {
            Fall plus.Barcode.QR:
              Typ = "QR"
              brechen
            Etui zzgl.Barcode.EAN13:
              Typ = "EAN13"
              brechen
            Etui zzgl.Barcode.EAN8:
              Typ = "EAN8"
              brechen
            Standard:
              Typ = 'Andere' + Typ
              brechen
          }
          Ergebnis = Ergebnis.Ersetzen(/\n/g, '')
          that.codeUrl = Ergebnis
          Alarm(Ergebnis)
          dass.closeScan()

        }
      },
      // Scannen starten startScan () {
        wenn (!window.plus) return
        scannen.starten()
      },
      // Scan schließen cancelScan () {
        wenn (!window.plus) return
        scannen.abbrechen()
      },
      // Schließen Sie die Barcode-Erkennungssteuerung closeScan () {
        wenn (!window.plus) return
        scannen.schließen()
      },
    }
  }
</Skript>
<style lang="less">
  .scan {
    Höhe: 100%;

    #bcid {
      Breite: 100 %;
      Position: absolut;
      links: 0;
      rechts: 0;
      oben: 0;
      unten: 3rem;
      Textausrichtung: zentriert;
      Farbe: #fff;
      Hintergrund: #ccc;
    }

    Fußzeile {
      Position: absolut;
      links: 0;
      unten: 1rem;
      Höhe: 2rem;
      Zeilenhöhe: 2rem;
      Z-Index: 2;
    }
  }
</Stil>

Dies ist das Ende dieses Artikels über die Implementierung der Code-Scan-Funktion mit Stilen in Vue. Weitere relevante Inhalte zur Vue-Code-Scan-Funktion finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Implementierung der QR-Code-Scanfunktion über Vue
  • Vue - Beispiel für die Front-End-Generierung eines QR-Codes
  • So generieren Sie dynamisch QR-Codes in Vue
  • Vue WeChat scannt QR-Codes, aber Apple kann nur Bilder speichern (Lösung)
  • So verwenden Sie Canvas in Vue, um die Synthese von QR-Code und Bildposter zu realisieren
  • Detailliertes Verständnis der Vue-Methode zum Generieren von QR-Codes mit vue-qr

<<:  Verstehen Sie kurz die beiden gängigen Methoden zum Erstellen von Dateien im Linux-Terminal

>>:  Befehlsliste des Baota Linux-Panels

Artikel empfehlen

CSS 3.0 Text Hover Jump Spezialeffekte-Code

Hier ist ein mit CSS 3.0 implementierter Textschw...

Erste Schritte mit CSS3-Animation in 10 Minuten

Einführung Mit Animation können Sie mithilfe von ...

So verstehen Sie den Unterschied zwischen ref toRef und toRefs in Vue3

Inhaltsverzeichnis 1. Grundlagen 1.Referenz 2. to...

Erläuterung des TypeScript-Namespace

Inhaltsverzeichnis 1. Definition und Verwendung 1...

So ändern Sie schnell das Hostattribut eines MySQL-Benutzers

Wenn Sie sich remote bei MySQL anmelden, gelten f...

Zusammenfassung und Praxis des Javascript-Prototyp-Kettendiagramms

Inhaltsverzeichnis Prototypenkette Wir können ein...

Detaillierte Erklärung der wichtigsten Einzigartigkeit von v-for in Vue

Inhaltsverzeichnis 1. DOM-Diff 2. Fügen Sie Eleme...

Eine kurze Beschreibung der Beziehung zwischen k8s und Docker

In letzter Zeit verwendet das Projekt Kubernetes ...

Schritte zum Übertragen des neuen Kernels auf das Linux-System

1. Laden Sie das Ubuntu16.04-Image und den entspr...