So zeichnen Sie die Zeitleiste mit Vue+Canvas

So zeichnen Sie die Zeitleiste mit Vue+Canvas

In diesem Artikelbeispiel wird der spezifische Code der Vue Canvas-Zeichnungszeitleiste als Referenz bereitgestellt. Der spezifische Inhalt ist wie folgt

Ich studiere derzeit die Zeitleiste für das Zeichnen auf Leinwand. Hier ist der Code direkt. Ich hoffe, dass es Ihnen helfen kann, ihn weiterzugeben. Der Effekt ist wie folgt:

Der Code lautet wie folgt. Sie können ihn in das Vue-Projekt kopieren und direkt in der Vorschau anzeigen.

<Vorlage>
  <div>
    <canvas id="Zeitleiste" width="1200" height="27"></canvas>
  </div>
</Vorlage>

<Skript>
Standard exportieren {
  Name: 'pathwaytrack',
  Daten() {
    zurückkehren {
      Bildschirmbreite: Dokument.Textkörper.Clientbreite
    }
  },
  montiert() {
    lass das = dies
    das.carveTimeScale(1200, 1, 10, 0, 10)
    Leinwandfarbe = "#999999"
    lass initTime = 12000
    setzeIntervall(() => {
      initTime += 1000
      that.carveTimeScale(1200, 1, 10, initTime, 10)
    }, 1000);
  },
  Methoden: {
    /**
     * Pixelskala teilen* width: Breite in ms: Anzahl der Millisekunden für eine kleine Skala pxMs: 10 Pixel für eine kleine Skala pageShowStartTime: Anfangszeit (Millisekunden) eine große Intervalldauer (Sekunden)
     */
    carveTimeScale(Breite, ms, pxMs, SeitenanzeigeStartzeit, Intervallzeit) {
      let canvasId = document.getElementById('Zeitleiste')
      lass ctx = canvasId.getContext('2d')
      ctx.clearRect(0, 0, 1200, 60)
      ctx.fillStyle = "#999999"
      // Um ​​eine anormale Anzeige auf Apple 2X-Bildschirmen zu verhindern // Um ​​eine anormale Anzeige auf Apple 2X-Bildschirmen zu verhindern var getPixelRatio = function (context) {
        var backingStore = Kontext.backingStorePixelRatio ||
          Kontext.webkitBackingStorePixelRatio ||
          Kontext.mozBackingStorePixelRatio ||
          Kontext.msBackingStorePixelRatio ||
          Kontext.oBackingStorePixelRatio ||
          Kontext.backingStorePixelRatio || 1
        Rückgabewert (window.devicePixelRatio || 1) / backingStore
      }
      let-Verhältnis = getPixelRatio(ctx)
      let msOffset = this.startOffsetTime(pageShowStartTime, ms) // Start-Offset-Zeit ms
      let pxOffset = msOffset / 1000 * pxMs // Start-Offset-Distanz px
      let leftDistance = 0 // Abstand nach links let leftDistanceTime = 0 // Zeit nach links let beginX = 0
      lass beginY = 0
      für (sei i = 0; i < Breite / (ms * pxMs); i++) {
        leftDistance = pxOffset + i * (ms * pxMs) // Distanz = Start-Offset-Distanz + Anzahl der Raster * px/Raster leftDistanceTime = pageShowStartTime + msOffset + i * ms // Zeit = linke Startzeit + Offset-Zeit + Anzahl der Raster * ms
        beginX = pxOffset + i * (ms * pxMs)
        Leinwandfarbe lassen
        let showTime = pageShowStartTime + beginX / pxMs * 1000
        wenn (showTime % (Intervallzeit * 1000) === 0) {
          beginY = 0
          ctx.font = "12px Arial"
          ctx.fillText(diese.changeTime(showTime, 1), beginX + 10, 22)
          Leinwandfarbe = "#999999"
          ctx.fillStyle = "#B1B1B1"
          this.drawLine(linkerAbstand, beginY, linkerAbstand, 20, Leinwandfarbe, 1)
        } sonst wenn (showTime % Intervallzeit == 0) {
          beginY = 0
          Leinwandfarbe = "#999999"
          this.drawLine(linkerAbstand, beginY, linkerAbstand, 10, Leinwandfarbe, 1)
        }
      }
    },
    /**
     * Linien entsprechend den übergebenen Parametern zeichnen */
    drawLine(beginX, beginY, endX, endY, Farbe, Breite) {
      let canvasId = document.getElementById('time_line');
      Lassen Sie ctx = canvasId.getContext('2d');
      ctx.beginPath();
      ctx.moveTo(beginnX, beginY);
      ctx.lineTo(endeX, endY);
      ctx.strokeStyle = Farbe;
      ctx.lineWidth = Breite;
      ctx.stroke();
    },
    /**
     * Der Offset der linken Startzeit, zurückgegeben in ms
     */
    startOffsetTime(Zeitstempel, Schritt) {
      let remainder = Zeitstempel % Schritt
      Rest zurückgeben? Schritt - Rest: 0
    },
    /**
     *Rückkehrzeit */
    changeTime(Zeit, Zahl) {
      lass Stunde = 0
      let minute = 0
      sei Sekunde = 0
      Sekunde = Zeit / 1000
      wenn (Sekunde >= 3600) {
        Minute = (Sekunde - (Sekunde % 60)) / 60
        Stunde = parseInt((Minute / 60).toString())
        Minute = Minute % 60
        /* eslint-deaktivieren */
        Stunde >= 10 ? Stunde : Stunde = '0' + Stunde
        Minute >= 10? Minute : Minute = '0' + Minute
        Sekunde = Sekunde % 60
        Sekunde >= 10? Sekunde : Sekunde = '0' + Sekunde
        /* eslint-aktivieren */
        returniere Stunde + ':' + Minute + ':' + Sekunde
      }
      if (Sekunde < 3600 && Sekunde >= 60) {
        Stunde = '00'
        Minute = parseInt((Sekunde / 60).toString())
        /* eslint-deaktivieren */
        Minute >= 10? Minute : Minute = '0' + Minute
        Sekunde = Sekunde % 60
        Sekunde >= 10? Sekunde : Sekunde = '0' + Sekunde
        /* eslint-aktivieren */
        returniere Stunde + ':' + Minute + ':' + Sekunde
      }
      wenn (Sekunde < 60) {
        Stunde = '00'
        Minute = '00'
        Sekunde = parseInt(Sekunde)
        /* eslint-deaktivieren */
        Sekunde >= 10? Sekunde : Sekunde = '0' + Sekunde
        /* eslint-aktivieren */
        returniere Stunde + ':' + Minute + ':' + Sekunde
      }
    }
  }
}
</Skript>

