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

Vollständige Schritte zum Mounten einer neuen Datenfestplatte in CentOS7

Vorwort Ich habe gerade einen neuen VPS gekauft. ...

Detaillierte Erklärung der Funktionen jedes Ports von Tomcat

Aus der Tomcat-Konfigurationsdatei können wir ers...

Das Prinzip und die Implementierung des JS-Drag-Effekts

Die Drag-Funktion wird hauptsächlich verwendet, u...

Detaillierte Anweisungen zum Download und Installationsprozess von MySQL 5.7.18

MySql herunterladen 1. Öffnen Sie die offizielle ...

Detaillierte Erläuterung der Verwendung von Object.create-Instanzen in js

1. Erstellen Sie mit der Methode Object.create() ...

Detaillierte Beschreibung des HTML-Meta-Viewport-Attributs

Was ist ein Ansichtsfenster? Mobile Browser platzi...

Docker CP kopiert Dateien und gibt den Container ein

Geben Sie den laufenden Container ein # Geben Sie...

Beispiel für eine HTTPS-Konfigurationsmethode für den Nginx-Server

Linux: Linux-Version 3.10.0-123.9.3.el7.x86_64 Ng...

Detaillierte Installation und Verwendung von RocketMQ in Docker

Um nach RocketMQ-Images zu suchen, können Sie auf...

Implementierung der Navigationsleiste und des Dropdown-Menüs in CSS

1. CSS-Navigationsleiste (1) Funktion der Navigat...