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

MySQL 8.0.15 Installations- und Konfigurations-Tutorial unter Win10

Was ich kürzlich gelernt habe, beinhaltet Kenntni...

Mehrere Möglichkeiten zum Hinzufügen von Zeitstempeln in MySQL-Tabellen

Szenario: Die Daten in einer Tabelle müssen mithi...

Verwendung des Linux-Befehls ln

1. Befehlseinführung Mit dem Befehl ln werden Lin...

Detaillierte Erklärung gängiger Befehle in MySQL 8.0+

Aktivieren Sie den Fernzugriff Aktivieren Sie die...

Verwenden Sie Typescript-Konfigurationsschritte in Vue

Inhaltsverzeichnis 1. TypeScript wird in das alte...

Installationsprozess von VMware vCenter 6.7 (grafisches Tutorial)

Hintergrund Ursprünglich wollte ich ein 6.7 Vcent...

Einführung in Jenkins und wie man Jenkins mit Docker bereitstellt

1. Verwandte Konzepte 1.1 Jenkins-Konzepte: Jenki...

So wenden Sie TypeScript-Klassen in Vue-Projekten an

Inhaltsverzeichnis 1. Einleitung 2. Verwendung 1....

js-Speicherleckszenarien, wie man sie im Detail überwacht und analysiert

Inhaltsverzeichnis Vorwort Welche Situationen kön...

Webdesign-Tutorial (8): Webseitenhierarchie und Raumgestaltung

<br />Vorheriger Artikel: Webdesign-Tutorial...

Versprechenskapselung wx.request-Methode

Im vorherigen Artikel wurde die Implementierungsm...

Auszeichnungssprache - Titel

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

CSS-Float-Eigenschaftsdiagramm, Details der Float-Eigenschaft

Die korrekte Verwendung der CSS-Float-Eigenschaft...