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

Einführung in ApplicationHost.config (IIS-Speicherkonfigurationsbereichsdatei)

Nehmen Sie für eine neu erstellte Website ASP.NET...

Detaillierte Erläuterung der Verwendung von MySQL sql_mode

Inhaltsverzeichnis Vorwort sql_mode erklärt Die w...

So verwenden Sie griechische Buchstaben in HTML-Seiten

Griechische Buchstaben sind eine sehr häufig verw...

Tutorial zur HTML-Tabellenauszeichnung (9): Zellabstandsattribut CELLSPACING

Damit die Tabelle nicht zu kompakt wirkt, kann zw...

Eine kurze Diskussion zum CSS-Höhenkollapsproblem

Leistung Zum Beispiel: HTML: <div Klasse="...

7 coole dynamische Website-Designs zur Inspiration

Im Bereich Design gibt es jedes Jahr unterschiedl...

Implementierung der durch Kommas getrennten MySQL-Split-Funktion

1: Definieren Sie eine gespeicherte Prozedur zum ...

Detaillierte Erklärung zur Erstellung von Schießspielen mit CocosCreator

Inhaltsverzeichnis Szeneneinstellung Spielressour...

So erhöhen Sie die Ladegeschwindigkeit von HTML-Seiten

(1) Reduzieren Sie HTTP-Anfragen. (Ressourcendate...

So verwenden Sie HTML+CSS zum Erstellen einer TG-Vision-Homepage

Dieses Mal verwenden wir HTML+CSS-Layout, um eine...