jQuery realisiert dynamische Partikeleffekte

jQuery realisiert dynamische Partikeleffekte

In diesem Artikel wird der spezifische Code von jQuery zur Erzielung dynamischer Partikeleffekte zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

Rendern

Code

<!DOCTYPE html>
<html lang="de">

<Kopf>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-kompatibel" content="IE=edge">
  <meta name="viewport" content="width=Gerätebreite, Anfangsmaßstab=1.0">
  <title>Dokument</title>
  <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
  <div id="jsi-particle-container" class="container"></div>
  <Stil>
    html,
    Körper {
      Breite: 100 %;
      Höhe: 100%;
      Rand: 0;
      Polsterung: 0;
      Überlauf: versteckt;
    }
    
    .container {
      Breite: 100 %;
      Höhe: 100%;
      Rand: 0;
      Polsterung: 0;
      Hintergrundfarbe: #000000;
    }
  </Stil>
</Kopf>

<Text>
  <Skript>
    var RENDERER = {
      TEILCHENANZAHL: 1000,
      PARTIKELRADIUS: 1,
      MAX_ROTATION_ANGLE: Math.PI / 60,
      ÜBERSETZUNGSANZAHL: 500,

      init: Funktion (Strategie) {
        this.setParameters(Strategie);
        dies.createParticles();
        dies.setupFigure();
        diese.reconstructMethod();
        this.bindEvent();
        dies.drawFigure();
      },
      setParameters: Funktion(Strategie) {
        dies.$window = $(window);

        dies.$container = $('#jsi-particle-container');
        diese.Breite = diese.$container.Breite();
        diese.Höhe = diese.$container.Höhe();

        dies.$canvas = $('<canvas />').attr({
          Breite: diese.Breite,
          Höhe: diese.Höhe
        }).appendTo(diesen.$container);
        dies.Kontext = dies.$canvas.get(0).getContext('2d');

        dies.center = {
          x: diese.Breite / 2,
          y: diese.Höhe / 2
        };

        dies.rotationX = dies.MAX_ROTATION_ANGLE;
        dies.rotationY = dies.MAX_ROTATION_ANGLE;
        dieser.StrategieIndex = 0;
        diese.Übersetzungsanzahl = 0;
        dies.theta = 0;

        diese.strategien = strategie.getStrategies();
        diese.partikel = [];
      },
      Partikel erstellen: Funktion() {
        für (var i = 0; i < this.PARTICLE_COUNT; i++) {
          this.particles.push(neues TEILCHEN(this.center));
        }
      },
      Rekonstruktionsmethode: Funktion () {
        dies.setupFigure = dies.setupFigure.bind(dies);
        dies.drawFigure = dies.drawFigure.bind(dies);
        dies.changeAngle = dies.changeAngle.bind(dies);
      },
      bindEvent: Funktion() {
        dies.$container.on('klicken', dies.setupFigure);
        dies.$container.on('Mausbewegung', dies.changeAngle);
      },
      Winkel ändern: Funktion(Ereignis) {
        var offset = this.$container.offset(),
          x = event.clientX - offset.links + this.$window.scrollLeft(),
          y = event.clientY - offset.oben + this.$window.scrollTop();

        diese.rotationX = (diese.Mitte.y - y) / diese.Mitte.y * diese.MAX_ROTATION_ANGLE;
        diese.rotationY = (diese.Mitte.x - x) / diese.Mitte.x * diese.MAX_ROTATION_ANGLE;
      },
      setupFigure: Funktion() {
        für (var i = 0, Länge = diese.Partikel.Länge; i < Länge; i++) {
          diese.Partikel[i].setAxis(diese.Strategien[dieser.StrategieIndex]());
        }
        wenn (++dieser.StrategieIndex == diese.Strategien.Länge) {
          dieser.StrategieIndex = 0;
        }
        diese.Übersetzungsanzahl = 0;
      },
      zeichneAbbildung: function() {
        AnfrageAnimationFrame(diese.drawFigure);

        this.context.fillStyle = "rgba(0, 0, 0, 0,2)";
        dieser.Kontext.fillRect(0, 0, diese.Breite, diese.Höhe);

        für (var i = 0, Länge = diese.Partikel.Länge; i < Länge; i++) {
          var Achse = diese.Partikel[i].getAxis2D(diese.Theta);

          dieser.Kontext.beginPath();
          this.context.fillStyle = Achse.Farbe;
          this.context.arc(Achse.x, Achse.y, this.PARTICLE_RADIUS, 0, Math.PI * 2, false);
          dies.Kontext.füllen();
        }
        dies.theta++;
        dies.theta %= 360;

        für (var i = 0, Länge = diese.Partikel.Länge; i < Länge; i++) {
          diese.Partikel[i].rotateX(diese.RotationX);
          diese.Partikel[i].rotateY(diese.RotationY);
        }
        dies.translationCount++;
        diese.Übersetzungsanzahl %= diese.TRANSLATION_COUNT;

        wenn (this.translationCount == 0) {
          dies.setupFigure();
        }
      }
    };
    var STRATEGIE = ​​{
      Streuradius: 150,
      KEGEL_ASPEKT_VERHÄLTNIS: 1,5,
      RING_COUNT: 5,

      getStrategies: Funktion() {
        var Strategien = [];

        für (var i in diesem) {
          wenn (dies[i] == argumente.callee || Typ von diesem[i] != 'Funktion') {
            weitermachen;
          }
          Strategien.push(dies[i].binden(dies));
        }
        Rückgabestrategien;
      },
      createSphere: Funktion() {
        var cosTheta = Math.random() * 2 - 1,
          sinTheta = Math.sqrt(1 - cosTheta * cosTheta),
          phi = Math.random() * 2 * Math.PI;

        zurückkehren {
          x: this.SCATTER_RADIUS * sinTheta * Math.cos(phi),
          y: this.SCATTER_RADIUS * sinTheta * Math.sin(phi),
          z: this.SCATTER_RADIUS * cosTheta,
          Farbton: Math.round(phi / Math.PI * 30)
        };
      },
      erstelleTorus: Funktion() {
        var theta = Math.random() * Math.PI * 2,
          x = dieser.SCATTER_RADIUS + dieser.SCATTER_RADIUS / 6 * Math.cos(theta),
          y = dieser.SCATTER_RADIUS / 6 * Math.sin(theta),
          phi = Math.random() * Math.PI * 2;

        zurückkehren {
          x: x * Math.cos(phi),
          j: j,
          z: x * Math.sin(phi),
          Farbton: Math.round(phi / Math.PI * 30)
        };
      },
      erstelleKegel: Funktion() {
        var status = Math.random() > 1 / 3,
          X,
          ja,
          phi = Math.random() * Math.PI * 2,
          Rate = Math.tan(30 / 180 * Math.PI) / this.CONE_ASPECT_RATIO;

        wenn (Status) {
          y = this.SCATTER_RADIUS * (1 - Math.random() * 2);
          x = (dieser.SCATTER_RADIUS – y) * Rate;
        } anders {
          y = -dies.SCATTER_RADIUS;
          x = this.SCATTER_RADIUS * 2 * Rate * Math.random();
        }
        zurückkehren {
          x: x * Math.cos(phi),
          j: j,
          z: x * Math.sin(phi),
          Farbton: Math.round(phi / Math.PI * 30)
        };
      },
      erstelleVase: Funktion() {
        var theta = Math.random() * Math.PI,
          x = Math.abs(dieser.SCATTER_RADIUS * Math.cos(theta) / 2) + dieser.SCATTER_RADIUS / 8,
          y = dieser.SCATTER_RADIUS * Math.cos(theta) * 1,2,
          phi = Math.random() * Math.PI * 2;

        zurückkehren {
          x: x * Math.cos(phi),
          j: j,
          z: x * Math.sin(phi),
          Farbton: Math.round(phi / Math.PI * 30)
        };
      }
    };
    var TEILCHEN = Funktion(Mitte) {
      dies.center = Mitte;
      dies.init();
    };
    PARTIKEL.prototyp = {
      FEDER: 0,01,
      REIBUNG: 0,9,
      FOKUS_POSITION: 300,
      FARBE: 'hsl(%Farbton, 100%, 70%)',

      init: Funktion() {
        dies.x = 0;
        dies.y = 0;
        dies.z = 0;
        dies.vx = 0;
        dies.vy = 0;
        dies.vz = 0;
        diese.Farbe;
      },
      setAxis: Funktion(Achse) {
        dies.übersetzen = wahr;
        dies.nächstesX = Achse.x;
        dies.nächstesY = Achse.y;
        dies.nächsteZ = Achse.z;
        dieser.Farbton = Achse.Farbton;
      },
      rotateX: Funktion(Winkel) {
        var sin = Math.sin(Winkel),
          cos = Math.cos(Winkel),
          nächstesY = dies.nächstesY * cos - dies.nächstesZ * sin,
          nextZ = dies.nextZ * cos + dies.nextY * sin,
          y = dies.y * cos - dies.z * sin,
          z = dies.z * cos + dies.y * sin;

        dies.nächstesY = nächstesY;
        dies.nextZ = nextZ;
        dies.y = y;
        dies.z = z;
      },
      rotateY: Funktion(Winkel) {
        var sin = Math.sin(Winkel),
          cos = Math.cos(Winkel),
          nächstesX = dies.nächstesX * cos - dies.nächstesZ * sin,
          nextZ = dies.nextZ * cos + dies.nextX * sin,
          x = dies.x * cos - dies.z * sin,
          z = dies.z * cos + dies.x * sin;

        dies.nächstesX = nächstesX;
        dies.nextZ = nextZ;
        dies.x = x;
        dies.z = z;
      },
      rotateZ: Funktion(Winkel) {
        var sin = Math.sin(Winkel),
          cos = Math.cos(Winkel),
          nächstesX = dies.nächstesX * cos - dies.nächstesY * sin,
          nächstesY = dieses.nächstesY * cos + dieses.nächstesX * sin,
          x = dies.x * cos - dies.y * sin,
          y = dies.y * cos + dies.x * sin;

        dies.nächstesX = nächstesX;
        dies.nächstesY = nächstesY;
        dies.x = x;
        dies.y = y;
      },
      getAxis3D: Funktion() {
        dies.vx += (dieses.nextX - dies.x) * dies.SPRING;
        dies.vy += (dieses.nextY - dies.y) * dies.SPRING;
        dies.vz += (dieses.nextZ - dies.z) * dies.SPRING;

        dies.vx *= dies.FRICTION;
        dies.vy *= dies.FRICTION;
        dies.vz *= dies.FRICTION;

        dies.x += dies.vx;
        dies.y += dies.vy;
        dies.z += dies.vz;

        zurückkehren {
          x: dies.x,
          y: dies.y,
          z: dies.z
        };
      },
      getAxis2D: Funktion (Theta) {
        var Achse = this.getAxis3D(),
          Skalierung = diese.FOCUS_POSITION / (diese.FOCUS_POSITION + Achse.z);

        zurückkehren {
          x: this.center.x + axis.x * Maßstab,
          y: this.center.y - axis.y * Skalierung,
          Farbe: this.COLOR.replace('%hue', this.hue + theta)
        };
      }
    };
    $(Funktion() {
      RENDERER.init(STRATEGIE);
    });
  </Skript>
