Vue.js implementiert eine Timeline-Funktion

Vue.js implementiert eine Timeline-Funktion

In diesem Artikel wird der spezifische Code von Vue.js zur Implementierung der Timeline-Funktion zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

GitHub

Timeline-Komponentenpaket

Haupt.js

<Vorlage>
  <div Klasse="Zeitleiste-Haupt">
    <div Klasse="Zeitleistenachse">
      <div Klasse="Achsenelement"
        v-for="(Zeit, Index) in Datum/Zeiten"
        :Schlüssel="index">
        <div Klasse="Achsenelement-Tick"
          :Klasse="{ 'axis-item-tick-active': index === highlightIndex }"
          @mouseenter="hoverIndex = index"
          @mouseleave="hoverIndex = -1"
          @click="tickClick(Zeit, Index)">
        </div>
        <div Klasse="Achsenelement-Bezeichnung"
          v-if="dateTimeIndexes.indexOf(index) >= 0">
          {{ Zeit }}</div>
        <div Klasse="Achsen-Element-Tipp"
          v-if="index === Highlight-Index || Index === Hover-Index">
          {{ Zeit }}</div>
      </div>
    </div>
    <div Klasse="Zeitleistensteuerung">
      <i Klasse = "Menüsymbol Symbol links"
        :Klasse="{'menu-icon-disabled': abspielen}"
        @click="zurück"></i>
      <i Klasse="Menü-Symbol"
        :class="{'icon-play': !wird abgespielt, 'icon-pause': wird abgespielt}"
        @click="Wiedergabe umschalten"
        @mouseleave="hoverIndex = -1"></i>
      <i class="Menü-Symbol Symbol-rechts"
        :Klasse="{'menu-icon-disabled': abspielen}"
        @click="vorwärts"></i>
      <i Klasse = "Menüsymbol Symbol nach oben"
        :Klasse="{'menu-icon-disabled': abspielen}"
        @click="GeschwindigkeitSlow"></i>
      <i
        class="Menüsymbol Geschwindigkeit">{{ Optionen.Geschwindigkeit }}</i>
      <i Klasse = "Menüsymbol Symbol nach unten"
        :Klasse="{'menu-icon-disabled': abspielen}"
        @click="GeschwindigkeitQuick"></i>
    </div>
  </div>
