Detaillierter Code zur Implementierung einer 3D-Tag-Cloud in Vue

Detaillierter Code zur Implementierung einer 3D-Tag-Cloud in Vue

Vorschau:

Code:
Seitenabschnitte:

<Vorlage>
  <div Klasse="Schlagwortwolke-alle"
       ref="tagcloudall">
    <a v-for="Artikel in Tagliste" :href="Artikel.url" rel="externes Nofollow" :style="'Farbe:' + Artikel.Farbe + ';oben: 0;links: 0;Filter:keine;'">{{Artikel.Name}}</a>
  </div>
</Vorlage>

CSS-Teil:

// Tag cloud.tagcloud-all {
  Position: relativ;
  A {
    Position: absolut;
    oben: 0px;
    links: 0px;
    Farbe: #fff;
    Schriftstärke: fett;
    Textdekoration: keine;
    Polsterung: 3px 6px;
    &:schweben {
      Farbe: #FF0000;
      Buchstabenabstand: 2px;
    }
  }
}

JS-Teil:

Standard exportieren {
  Name: "Tagcloud",
  Daten() {
    zurückkehren {
      tagList: [],
      Radius: 120,
      dtr: Math.PI / 180,
      d: 300,
      mcListe: [],
      aktiv: falsch,
      letzte: 1,
      letztesb: 1,
      distr: wahr,
      Geschwindigkeit: 10,
      Größe: 250,
      MausX: 0,
      MausY: 0,
      wieElliptisch: 1,
      oListe: null,
      oA: null,
      sa: 0,
      ca: 0,
      jdn: 0,
      cb: 0,
      sc: 0,
      ccm: 0
    }
  },
  Methoden: {
    // Erzeuge eine Zufallszahl getRandomNum() {
      gibt Math.floor(Math.random() * (255 + 1)) zurück;
    },
    // Trigonometrische Funktion Winkelberechnung sinusCosinus(a, b, c) {
      dies.sa = Math.sin(a * dies.dtr);
      dies.ca = Math.cos(a * dies.dtr);
      dies.sb = Math.sin(b * dies.dtr);
      dies.cb = Math.cos(b * dies.dtr);
      dies.sc = Math.sin(c * dies.dtr);
      dies.cc = Math.cos(c * dies.dtr);
    },
    // Setze die Anfangsposition positionAll() {
      this.$nextTick(() => { // Hinweis: Alle in der Methode onReady ausgeführten Methoden erfordern $nextTick, um sicherzustellen, dass alle Beschriftungen gerendert wurden. var phi = 0;
        vartheta = 0;
        var max = diese.mcList.Länge;
        var aTmp = [];
        var oFragment = document.createDocumentFragment();
        // Zufällige Sortierung für (let i = 0; i < this.tagList.length; i++) {
          aTmp.push(dies.oA[i]);
        }
        aTmp.sort(() => {
          gibt Math.random() < 0,5 zurück? 1: -1;
        });
        für (lass i = 0; i < aTmp.Länge; i++) {
          oFragment.appendChild(aTmp[i]);
        }
        dies.oList.appendChild(oFragment);
        für (sei i = 1; i < max + 1; i++) {
          wenn (diese.distr) {
            phi = Math.acos(-1 + (2 * i - 1) / max);
            theta = Math.sqrt(max * Math.PI) * phi;
          } anders {
            phi = Math.random() * (Math.PI);
            theta = Math.random() * (2 * Math.PI);
          }
          // Koordinatentransformation this.mcList[i - 1].cx = this.radius * Math.cos(theta) * Math.sin(phi);
          diese.mcList[i - 1].cy = diese.radius * Math.sin(theta) * Math.sin(phi);
          diese.mcList[i - 1].cz = diese.radius * Math.cos(phi);
          this.oA[i - 1].style.left = this.mcList[i - 1].cx + this.oList.offsetWidth / 2 - this.mcList[i - 1].offsetWidth / 2 + 'px';
          this.oA[i - 1].style.top = this.mcList[i - 1].cy + this.oList.offsetHeight / 2 - this.mcList[i - 1].offsetHeight / 2 + 'px';
        }
      })
    },
    // Aktualisiere die Koordinaten, damit sich das Label verschiebt update() {
      this.$nextTick(() => { // Hinweis: Alle in der Methode onReady ausgeführten Methoden erfordern $nextTick, um sicherzustellen, dass alle Beschriftungen gerendert wurden. var a;
        var b;
        wenn (dies.aktiv) {
          a = (-Math.min(Math.max(-this.mouseY, -this.size), diese.size) / dieser.radius) * diese.tspeed;
          b = (Math.min(Math.max(-diese.MausX, -diese.Größe), diese.Größe) / dieser.Radius) * diese.T-Geschwindigkeit;
        } anders {
          a = dies.lasta * 0,98;
          b = dies.letztesb * 0,98;
        }
        dies.lasta = a;
        dies.letztesb = b;
        wenn (Math.abs(a) <= 0,01 und Math.abs(b) <= 0,01) {
          zurückkehren
        }
        var c = 0;
        dies.sineCosine(a, b, c);
        für (var j = 0; j < this.mcList.length; j++) {
          var rx1 = diese.mcList[j].cx;
          var ry1 = diese.mcList[j].cy * diese.ca + diese.mcList[j].cz * (-diese.sa);
          var rz1 = diese.mcList[j].cy * diese.sa + diese.mcList[j].cz * diese.ca;
          var rx2 = rx1 * dies.cb + rz1 * dies.sb;
          var ry2 = ry1;
          var rz2 = rx1 * (-diese.sb) + rz1 * dies.cb;
          var rx3 = rx2 * dies.cc + ry2 * (-dies.sc);
          var ry3 = rx2 * dies.sc + ry2 * dies.cc;
          var rz3 = rz2;
          diese.mcList[j].cx = rx3;
          diese.mcList[j].cy = ry3;
          diese.mcList[j].cz = rz3;
          var per = dies.d / (dies.d + rz3);
          diese.mcList[j].x = (diese.howElliptical * rx3 * per) - (diese.howElliptical * 2);
          diese.mcList[j].y = ry3 * pro;
          diese.mcList[j].scale = pro;
          diese.mcList[j].alpha = pro;
          diese.mcList[j].alpha = (diese.mcList[j].alpha - 0,6) * (10 / 6);
        }
        dies.doPosition();
        dies.depthSort();
      })
    },
    //
    doPosition() {
      this.$nextTick(() => { // Hinweis: Alle in der Methode onReady ausgeführten Methoden erfordern $nextTick, um sicherzustellen, dass alle Beschriftungen gerendert wurden. var l = this.oList.offsetWidth / 2;
        var t = this.oList.offsetHeight / 2;
        für (var i = 0; i < this.mcList.length; i++) {
          this.oA[i].style.left = this.mcList[i].cx + l - this.mcList[i].offsetWidth / 2 + 'px';
          dies.oA[i].style.top = dies.mcList[i].cy + t - dies.mcList[i].offsetHeight / 2 + 'px';
          this.oA[i].style.fontSize = Math.ceil(12 * this.mcList[i].scale / 2) + 8 + 'px';
          // this.oA[i].style.filter = "alpha(opacity=" + 100 * this.mcList[i].alpha + ")";
          dies.oA[i].style.opacity = dies.mcList[i].alpha;
        }
      })
    },
    //
    TiefeSortierung() {
      this.$nextTick(() => { // Hinweis: Alle in der Methode onReady ausgeführten Methoden erfordern $nextTick, um sicherzustellen, dass alle Beschriftungen gerendert wurden. var aTmp = [];
        für (sei i = 0; i < this.oA.length; i++) {
          aTmp.push(dies.oA[i]);
        }
        aTmp.sort(Funktion (vItem1, vItem2) {
          wenn (vItem1.cz > vItem2.cz) {
            Rückgabe -1;
          } sonst wenn (vItem1.cz < vItem2.cz) {
            Rückgabe 1;
          } anders {
            gebe 0 zurück;
          }
        });
        für (lass i = 0; i < aTmp.Länge; i++) {
          aTmp[i].style.zIndex = i;
        }
      })
    },
    // Netzwerkanforderung zum Abrufen der Tagliste
    Abfrage() {
      // So tun, als würden die Daten von der Schnittstelle abgerufen let tagListOrg = [
        { Name: 'Label 1', URL: 'www.baidu.com' },
        { Name: 'Label 2', URL: 'www.baidu.com' },
        { name: 'Tag 3', url: 'www.baidu.com' },
        { Name: 'Label 4', URL: 'www.baidu.com' },
        { name: 'Tag 5', url: 'www.baidu.com' },
        { name: 'Tag 6', url: 'www.baidu.com' },
        { name: 'Tag 7', url: 'www.baidu.com' },
        { Name: 'Label 8', URL: 'www.baidu.com' },
        { name: 'Tag 9', url: 'www.baidu.com' },
        { Name: 'Label 10', URL: 'www.baidu.com' },
        { Name: 'Label 11', URL: 'www.baidu.com' },
        { Name: 'Label 12', URL: 'www.baidu.com' },
        { name: 'Tag 13', url: 'www.baidu.com' },
        { name: 'Tag 14', url: 'www.baidu.com' },
        { name: 'Tag 15', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 16', url: 'www.baidu.com' },
        { name: 'Tag 17', url: 'www.baidu.com' }
      ];
      // Zufällige Farben zu tagList hinzufügentagListOrg.forEach(item => {
        Element.Farbe = "rgb(" + this.getRandomNum() + "," + this.getRandomNum() + "," + this.getRandomNum() + ")";
      })
      dies.tagList = tagListOrg;
      dies.onReady();
    },
    // Tag-Cloud generieren onReady() {
      dies.$nextTick(() => {
        diese.oList = diese.$refs.tagcloudall;
        dies.oA = dies.oList.getElementsByTagName('a')
        var oTag = null;
        für (var i = 0; i < this.oA.length; i++) {
          oTag = {};
          oTag.offsetWidth = this.oA[i].offsetWidth;
          oTag.offsetHeight = this.oA[i].offsetHeight;
          this.mcList.push(oTag);
        }
        dies.sineCosine(0, 0, 0);
        diese.positionAll();
        this.oList.onmouseover = () => {
          dies.aktiv = wahr;
        }
        this.oList.onmouseout = () => {
          dies.aktiv = falsch;
        }
        this.oList.onmousemove = (Ereignis) => {
          var oEvent = Fenster.Ereignis || Ereignis;

          this.mouseX = oEvent.clientX - (this.oList.offsetLeft + this.oList.offsetWidth / 2);
          this.mouseY = oEvent.clientY - (this.oList.offsetTop + this.oList.offsetHeight / 2);
          diese.mausX /= 5;
          diese.mausY /= 5;
        }
        setzeIntervall(() => {
          dies.update()
        }, 30); // Timerausführung kann nicht schreiben setInterval(this.update(), 30)
      })
    }
  },
  erstellt() {
    dies.$nextTick(() => {
      diese.Abfrage();
    })
  }
}

