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
Überblick Das Rahmendiagramm dieses Artikels ist ...
Auf dem Server läuft ein Taskprozess. Wenn wir ih...
Das Plugin wird im Firefox-Browser installiert. D...
Einführung Beginnen wir mit unserem Inhalt. Ich g...
Laden Sie zunächst eine Reihe von Dingen aus der ...
Gespeicherte Prozeduren 1. Erstellen Sie eine ges...
Inhaltsverzeichnis Logische Schichtung Trennen Si...
In diesem Artikelbeispiel wird der spezifische Co...
Zusammenfassend: 1. Berücksichtigen Sie die Leist...
Die folgenden HTML-Tags umfassen grundsätzlich all...
Vorwort Meine Anforderungen sind Syntaxhervorhebu...
Bedürfnisse entdecken Wenn nur ein Teil eines Ber...
Inhaltsverzeichnis Problembeschreibung Rendern Dr...
Batchkommentare in SQL Server Batch-Annotation St...
UCenter Home ist ein von Comsenz veröffentlichtes ...