<style lang="less" scoped>
  Leinwand {
    Hintergrund: schwarz;
  }
</Stil>

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:
  • Vue implementiert eine horizontale Zeitleiste
  • Vue implementiert eine Zeitleistenfunktion
  • Vue-Beispielcode zur Implementierung einer horizontalen Zeitleiste mit zwei Spalten
  • VUE implementiert eine Timeline-Wiedergabekomponente
  • Vue.js implementiert eine Timeline-Funktion
  • Vue+Swiper realisiert Timeline-Effekt
  • Vue realisiert den Logistik-Timeline-Effekt
  • Vue-Zeitleiste Vue-Light-Timeline - Nutzungsanweisungen
  • Vue implementiert eine verschiebbare horizontale Zeitleiste
  • Vue implementiert den Zeitleisteneffekt

<<:  SQL-Interviewfrage: Ermitteln Sie die Summe der Zeitunterschiede (ignorieren Sie Duplikate)

>>:  So ändern Sie schnell das Root-Passwort unter CentOS8

Artikel empfehlen

Eine kurze Diskussion über das Design des Tomcat-Mehrschichtcontainers

Inhaltsverzeichnis Containerhierarchie Der Prozes...

Einführung und Zusammenfassung der MySQL 8.0-Fensterfunktionen

Vorwort Vor MySQL 8.0 war es ziemlich mühsam, Dat...

Wie man mit React elegant CSS schreibt

Inhaltsverzeichnis 1. Inline-Stile 2. Importmetho...

HTML-Tabellen-Tag-Tutorial (46): Tabellenfußzeilen-Tag

Mit dem Tag <tfoot> wird der Stil der Tabel...

Javascript zum Wechseln von Bildern per Mausklick

In diesem Artikelbeispiel wird der spezifische Ja...

Berechnung des Prozentwerts, wenn die CSS-Positionseigenschaft absolut ist

Wenn die Position absolut ist, wird der Prozentsa...

Upgrade des Windows Server 2008R2-Dateiservers auf Windows Server 2016

Die Benutzerorganisation verfügt über zwei Window...

Beispielcode zur Konvertierung von http in https mit nginx

Ich schreibe gerade ein kleines Programm. Da die ...

Objektorientierte JavaScript-Implementierung eines Lupengehäuses

In diesem Artikel wird der spezifische Code der o...

Zusammenfassung der DTD-Verwendung in HTML

DTD ist ein Satz grammatikalischer Regeln zur Ausz...