</Vorlage>
<Skript>
importiere { dateFormat } von '../util/formatdate.js' // Datumsformat exportiere Standard {
  Daten() {
    zurückkehren {
      intervalTimer: null, // Timer dateTimeIndexes: [], // Datumsliste playing: false, // Wiedergabe activeIndex: 0, // aktuelle Zeitposition hoverIndex: 0 // Zeitposition bei Bewegung der Maus }
  },
  Requisiten: {
    Optionen:
      Typ: Objekt,
      Standard() {
        zurückkehren {}
      }
    },
    Datum/Uhrzeit: {
      Typ: Array,
      Standard() {
        zurückkehren []
      }
    },
    Intervall: {
      Typ: Nummer,
      Standard() {
        Rückgabe 100
      }
    }
  },
  berechnet: {
    HighlightIndex() {
      zurückkehren (
        (dieser.activeIndex === -1 und dieses.dateTimes.length - 1) ||
        dieser.activeIndex
      )
    }
  },
  betrachten:
    Optionen:
      handler() {
        dies.renderTimeline()
      },
      tief: wahr
    },
    spielen() {
      wenn (dieses.spielen) {
        dieser.IntervalTimer = setzeInterval(() => {
          dieser.activeIndex = (dieser.activeIndex + 1) % dieses.dateTimes.length
        }, diese.Optionen.Geschwindigkeit * 1000)
      } anders {
        wenn (dieser.IntervallTimer) {
          Intervall löschen(diesen.IntervallTimer)
          this.intervalTimer = null
        }
      }
    },
    aktivIndex() {
      const Zeit = this.dateTimes[this.activeIndex].split(' ')[0]
      dies.$emit('getDateFun', Zeit)
    }
  },
  montiert() {
    dies.renderTimeline()
    lass das = dies
    Fenster.onresize = Funktion () {
      das.renderTimeline()
    }
  },
  Filter:
    formatDatetime(dateTime) {
      Datum/Uhrzeit = Datumsformat(Datum/Uhrzeit, 'MM.tt')
      Rückgabedatum/-zeit
    }
  },
  Methoden: {
    /**
     * @name: Zeitleiste initialisieren*/
    renderTimeline() {
      // Zeitleistenbreite const timelineWidth = this.$el.offsetWidth - 40
      //Anzahl der Daten const dateTimesSize = this.dateTimes.length
      // Wenn die gesamte Zeit angezeigt wird, die ideale Breite der Zeitleiste const dateTimesWidth = dateTimesSize * this.interval
      // Wenn die Breite der Zeitleiste kleiner als die ideale Breite ist, if (timelineWidth >= dateTimesWidth) {
        this.dateTimeIndexes = this.dateTimes.map((dateTime, index) => {
          Rückgabeindex
        })
        zurückkehren
      }
      // Wie viele Datums-Ticks kann die aktuelle Zeitleistenbreite höchstens aufnehmen? const maxTicks = Math.floor(timelineWidth / this.interval)
      // Anzahl der Intervall-Ticks const gapTicks = Math.floor(dateTimesSize / maxTicks)
      // Notieren Sie den anzuzeigenden Datumsindex this.dateTimeIndexes = []
      für (let t = 0; t <= maxTicks; t++) {
        this.dateTimeIndexes.push(t * gapTicks)
      }
      const len ​​= this.dateTimeIndexes.length
      // Das letzte Element erfordert eine spezielle Behandlung, wenn (Länge > 0) {
        const lastIndex = this.dateTimeIndexes[Länge - 1]
        wenn (letzterIndex + gapTicks > dateTimesSize - 1) {
          this.dateTimeIndexes[Länge - 1] = dateTimesSize - 1
        } anders {
          this.dateTimeIndexes.push(Datum/Uhrzeit-Größe - 1)
        }
      }
    },

    /**
     * @name: Klickskala * @param {time}
     * @param {index}
     */
    tickClick(Zeit, Index) {
      wenn (dieses.spielen) {
        zurückkehren
      }
      this.activeIndex = Index
    },

    /**
     * @name: Abspielen und Pause */
    Wiedergabe umschalten() {
      dies.spielen = !dies.spielen
    },

    /**
     * @name: die Zeit geht einen Tag zurück*/
    rückwärts() {
      wenn (dieses.spielen) {
        zurückkehren
      }
      dieser.activeIndex = dieser.activeIndex - 1
      wenn (this.activeIndex === -1) {
        this.activeIndex = this.dateTimes.length - 1
      }
    },

    /**
     * @name: Die Zeit schreitet um einen Tag voran*/
    nach vorne() {
      wenn (dieses.spielen) {
        zurückkehren
      }
      dieser.activeIndex = (dieser.activeIndex + 1) % dieses.dateTimes.length
    },

    /**
     * @name: langsamer werden */
    GeschwindigkeitLangsam() {
      wenn (diese.abspielen || diese.Optionen.Geschwindigkeit >= diese.Optionen.GeschwindigkeitMax) {
        zurückkehren
      }
      diese.Optionen.Geschwindigkeit = diese.Optionen.Geschwindigkeit + 1
    },

    /**
     *@name: Beschleunigen */
    GeschwindigkeitQuick() {
      wenn (diese.abspielen || diese.Optionen.Geschwindigkeit <= 1) {
        zurückkehren
      }
      diese.Optionen.Geschwindigkeit = diese.Optionen.Geschwindigkeit - 1
    }
  }
}
</Skript>
<style scoped lang="scss">
.Zeitleiste-Haupt {
  Polsterung: 10px;
  Box-Größe: Rahmenbox;
  .Zeitleistenachse {
    Position: relativ;
    Anzeige: Flex;
    Inhalt ausrichten: Abstand herum;
    Polsterung: 8px 0;
    &::vor {
      Inhalt: '';
      Breite: 100 %;
      Höhe: 10px;
      Position: absolut;
      links: 0;
      unten: 8px;
      Anzeige: Inline-Block;
      Hintergrund: rgba(0, 0, 0, 0,5);
    }
    .Achsenelement {
      Position: relativ;
      Anzeige: Flex;
      Flex-Richtung: Spalte;
      Elemente ausrichten: zentrieren;
      .Achsenelement-Tick {
        Anzeige: Inline-Block;
        Breite: 4px;
        Höhe: 20px;
        Hintergrund: rgba(0, 0, 0, 0,5);
        Übergang: Hintergrund 0,3 s;
        Cursor: Zeiger;
        &:schweben {
          Hintergrund: #000;
        }
      }
      .Achsenelement-Tick-Aktiv {
        Hintergrund: #000;
      }
      .Achsenelement-Bezeichnung {
        Position: absolut;
        unten: -30px;
        Leerzeichen: Nowrap;
      }
      .Achsenelement-Tipp {
        Position: absolut;
        oben: -25px;
        Polsterung: 2px 6px;
        Rahmenradius: 2px;
        Hintergrund: rgba(0, 0, 0, 0,5);
        Leerzeichen: Nowrap;
        Farbe: #fff;
      }
    }
  }
  .Zeitleistensteuerung {
    Rand oben: 40px;
    Textausrichtung: zentriert;
    ich {
      Cursor: Zeiger;
      Anzeige: Inline-Block;
      Schriftstil: normal;
    }
    .Menü-Symbol {
      Schriftgröße: 20px;
      Breite: 20px;
      Höhe: 20px;
      Hintergrundgröße: Abdeckung;
      Hintergrundwiederholung: keine Wiederholung;
      &.Symbol-links {
        Hintergrundbild: URL('../assets/icon-left.png');
      }

      &.icon-rechts {
        Hintergrundbild: URL('../assets/icon-right.png');
      }

      &.Symbol-abspielen {
        Hintergrundbild: URL('../assets/icon-play.png');
      }

      &.icon-pause {
        Hintergrundbild: URL('../assets/icon-pause.png');
      }
      &.Symbol nach oben {
        Hintergrundbild: URL('../assets/icon-up.png');
      }

      &.Symbol nach unten {
        Hintergrundbild: URL('../assets/icon-down.png');
      }
      &.Menüsymbol deaktiviert {
        Cursor: kein Tropfen;
        Deckkraft: 0,5;
      }
    }
  }
}
</Stil>

