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

Allgemeine Shell-Skriptbefehle und zugehöriges Wissen unter Linux

Inhaltsverzeichnis 1. Einige Punkte, die Sie beac...

Implementierungsbeispiel für dynamische Routing-Breadcrumbs für Elemente

Zu meistern: localStorage, Komponentenkapselung Ä...

Über das Vue Virtual Dom-Problem

Inhaltsverzeichnis 1. Was ist virtueller Dom? 2. ...

Idea konfiguriert Tomcat zum Starten eines Webprojekts - Grafik-Tutorial

Tomcat konfigurieren 1. Klicken Sie auf „Konfigur...

Vues Leitfaden zu Fallstricken bei der Verwendung von Drosselungsfunktionen

Vorwort In einem üblichen Geschäftsszenario müsse...

jQuery realisiert dynamische Partikeleffekte

In diesem Artikel wird der spezifische Code von j...

Vue implementiert einen Wasserfallfluss mit unendlichem Laden

In diesem Artikelbeispiel wird der spezifische Co...

So installieren Sie MySQL 8.0 in Docker

Umgebung: MacOS_Cetalina_10.15.1, Mysql8.0.18, Do...

Detaillierte Schritte zur Installation von MySql 5.7.21 unter Linux

Vorwort Die am häufigsten verwendete Datenbank in...