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

Richtige Verwendung der Vue-Funktion Anti-Shake und Throttling

Vorwort 1. Entprellen: Nach dem Auslösen eines Ho...

Wichtige Punkte zum Schreiben von Inhalten für META-Tags in HTML-Webseiten

Das META-Tag ist ein Hilfstag im Kopfbereich der ...

Grafisches Tutorial zur Installation von MySQL 5.5.27

1. Installation von MySQL 1. Öffnen Sie die herun...

Zusammenfassung gängiger Befehle zur Linux-Benutzer- und Gruppenverwaltung

Dieser Artikel fasst die allgemeinen Befehle zur ...

So zeigen Sie die Erstellungszeit von Dateien in Linux an

1. Einleitung Ob die Erstellungszeit einer Datei ...

JavaScript-Objekte (Details)

Inhaltsverzeichnis JavaScript-Objekte 1. Definiti...

So deklarieren Sie einen Cursor in MySQL

So deklarieren Sie einen Cursor in MySQL: 1. Vari...

Web-Kenntnisse: Lösung für die Koexistenz mehrerer IE-Versionen IETester

Meine Empfehlung Lösung für die Koexistenz mehrer...

Vue3.0+vite2 implementiert dynamisches asynchrones Lazy Loading von Komponenten

Inhaltsverzeichnis Erstellen Sie ein Vite-Projekt...

Implementierung der Docker-Bereitstellung eines MySQL-Clusters

Nachteile einer Single-Node-Datenbank Große Inter...

HTML-Grundlagen HTML-Struktur

Was ist eine HTML-Datei? HTML steht für Hyper Text...