</body>

</html>

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:
  • Beispielcode für dynamische jQuery-Partikeleffekte

<<:  Installation und Verwendung der MySQL MyCat-Middleware

>>:  Implementierung eines Tomcat-Images, das mit Dockerfile basierend auf Alpine erstellt wurde

Artikel empfehlen

Beispielcode zur Implementierung eines Hintergrundunschärfeeffekts mit CSS

Ist es der unten gezeigte Effekt? Wenn ja, lesen ...

Linux entfernt node.js vollständig und installiert es über den Befehl yum neu

erster Schritt Einmaliges Löschen mit der integri...

Lernhinweise zum WeChat-Applet: Seitenkonfiguration und -routing

Ich habe kürzlich die Entwicklung kleiner Program...

Detaillierte Erklärung der Verwendung des Linux-Befehls lsof

lsof (List Open Files) ist ein Tool zum Anzeigen ...

Acht gängige SQL-Verwendungsbeispiele in MySQL

Vorwort MySQL setzte auch 2016 seinen starken Wac...

Vertieftes Verständnis davon in JavaScript

Vertieftes Verständnis davon in Js JavaScript Ber...

Der HTML-Seitenkopfcode ist völlig klar

Alle folgenden Codes stehen zwischen <head>....

Mehrere Möglichkeiten zum Senden von HTML-Formularen_PowerNode Java Academy

Methode 1: Absenden über den Absenden-Button <...

Beim Bereitstellen von rabbitmq mit Docker sind zwei Probleme aufgetreten

1. Hintergrund Die folgenden zwei Probleme treten...

So übertragen Sie Dateien zwischen Docker-Container und lokalem Computer

Zum Übertragen von Dateien zwischen dem Host und ...