Dies ist das Ende dieses Artikels über die Implementierung der 3D-Tag-Cloud in Vue. Weitere relevante Inhalte zur Vue 3D-Tag-Cloud finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Beispiel für die Implementierung des Tag-Cloud-Effekts mit Vue
  • Detaillierte Erklärung zur Implementierung des Tag-Cloud-Effekts in Vue
  • Die Vue-Seite führt three.js ein, um den Betrieb von 3D-Animationsszenen zu realisieren
  • Implementierungsmethode für die VUE 3D-Karussellkapselung
  • Beispiel für die Verwendung der 3DES-Verschlüsselung in vue.js
  • So zeichnen Sie mit HighCharts in Vue ein 3D-Kreisdiagramm

<<:  So installieren Sie MySQL 8.0 in Docker

>>:  Optimierungsanalyse der Limit-Abfrage in MySQL-Optimierungstechniken

Artikel empfehlen

Tipps zum MySQL-Abfragecache

Inhaltsverzeichnis Vorwort Einführung in QueryCac...

Schritte zum Ändern des MySQL-Datenbankdatendateipfads unter Linux

Nach der Installation der MySQL-Datenbank mit der...

Installationstutorial auf Unternehmensebene unter Verwendung des LAMP-Quellcodes

Inhaltsverzeichnis LAMP-Architektur 1.Lampeneinfü...

Durchführung der lokalen Migration von Docker-Images

Ich habe vor Kurzem Docker gelernt und stoße dabe...

37 Tipps für ein gutes User Interface Design (mit Bildern)

1. Versuchen Sie, ein einspaltiges statt eines meh...

Docker mountet lokale Verzeichnisse und Datenvolumen-Container-Operationen

1. Docker mountet das lokale Verzeichnis Docker k...

Tutorial zur Verwendung des iostat-Befehls unter Linux

Vorwort Es wird gesagt, dass sich die für Betrieb...

So erstellen Sie eine Swap-Partitionsdatei in Linux

Einführung in Swap Swap (d. h. Swap-Partition) in...

Lernen Sie die schwarze Technologie der Union-All-Verwendung in MySQL 5.7 in 5 Minuten

Leistung von „Union All“ in MySQL 5.6 Teil 1: MyS...

So installieren Sie OpenJDK in Docker und führen das JAR-Paket aus

Bild herunterladen Docker-Pull OpenJDK Erstellen ...

So verwenden Sie wangEditor in Vue und erhalten durch Echo von Daten den Fokus

Bei der Hintergrundverwaltung von Projekten werde...