Verwenden von Komponenten

App.vue

<Vorlage>
  <div>
    <h2
      Stil="Rand:0;Textausrichtung:Mitte;">
      {{dieses.date}}
    </h2>
    <Main :options="Optionen"
      :dateTimes="Datum/Uhrzeit"
      @getDateFun="getDateFun"
      :Intervall="Intervall"></Main>
  </div>
</Vorlage>

<Skript>
importiere { dateFormat } aus './util/formatdate.js'
importiere Main aus './components/Main'
Standard exportieren {
  Name: "App",
  Daten() {
    zurückkehren {
      Datum: '',
      Optionen:
        speed: 1, // Geschwindigkeit speedMax: 10 // maximale Geschwindigkeit},
      Intervall: 20, // Das Intervall zwischen den Tagen dateTimes: [
        '03-04',
        '03-05',
        '03-06',
        '03-07',
        '03-08',
        '03-09',
        '03-10',
        '03-11',
        '03-12',
        '03-13'
      ]
    }
  },
  Komponenten:
    Hauptsächlich
  },
  montiert() {
    // Daten der letzten 10 Tage abrufen let list = []
    für (sei i = 0; i < 10; i++) {
      Liste.unshift(
        Datumsformat(
          neues Datum(
            neues Datum ().setDate(neues Datum ().getDate () - i)
          ).toLocaleDateString(),
          „TT-MM“
        )
      )
    }
    dieses.Datum = Liste[0]
    this.dateTimes = Liste
  },
  Methoden: {
    // Erhalte den von der übergeordneten Komponente übergebenen Wert getDateFun(time) {
      console.log(Zeit)
      dieses.Datum = Uhrzeit
    },
  }
}
</Skript>

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
  • So zeichnen Sie die Zeitleiste mit Vue+Canvas
  • 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

<<:  Hinweise zu Linux-Systembefehlen

>>:  Detaillierte Erklärung zur Verwendung benutzerdefinierter Parameter in MySQL

Artikel empfehlen

Einige Hinweise zur MySQL-Self-Join-Deduplizierung

Lassen Sie mich kurz das Funktionsszenario erklär...

Javascript-Countdown-Eingabeaufforderungsfeld

In diesem Artikelbeispiel wird der spezifische Ja...

Analysieren Sie den Unterschied zwischen berechnet und beobachtet in Vue

Inhaltsverzeichnis 1. Einführung in die Computert...

Beispiel für eine dynamische Sperre der IP-Blacklist von Nginx

Wenn eine Website böswillig angefragt wird, ist d...

43 Webdesign-Fehler, auf die Webdesigner achten sollten

Dies ist ein Artikel über die Benutzerfreundlichk...

Detaillierte Erläuterung der Anwendungsbeispiele für Vue-Router 4

Inhaltsverzeichnis 1. Installieren und erstellen ...

Zusammenfassung und Praxis des Javascript-Prototyp-Kettendiagramms

Inhaltsverzeichnis Prototypenkette Wir können ein...

Linux Dateisystemtyp anzeigen Beispielmethode

So überprüfen Sie den Dateisystemtyp einer Partit...

Vue3.0 verwendet das Plug-In vue-grid-layout, um Drag-Layout zu implementieren

Inhaltsverzeichnis 1. Plugins 2. Zwischenspiel 3....

Beispiel für das Erreichen eines Deckeneffekts mit dem WeChat-Applet

Inhaltsverzeichnis 1. Umsetzung 2. Probleme 3. Üb...

Bestimmen Sie anhand von Beispielen, ob das MySQL-Update die Tabelle sperrt

Zwei Fälle: 1. Mit Index 2. Ohne Index Voraussetz...

Das WeChat-Applet implementiert einen Videoplayer, der einen Bullet-Screen sendet

In diesem Artikel wird der spezifische Code für d...

Syntax und Beispielanalyse der JavaScript-Array-Methode „reduce()“

Vorwort Die Methode „reduce()“ erhält eine Funkti...