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)
Bild herunterladen Auswählen eines MySQL-Images D...
Vorwort Ich habe gerade einen neuen VPS gekauft. ...
Inhaltsverzeichnis Hintergrund Technische Lösung ...
Dieser Artikel stellt vor, wie man das Ogg-Progra...
Inhaltsverzeichnis 1. Einleitung 1.1 Babel-Transc...
1 CSS-Stil ohne Semikolon ";" 2 Tags sin...
Das Hintergrundbild ist wahrscheinlich eine diese...
Beim Erlernen von CSS3 habe ich festgestellt, das...
Einführung Closure ist eine sehr leistungsstarke ...
<!DOCTYPE html> <html lang="de"...
Während dieser Zeit habe ich Docker studiert und ...
Vorwort Dieser Artikel stellt hauptsächlich die r...
Vorwort Vor kurzem war ich damit beschäftigt, ein...
CocosCreator realisiert Skill-CD-Effekt In vielen...
Inhaltsverzeichnis 1. Vorbereitung vor der Entwic...