In diesem Artikel wird der spezifische Code von Vue zur einfachen Implementierung der Radlotterie zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt 1.0 GedankenDas Glücksrad ist sehr verbreitet. Ich habe noch nie darüber geschrieben. Jetzt habe ich Zeit, darüber zu schreiben. Die Analyse lautet wie folgt: 1.1 Drehtischrotation ----- kann durch die Verwendung der Drehfunktion der Transformation gelöst werden 1.1 Erste Schritte Aus den obigen Überlegungen wissen wir, welche Schritte durchgeführt werden müssen. Machen wir zunächst ein Bild. Diese Scheibe hat 10 Teile, jedes Teil ist 360/10 = 36 Grad. Angenommen, Sie möchten bei den zweiten ----> 20 Goldmünzen bleiben, im Uhrzeigersinn (einschließlich der Ausgangsposition und als 1 gezählt), müssen Sie insgesamt (2 - 1)*36 = 36 drehen. Auf diese Weise können wir schlussfolgern, dass der Winkel, der zum Drehen bis zur Stoppposition erforderlich ist, = (Ziel - 1)*36 ist. 1.2 Gewinnender Rückruf Aus den obigen Schritten wissen wir, wie wir die Zielposition steuern können. Der nächste Schritt ist also die Ereignisbenachrichtigung. Zuerst dachte ich daran, die Rotationszeit festzulegen und dann den Timer zu starten. Dies ist offensichtlich nicht zuverlässig. Gibt es eine Möglichkeit, nach dem Ende der Animation eine Benachrichtigung zu erhalten? transitionend, ich habe dieses Ereignis gefunden, das das Endereignis der Elementanimation überwachen kann, aber es ist nicht einfach, mit einer gewissen Kompatibilität umzugehen /** Kompatibel mit Animations-Endereignis**/ welchesÜbergangsereignis(){ let el = document.createElement('span'), Übergänge = { 'Übergang':'Übergangsende', 'OÜbergang':'oÜbergangsende', 'MozTransition':'Übergangsende', 'WebkitTransition':'webkitTransitionEnd' }; für (lass t in Übergängen) { wenn( el.style[t] !== undefiniert ){ Rückgabeübergänge[t]; } } el = null; } 2.0 Vollständiges BeispielNachdem wir nun eine Möglichkeit gefunden haben, die Rotationsposition und die Ereignisbenachrichtigung zu steuern, können wir loslegen! Kastanie: Vollständiger Code <Vorlage> <div> <h3>Rotationszug</h3> <div Klasse="runde_box" > <img class="img_rotate" ref="rotImg" src="../assets/zhuan.png" alt=""> <div Klasse="Mitte"> <div Klasse="Zeiger" ></div> </div> </div> <button @click="toDraw" >Zum Zeichnen klicken</button> </div> </Vorlage> <Skript> Standard exportieren { Name:'rotaryDraw', Daten() { zurückkehren { drehen: 0, zurücksetzenRotate: 0, Treffer-ID: 1, // 1-10 drawStatus: false } }, asynchron gemountet() { warte darauf.$nextTick(); sei evenTransition = this.whichTransitionEvent(); lass img = dies.$refs.rotImg; lass das = dies; const hitAre = ['30M Verkehrspaket','20 Goldmünzen','20M Verkehrspaket','10M Verkehrspaket','5 Goldmünzen', „Vielen Dank für Ihre Teilnahme“, „10 Goldmünzen“, „50M Verkehrspaket“, „2 Goldmünzen“, „100M Verkehrspaket“ ]; //Monitoranimation beenden img.addEventListener(evenTransition,tranHand,false); Funktion tranHand() { // Zurücksetzen that.resetRotate = that.rotate > 360 ? that.rotate % 360 : 0; img.style.transition = "keine 0 s Leichtigkeit 0 s"; img.style.transform = `drehen(${that.resetRotate}deg)`; alert(`Lotterieergebnis [ ${hitAre[that.hitId - 1]} ]`); that.drawStatus = falsch } }, Methoden: { Start() { this.$refs.rotImg.style.transition = "alle 3er locker 0er"; dies.$refs.rotImg.style.transform = `drehen(${this.rotate}deg)`; }, zuZeichnen() { wenn(dieser.drawStatus){ console.log('Lotterie läuft'); zurückkehren } // Status markieren this.drawStatus = true /** * Es gibt insgesamt 10 Scheiben mit jeweils 36 Grad, Stoppposition (id) Grad (id - 1) * 36 * Basis 3 Kreise 360*4 * this.rotate aktuellen Winkel* **/ lass zurücksetzen = 360 * 4; Lassen Sie idx = this.getRandomInt(1,11); // Treffer festlegen this.hitId = idx; // Es müssen mehrere Winkel gedreht werden let addRotate = this.resetRotate > 0 ? 360 - this.resetRotate : 0; // Gesamtwinkel let allRotate = this.rotate + (idx - 1) * 36 + reset + addRotate; // Winkelbegrenzung this.rotate = this.setRotate(allRotate); dies.start() }, // Der rekursive Berechnungswinkel überschreitet nicht 360*6 setzeRotate(Grad) { lass rest = Grad - 360; Rest zurückgeben > 360*6? this.setRotate(rest) : Grad; }, getRandomInt(min, max) { // Nach oben sammeln min = Math.ceil(min); // Nach unten sammeln max = Math.floor(max); return Math.floor(Math.random() * (max - min)) + min; //Ohne den Maximalwert, mit dem Minimalwert}, // Animation kompatibel whichTransitionEvent(){ let el = document.createElement('span'), Übergänge = { 'Übergang':'Übergangsende', 'OÜbergang':'oÜbergangsende', 'MozTransition':'Übergangsende', 'WebkitTransition':'webkitTransitionEnd' }; für (lass t in Übergängen) { wenn( el.style[t] !== undefiniert ){ Rückgabeübergänge[t]; } } el = null; } } } </Skript> <style lang="scss" > .img_rotate{ transformieren: drehen (0 Grad); } .runde_box{ Breite: 100 %; maximale Breite: 375px; Position: relativ; Überlauf: versteckt; img{ Breite: 100 %; } .Center{ Position: absolut; oben: 50 %; links: 50%; transformieren: übersetzen(-50 %,-50 %); .Zeiger{ Breite: 5px; Höhe: 90px; Hintergrundfarbe: #f40; Position: absolut; oben: -90px; } .pointer::before{ Inhalt:''; Breite: 0; Höhe: 0; Rahmen oben: 15px durchgehend transparent; Rahmen rechts: 15px durchgehend transparent; Rahmen unten: 15px durchgezogen #f40; Rahmen links: 15px durchgehend transparent; Position: absolut; oben: -20px; links: 50%; transformieren: übersetzenX(-50%); } } } </Stil> 3.0 TippsGenerell gibt es ein paar Punkte zu beachten 1. Sperren, bevor die Animation beginnt 2. Benachrichtigen Sie nach dem Ende der Animation und setzen Sie den Status zurück /** Zum Beispiel: Basis 3 Kreise zurücksetzen 360*3 Die zweite Stoppposition ist (2 - 1) * 36 = 36 Gesamtwinkel 360*3 + 36 Nachdem die Animation gestoppt wurde, ist es unmöglich, den Winkel weiter zu erhöhen, da die Drehung weitergeht. Daher muss 360 * 3 + 36 zurückgesetzt werden. Tatsächlich können Sie eine Drehung um 36 Grad in Betracht ziehen und dann den erforderlichen Winkel erhöhen ** / 3. Weiter drehen. Da unsere Berechnung auf dem Anfangswert von 30 M Fluss basiert, muss die Drehung immer noch bei 30 M beginnen. Angenommen, die aktuelle Stoppposition beträgt zu diesem Zeitpunkt 300 Grad, d. h. wenn Sie um 60 Grad drehen, kehren Sie zur Ausgangsposition zurück. Ich habe auch nach dieser Idee zurückgesetzt. 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:
|
<<: So gehen Sie mit vergessenen Passwörtern in Windows Server 2008 R2 um
>>: Detaillierte Installation und Konfiguration von MySql auf dem Mac
Inhaltsverzeichnis Vorwort 1. Mit vue-cli 1. Defi...
Werfen wir einen Blick auf das Problem des VScode...
Lösung für das Problem der automatischen Trennung...
Inhaltsverzeichnis Überblick 1. Kompositions-API ...
In meiner Verzweiflung dachte ich plötzlich: Wie i...
Inhaltsverzeichnis iview-admin2.0 integrierte Ber...
Heute sprach jemand mit mir über ein Website-Entw...
Inhaltsverzeichnis Portale Fehlergrenzenbehandlun...
Dieser Artikel beschreibt, wie Sie mit der lokale...
Ich habe vor Kurzem etwas über Stapelkontexte gel...
Lesetipp: MySQL 8.0.19 unterstützt Kontosperrfunk...
Wir sollten besser aufpassen, denn die HTML-Poliz...
Die Betriebsumgebung dieses Tutorials: Windows 7-...
Vorwort: Im täglichen Studium und bei der Arbeit ...