js Canvas realisiert Slider-Verifizierung

js Canvas realisiert Slider-Verifizierung

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:
  • JS implementiert Drag-Slider-Verifizierung
  • JavaScript Slider Validierungsfall
  • JavaScript zum Implementieren des Slider-Verifizierungscodes
  • JavaScript zur Implementierung der Login-Schiebereglerüberprüfung
  • JavaScript implementiert die Drag-Slider-Puzzle-Verifizierungsfunktion (html5, Canvas)
  • js implementiert einen Schieberegler zur Überprüfung der Anmeldung
  • Codebeispiel für die Implementierung eines Drag-Verifizierungs-Schiebereglers mit nativer JS-Kapselung
  • Implementierung von JS-Reverse-Engineering der iQiyi-Slider-Verschlüsselung

<<:  Detaillierte Erklärung der Lösung für die Baidu-https-Authentifizierungsaufforderung „Bitte leiten Sie Ihre http-Site 301 auf die https-Site um“

>>:  Installations-Tutorial für die grüne Version von MySQL 5.7 unter einem 64-Bit-System von Windows 2008

Artikel empfehlen

Erläuterung der CSS3-Überlaufeigenschaft

1. Überlauf Überlauf ist Überlauf (Container). We...

So implementieren Sie das parallele Herunterladen großer Dateien in JavaScript

Inhaltsverzeichnis 1. HTTP-Bereichsanforderung 1....

Detaillierte Erklärung des JQuery-Selektors

Inhaltsverzeichnis Grundlegende Selektoren: Ebene...

Detaillierte Erläuterung der Cache-Konfiguration von Nginx Proxy_Cache

Vorwort: Aufgrund meiner Arbeit beschäftige ich m...

So veröffentlichen Sie ein lokal erstelltes Docker-Image auf Dockerhub

Heute zeigen wir Ihnen, wie Sie das lokale Docker...

Verwendung des Array-Filters filter() in JS

Inhaltsverzeichnis 1. Einleitung 2. Einführung in...

Tipps zum Erstellen zweidimensionaler Arrays in JavaScript

Erstellen eines zweidimensionalen Arrays in Js: Z...

In einem Artikel erfahren Sie, wie Sie ein Vue-Plugin schreiben

Inhaltsverzeichnis Was ist ein Plugin Plugins sch...

Detailliertes Installationstutorial für MySQL 5.7 unter CentOS 6 und 7

Für die Entwicklung benötigen Sie immer Daten. Al...

So ändern Sie das Root-Passwort von Mysql5.7.10 auf dem MAC

Starten Sie MySQL zunächst im Skip-Grant-Tables-M...

JavaScript-Canvas zum Laden von Bildern

In diesem Artikel wird der spezifische Code von J...