Das WeChat-Applet implementiert eine einfache handschriftliche Signaturkomponente

Das WeChat-Applet implementiert eine einfache handschriftliche Signaturkomponente

Hintergrund:

Im Rahmen des Projekts ist es notwendig, eine Komponente für handschriftliche Signaturen im WeChat-Applet zu implementieren. Ich habe im Internet nach WeChat-Miniprogrammen zur Implementierung handschriftlicher Signaturen gesucht, aber die Ergebnisse waren nicht optimal. In der tatsächlichen Anwendung kann es aufgrund der Echtzeitberechnung einer großen Anzahl von Bézierkurven zu Verzögerungen kommen. Die Wirkung ist nicht optimal. Wenn wir also einen Schritt zurückgehen, besteht keine Notwendigkeit für Effekte zur Simulation von Stiftspitze und Handschrift. Alles was dazu nötig ist, ist eine einfache handschriftliche Unterschrift.

brauchen:

Es ermöglicht Benutzern, handschriftliche Unterschriften in WeChat-Miniprogrammen zu verfassen.

Muss in Komponenten unterteilt werden.

Wirkung

1. Idee

Im WeChat-Applet verwenden wir die Canvas-Komponente, um es zu implementieren. Stellen Sie sich die Benutzereingabe als einen Stift vor. Die Signatur, die wir zeichnen werden, besteht aus vielen Punkten. Einfache Punkte können jedoch nicht sehr gut eine Linie bilden. Die Punkte müssen außerdem durch Linien verbunden sein. Nachfolgend sehen Sie den Implementierungscode.

2. Umsetzung

1. Seiten und Stile

wxml

Die Canvas-Komponente ist hier die neueste Verwendung.

<Klasse anzeigen="dashbox">
  <Klasse anzeigen="btnList">
    <van-button size="small" bind:click="clearCanvas">Löschen</van-button>
  </Ansicht>
  <Ansichtsklasse="handCenter">
    <Leinwand 
      Klasse = "Handschrift" 
      Scrollen deaktivieren="{{true}}" 
      id="Handschrift"
      bindtouchstart="SkalierungStart"
      bindtouchmove="ScaleMove" 
      bindtouchend="scaleEnd"
      bindtap="Maus nach unten"
      Typ="2d"
    >
    </Leinwand>
  </Ansicht>
</Ansicht>

wxss

.btnList{
    Breite: 95 %;
    Rand: 0 automatisch;
}
.Handschrift{
    Hintergrund: #fff;
    Breite: 95 %;
    Höhe: 80vh;
    margin:0 automatisch
}

2. Initialisierung

Da es in einer benutzerdefinierten Komponente verwendet wird, achten Sie beim Abrufen der Leinwand auf dieses Zeigeproblem. Wenn Sie die In-Methode von SelectorQuery nicht aufrufen, können Sie die Zeichenfläche in der benutzerdefinierten Komponente nicht abrufen, da sie zu diesem Zeitpunkt auf die übergeordnete Komponente verweist.

Komponente({
 /**
 * Ausgangsdaten der Komponente */
    Daten: {
        Leinwandname: '#handWriting',
        ctx:'',
        Leinwandbreite: 0,
        Leinwandhöhe: 0,
        Startpunkt: {
            x:0,
            y:0,
        },
        Farbe auswählen: 'schwarz',
        Linienfarbe: '#1A1A1A', // Farbe Liniengröße: 1,5, // Mehrfachradius beachten: 5, // Radius des Kreises}, 
    bereit(){
        let canvasName = this.data.canvasName;
        let query = wx.createSelectorQuery().in(this); //Holen Sie sich das SelectQuery-Objekt der benutzerdefinierten Komponente query.select(canvasName)
        .fields({ Knoten: wahr, Größe: wahr })
        .exec((res) => {
          Konstanten Leinwand = res[0].node;
          const ctx = canvas.getContext('2d');
          //Gerätepixelverhältnis abrufen const dpr = wx.getSystemInfoSync().pixelRatio;
          //Skalieren und stellen Sie die Leinwandgröße ein, um eine Verschiebung der Handschrift zu verhindern canvas.width = res[0].width * dpr;
          Leinwand.Höhe = res[0].Höhe * dpr;
          ctx.scale(dpr, dpr);
          ctx.lineJoin="Runde";
          dies.setData({ctx});
        });
  
        Abfrage.Select('.handCenter').boundingClientRect(rect => {
            Konsole.log('Rechteck', Rechteck);
            dies.setData({
                Leinwandbreite:rechteck.Breite,
                Leinwandhöhe:rechteck.höhe
            });
        }).exec();
    },
   //Den folgenden Code weglassen...
});

3. Beim Klicken

Komponente({
 //Den obigen Code weglassen...
 Methoden: {
            scaleStart(Ereignis){
                wenn (Ereignistyp != 'touchstart') false zurückgibt;
                lass aktuellenPunkt = {
                    x: Ereignis.berührt[0].x,
                    y: Ereignis.berührt[0].y
                }
                dies.drawCircle(aktuellerPunkt);
                dies.setData({startPoint:currentPoint});
          },
            drawCircle(point){//Hier ist für den Punkt verantwortlich let ctx = this.data.ctx;
                ctx.beginPath();
                ctx.fillStyle = diese.Daten.Linienfarbe;
            //Die Dicke der Handschrift wird durch die Größe des Kreises bestimmt ctx.arc(point.x, point.y, this.data.radius, 0 , 2 * Math.PI);
                ctx.fill();
                ctx.closePath();
          },
          //Den folgenden Code weglassen...
 }
})

4. Unterschrift

Komponente({
  //Lassen Sie die obigen Codemethoden weg:{
 zeichneLinie(Quellpunkt, Zielpunkt){
            lass ctx = diese.Daten.ctx;
            dies.drawCircle(Zielpunkt);
            ctx.beginPath();
            ctx.strokeStyle = diese.Daten.Linienfarbe;
            ctx.lineWidth = this.data.radius * 2; //Der Grund für die Multiplikation mit 2 besteht hier darin, dass die Dicke der Linie dem Durchmesser des Kreises entsprechen soll ctx.moveTo(sourcePoint.x, sourcePoint.y);
            ctx.lineTo(Zielpunkt.x, Zielpunkt.y);
            ctx.stroke();
            ctx.closePath();
          },
          clearCanvas(){//Leinwand löschen let ctx = this.data.ctx;
            ctx.rect(0, 0, Breite dieser.Daten.Leinwand, Höhe dieser.Daten.Leinwand);
            ctx.fillStyle = "#FFFFFF";
            ctx.fill();
          }
  }
})

