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

So stellen Sie MySQL-Master und -Slave in Docker bereit

Bild herunterladen Auswählen eines MySQL-Images D...

Vollständige Schritte zum Mounten einer neuen Datenfestplatte in CentOS7

Vorwort Ich habe gerade einen neuen VPS gekauft. ...

vue realisiert die Anpassung der Spaltenbreite von el-table perfekt

Inhaltsverzeichnis Hintergrund Technische Lösung ...

Verwenden von Zabbix zum Überwachen des Ogg-Prozesses (Windows-Plattform)

Dieser Artikel stellt vor, wie man das Ogg-Progra...

Über Front-End JavaScript ES6 Details

Inhaltsverzeichnis 1. Einleitung 1.1 Babel-Transc...

6 interessante Tipps zum Einstellen von CSS-Hintergrundbildern

Das Hintergrundbild ist wahrscheinlich eine diese...

CSS3-Animation zum Erzielen des Streamer-Button-Effekts

Beim Erlernen von CSS3 habe ich festgestellt, das...

Ausführliche Erklärung der Closure in JavaScript

Einführung Closure ist eine sehr leistungsstarke ...

Detaillierte Erklärung des Kopierobjekts von jQuery

<!DOCTYPE html> <html lang="de"...

Docker stellt nginx bereit und mountet Ordner und Dateioperationen

Während dieser Zeit habe ich Docker studiert und ...

Detaillierte Erklärung zum Anzeigen der MySQL-Speichernutzung

Vorwort Dieser Artikel stellt hauptsächlich die r...

CocosCreator implementiert Skill-Kühleffekt

CocosCreator realisiert Skill-CD-Effekt In vielen...