Vue einfache Implementierung einer Plattenspielerlotterie

Vue einfache Implementierung einer Plattenspielerlotterie

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 Gedanken

Das 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.2 Rotationsanimation ----- Übergang wird verwendet, um den Übergang zu handhaben
1.3 Was sind die Zielorte und Gewinntipps? ------ Steuern Sie die Stoppposition, indem Sie den Drehwinkel steuern. Gewinnen Sie die Eingabeaufforderung. Erwägen Sie das Hinzufügen eines Rückrufs

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 Beispiel

Nachdem 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 Tipps

Generell 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:
  • Vue3 realisiert die Einstellung von Lotterievorlagen
  • Vue implementiert die große Drehscheibenlotteriefunktion
  • Vue-Komponente zum Erzielen eines digitalen Scroll-Lotterieeffekts
  • Vue realisiert die Palastgitterrotationslotterie
  • VUE führt große Plattenspieler-Lotterie durch
  • Vue-Komponente zur Realisierung einer Drehtischlotterie mit neun Quadratgittern auf mobilen Endgeräten
  • Zusammenfassung und Implementierungsideen der großen Plattenspielerlotterie von Vue.js
  • Jiugongge-Lotteriefunktion basierend auf VUE
  • Vue implementiert das Auf- und Ab-Scrolling-Animationsbeispiel einer Handynummernlotterie
  • Vue realisiert Neun-Quadrat-Lotterie

<<:  So gehen Sie mit vergessenen Passwörtern in Windows Server 2008 R2 um

>>:  Detaillierte Installation und Konfiguration von MySql auf dem Mac

Artikel empfehlen

So löschen Sie schwebenden Beispielcode in CSS

Überblick Das Rahmendiagramm dieses Artikels ist ...

Linux-Methodenbeispiel zum Anzeigen aller Informationen des Prozesses

Auf dem Server läuft ein Taskprozess. Wenn wir ih...

So wählen Sie die Transaktionsisolationsebene in einem MySQL-Projekt

Einführung Beginnen wir mit unserem Inhalt. Ich g...

Beispielcode zur Implementierung der Alipay-Sandbox-Zahlung mit Vue+SpringBoot

Laden Sie zunächst eine Reihe von Dingen aus der ...

Eine kurze Diskussion zur Logikextraktion und Feldanzeige von Vue3 in Projekten

Inhaltsverzeichnis Logische Schichtung Trennen Si...

Vue implementiert die Drag & Drop-Funktion für Bilder

In diesem Artikelbeispiel wird der spezifische Co...

MySQL-Optimierungsstrategie (empfohlen)

Zusammenfassend: 1. Berücksichtigen Sie die Leist...

Wie gut kennen Sie sich mit reinen HTML-Tags aus?

Die folgenden HTML-Tags umfassen grundsätzlich all...

So verwenden Sie den JS-Code-Compiler Monaco

Vorwort Meine Anforderungen sind Syntaxhervorhebu...

Tastenkombinationsvorgang für SQL Server-Kommentare

Batchkommentare in SQL Server Batch-Annotation St...

UCenter-Homepage fügt Statistikcode hinzu

UCenter Home ist ein von Comsenz veröffentlichtes ...