Abschluss

Diese handschriftliche Unterschrift ist ausschließlich für geschäftliche Notfälle bestimmt. Wer optimieren möchte, kann mit der Stiftstrich- und Handschriftsimulation beginnen. Das einzige Problem, das gelöst werden muss, ist die Verzögerung während der Echtzeitsimulation.

Dies ist das Ende dieses Artikels über die Implementierung einer einfachen handschriftlichen Signaturkomponente im WeChat Mini-Programm. Weitere relevante Inhalte zur handschriftlichen Signaturkomponente des WeChat Mini-Programms finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Uniapp implementiert den elektronischen Signatureffekt des WeChat-Applets (mit Demo)
  • Beispielcode zur Implementierung einer handschriftlichen Signatur im WeChat-Applet
  • WeChat-Miniprogramm zur Implementierung elektronischer Signaturen
  • WeChat-Applet-Canvas implementiert Signaturfunktion
  • Das WeChat Mini-Programm implementiert die Funktion für elektronische Signaturen
  • WeChat-Applet implementiert elektronische Signatur und exportiert Bilder
  • Java hat bei WeChat-Applet die Problemlösung „Zahlungsüberprüfungssignatur fehlgeschlagen“ festgestellt
  • Überprüfung und Entschlüsselungscode für die Benutzerdatensignatur des .NET WeChat-Applets
  • Das WeChat-Applet implementiert die horizontale und vertikale Bildschirmsignaturfunktion

<<:  Awk-Befehlszeile oder Skript, das Ihnen beim Sortieren von Textdateien hilft (empfohlen)

>>:  Lösen Sie das Problem, dass der Node.js MySQL-Client das Authentifizierungsprotokoll nicht unterstützt

Artikel empfehlen

Liste der HTML-Tags und Hinweise zur Verwendung

Liste der HTML-Tags markieren Typ Name oder Bedeu...

Detaillierte Erklärung der Mencached-Cache-Konfiguration basierend auf Nginx

Einführung Memcached ist ein verteiltes Caching-S...

Vue macht Div-Höhe verschiebbar

In diesem Artikel wird der spezifische Code von V...

MySQL-Passwort ist korrekt, aber keine lokale Anmeldung möglich -1045

MySQL-Passwort ist korrekt, aber keine lokale Anm...

So verwenden Sie iostat zum Anzeigen der IO-Leistung von Linux-Festplatten

TOP-Beobachtung: Der Prozentsatz der CPU-Zeit, de...

Verwenden einer MySQL-Datenbank im Docker, um LAN-Zugriff zu erhalten

1. Holen Sie sich das MySQL-Image Docker-Pull MyS...

Ubuntu 18.04 Touchpad per Befehl deaktivieren/aktivieren

Unter Ubuntu kommt es häufig vor, dass sich das T...

JavaScript zum Erzielen eines dynamischen Tabelleneffekts

In diesem Artikel wird der spezifische Code für J...

Eine kurze Analyse der MySQL PHP-Syntax

Schauen wir uns zunächst die grundlegende Syntax ...

Installation und Verwendung von Vue

Inhaltsverzeichnis 1. Vue-Installation Methode 1:...