In diesem Artikelbeispiel wird der spezifische Code von JS Canvas zur Implementierung der Slider-Verifizierung zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt Slider-Validierung Ohne weitere Umschweife werde ich zuerst den Code veröffentlichen. Freunde, die ihn verwenden möchten, können ihn direkt verwenden. Wenn Sie ihn verstehen möchten, werde ich Ihnen später meine Ideen mitteilen. <Vorlage> <div Klasse="SchiebereglerInhalt"> <div Klasse="imgDev" :style="'Breite:' + Breite + 'px;'"> <canvas :id="id" :width="Breite" :height="Höhe"></canvas> <Leinwand Klasse="Schieberegler" :id="id + 'SchiebereglerBlock'" :width="Breite" :Höhe="Höhe" :Stil="'links:' + SchiebereglerLinks + 'px;'" ></Leinwand> </div> <div Klasse="moveSLider" :style="'Breite:' + Breite + 'px'"> <div Klasse="reagieren" @mousedown.stop="Ball bewegen($event)"> <div Klasse="Yuan" :Stil="'links:' + (Schieberegler links + 10) + 'px;'" ></div> </div> </div> </div> </Vorlage> <Skript> Standard exportieren { Daten() { zurückkehren { width: 200, //Boxbreite height: 200, //Boxhöhe. Dieser Parameter funktioniert nicht, wenn das Originalverhältnis des Bildes eingestellt ist. id: new Date().getTime(), r: 9, //Der Radius des Halbkreises w: 40, //Die Breite des Schiebereglers imgOriginalScale: true, //Gibt an, ob das Bild im Originalmaßstab angezeigt wird sliderLeft: 0, //Die Anfangsposition des Schiebereglers rangeValue:4, //In welchem Bereich gilt der Schieberegler als richtig, wenn er sich darin befindet imgsrc:require("../assets/img/ver-2.png") //Fügen Sie das gewünschte Hintergrundbild ein }; }, montiert() { dies.init(); }, Methoden: { init() { dies.loadImage(); }, loadImage() {//Bild laden let mainDom = document.getElementById(this.id); let bg = mainDom.getContext("2d"); let blockDom = document.getElementById(this.id + "sliderBlock"); let block = blockDom.getContext("2d"); lass imgsrc = diese.imgsrc; let img = document.createElement("img"); img.style.objectFit = "verkleinern"; img.src = imgsrc; img.onload = () => { wenn (this.imgOriginalScale) { //Berechnen Sie die ursprüngliche Proportion des Bildes basierend auf der Größenänderung des Bildes mainDom.height = (img.height / img.width) * mainDom.width; blockDom.height = (Bildhöhe / Bildbreite) * blockDom.width; } bg.drawImage(img, 0, 0, mainDom.width, mainDom.height); this.drawBlock(bg, mainDom.width, mainDom.height, "fill"); //Den Schiebereglerteil zeichnen this.drawBlock(block, blockDom.width, blockDom.height, "clip", img); //Den Schiebereglerteil zeichnen Beachten Sie, dass Sie zuerst ausschneiden und dann das Bild zeichnen müssen (das Bild muss hier übergeben werden, sonst gibt es keine Möglichkeit, es zu steuern) }; }, drawBlock(ctx, width, height, type, img) { //Dies ist eine Zwei-in-Eins-Funktion, die den Schattenteil zeichnen und die Puzzleform ausschneiden kann let { w, r, sliderLeft } = this; //Hier werden Zufallszahlen verwendet und die Anzeigeposition ist jedes Mal anders var x = this.random(30, width - w - r - 1); //Hier soll der Maximalwert verhindern, dass der Schieberegler ausgeblendet wird, daher sollte die Breite des Schiebereglers abgezogen werden. Es gibt einen Halbkreis, daher sollte die Halbkreisposition abgezogen werden var y = this.random(10, height - w - r - 1); if (Typ == "Clip") {//Hier müssen wir sicherstellen, dass beide Objekte den gleichen Y-Wert haben x = sliderLeft; y = dies.y; } anders { dies.x = x; dies.y = y; } sei PI = Math.PI; //Zeichnen Sie ctx.beginPath(); //links ctx.moveTo(x, y); //Spitze ctx.arc(x + (w + 5) / 2, y, r, -PI, 0, wahr); ctx.lineTo(x + w + 5, y); //Rechts ctx.arc(x + w + 5, y + w / 2, r, 1,5 * PI, 0,5 * PI, falsch); ctx.lineTo(x + w + 5, y + w); //unten ctx.arc(x + (w + 5) / 2, y + w, r, 0, PI, falsch); ctx.lineTo(x, y + w); ctx.arc(x, y + w / 2, r, 0,5 * PI, 1,5 * PI, wahr); ctx.lineTo(x, y); wenn (Typ == "Clip") { ctx.shadowBlur = 10; ctx.shadowColor = "schwarz"; } ctx.Linienbreite = 1; ctx.fillStyle = "rgba(0, 0, 0, 0.4)"; //Hintergrundfarbe festlegen ctx.stroke(); ctx[Typ](); wenn (img) { ctx.drawImage(img, -this.x, 0, Breite, Höhe); } ctx.globalCompositeOperation = "xor"; }, Zufall(min, max) { gibt parseInt zurück (Math.floor (Math.random () * (max - min)) + min); }, moveBall(e) {//Wenn Sie auf den kleinen roten Ball klicken, var oldx = e.pageX; document.onmousemove = (e) => {//Hier müssen Sie das Dokumentobjekt binden, sonst wird es sich nicht bewegen, wenn Sie es verlassen. var x = e.pageX; if(this.sliderLeft+x-oldx<=0){//Beurteile hier die linke Grenze this.sliderLeft = 0; }else if(this.sliderLeft+x-oldx>=this.width-this.r*2-this.w){//Beurteile hier die rechte Grenze this.sliderLeft = this.width-this.r*2-this.w; }anders{ this.sliderLeft += x - altx; } altx = x; }; dies.laveBall(); }, laveBall() {//Status löschen, wenn Maus losgelassen wird document.onmouseup = ()=> { Dokument.onmousemove = null; wenn(dieser.sliderLeft<(dieser.x+dieser.rangeValue)&&dieser.sliderLeft>(dieser.x-dieser.rangeValue)){ console.log("Herzlichen Glückwunsch, Sie haben es geschafft") }else{//Sezt die Position des Schiebereglers zurück, wenn sie nicht ausgewählt ist. this.sliderLeft = 0; } }; }, }, }; </Skript> <style lang="scss" scoped> .moveSLider { Position: relativ; Rand: 0 automatisch; Höhe: 50px; .reagieren { .Yuan Position: absolut; links: 0; oben: 50 %; transformieren: übersetzen(0, -50%); Breite: 30px; Höhe: 30px; Hintergrundfarbe: rot; Randradius: 50 %; Cursor: Zeiger; } Position: absolut; links: 0; oben: 50 %; transformieren: übersetzen(0, -50%); Breite: 100 %; Höhe: 20px; Hintergrundfarbe: rosabraun; } } .imgDev { Position: relativ; Rand: 0 automatisch; .Schieberegler { Position: absolut; links: 0; oben: 0; Hintergrundfarbe: transparent; } } </Stil> Hier fasse ich die Schwierigkeiten zusammen, auf die ich gestoßen bin 1. Am Anfang wusste ich nicht, wie ich die Form dieses Puzzles zeichnen sollte. Später fand ich bei Baidu heraus, dass es eigentlich ganz einfach ist. Die Form, die durch das Verbinden von Halbkreisen und Linien entsteht, ist die Form des Puzzles. 2. Wie kann man nur ein Puzzleteil in einem Bild anzeigen? Auch das ist ganz einfach. Sie können die Funktion ctx.clip() verwenden, um dies zu erreichen. Dabei ist zu beachten, dass Sie zuerst zuschneiden und dann das Bild auf die Leinwand laden müssen, da es sonst nicht zugeschnitten werden kann. Schlüsselcode drawBlock(ctx, width, height, type, img) { //Dies ist eine 2-in-1-Funktion, die den Schattenteil zeichnen und die Puzzleform ausschneiden kann. let { w, r, sliderLeft } = this; //w ist die Breite, r ist der Radius des Kreises. sliderLeft ist die Anfangsposition des Schiebereglers. //Hier werden Zufallszahlen verwendet und die Anzeigeposition ist jedes Mal anders. var x = this.random(30, width - w - r - 1); //Hier soll der Maximalwert verhindern, dass der Schieberegler ausgeblendet wird, also muss die Breite des Schiebereglers abgezogen werden. Es gibt einen Halbkreis, also muss die Halbkreisposition abgezogen werden. var y = this.random(10, height - w - r - 1); if (Typ == "Clip") {//Hier müssen wir sicherstellen, dass beide Objekte den gleichen Y-Wert haben x = sliderLeft; y = dies.y; } anders { dies.x = x; dies.y = y; } sei PI = Math.PI; //Zeichnen Sie ctx.beginPath(); //links ctx.moveTo(x, y); //Spitze ctx.arc(x + (w + 5) / 2, y, r, -PI, 0, wahr); ctx.lineTo(x + w + 5, y); //Rechts ctx.arc(x + w + 5, y + w / 2, r, 1,5 * PI, 0,5 * PI, falsch); ctx.lineTo(x + w + 5, y + w); //unten ctx.arc(x + (w + 5) / 2, y + w, r, 0, PI, falsch); ctx.lineTo(x, y + w); ctx.arc(x, y + w / 2, r, 0,5 * PI, 1,5 * PI, wahr); ctx.lineTo(x, y); wenn (Typ == "Clip") { ctx.shadowBlur = 10; ctx.shadowColor = "schwarz"; } ctx.Linienbreite = 1; ctx.fillStyle = "rgba(0, 0, 0, 0.4)"; //Hintergrundfarbe festlegen ctx.stroke(); ctx[Typ](); if (img) {//Warum müssen wir das Bild hier laden? Weil die Höhe dynamisch ist und vor dem Einfügen berechnet werden muss.//Ein weiterer Grund ist, dass Sie das Bild vor dem Laden zuschneiden müssen. ctx.drawImage(img, -this.x, 0, width, height); } }, Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
Das Büro benötigt ein Ubuntu-System als Linux-Ent...
Vorwort 1. Entprellen: Nach dem Auslösen eines Ho...
Das META-Tag ist ein Hilfstag im Kopfbereich der ...
1. Installation von MySQL 1. Öffnen Sie die herun...
Ich habe das System vor einiger Zeit neu installi...
Inhaltsverzeichnis Voraussetzungen DNS-Domänennam...
Dieser Artikel fasst die allgemeinen Befehle zur ...
Sag es im Voraus Wir alle wissen, dass Docker ein...
1. Einleitung Ob die Erstellungszeit einer Datei ...
Inhaltsverzeichnis JavaScript-Objekte 1. Definiti...
So deklarieren Sie einen Cursor in MySQL: 1. Vari...
Meine Empfehlung Lösung für die Koexistenz mehrer...
Inhaltsverzeichnis Erstellen Sie ein Vite-Projekt...
Nachteile einer Single-Node-Datenbank Große Inter...
Was ist eine HTML-Datei? HTML steht für Hyper Text...