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. IdeeIm 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 Stilewxml 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. InitialisierungDa 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 KlickenKomponente({ //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. UnterschriftKomponente({ //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(); } } }) AbschlussDiese 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:
|
<<: Awk-Befehlszeile oder Skript, das Ihnen beim Sortieren von Textdateien hilft (empfohlen)
Liste der HTML-Tags markieren Typ Name oder Bedeu...
Vorwort Das Docker-Image kann nicht gelöscht werd...
Einführung Memcached ist ein verteiltes Caching-S...
In diesem Artikel wird der spezifische Code von V...
Problembeschreibung Ich möchte CSS verwenden, um ...
MySQL-Passwort ist korrekt, aber keine lokale Anm...
TOP-Beobachtung: Der Prozentsatz der CPU-Zeit, de...
1. Holen Sie sich das MySQL-Image Docker-Pull MyS...
Als PHP7 herauskam, habe ich als Fan der neuesten...
Code kopieren Der Code lautet wie folgt: <a hr...
Unter Ubuntu kommt es häufig vor, dass sich das T...
In diesem Artikel wird der spezifische Code für J...
Schauen wir uns zunächst die grundlegende Syntax ...
Inhaltsverzeichnis 1. Vue-Installation Methode 1:...
Beschreibung: Ändern Sie den Wagenrücklauf im Text...