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

React Native realisiert den Auf- und Ab-Pull-Effekt der Überwachungsgeste

React Native implementiert die Überwachungsgeste ...

Sprechen Sie über wichtige Unterverzeichnisprobleme im Linux-System

/etc/fstab Partitionen/Festplatten automatisch mo...

Analyse der Vor- und Nachteile von gespeicherten MySQL-Prozeduren

MySQL Version 5.0 begann, gespeicherte Prozeduren...

Implementierung der automatischen Vervollständigung von Docker-Befehlen

Vorwort Ich weiß nicht, wie lange dieser Freund D...

Detaillierte Erklärung der Lösung für den 404-Fehler von Tomcat

Das 404-Problem tritt im Tomcat-Test auf. Die Pro...

So ermitteln Sie die Höhe des MySQL InnoDB B+-Baums

Vorwort Der Grund, warum die InnoDB-Engine von My...

Vue-Router-Verlaufsmodus, serverseitiger Konfigurationsprozess-Datensatz

Geschichtsroute Der Verlaufsmodus bezieht sich au...

Verwenden Sie CSS, um die Breite von INPUT in TD festzulegen

Als ich kürzlich mit C# ein Webprogramm erstellte,...

Beispielcode zur Implementierung der Alipay-Sandbox-Zahlung mit Vue+SpringBoot

Laden Sie zunächst eine Reihe von Dingen aus der ...

Detailliertes Tutorial zur Installation von InfluxDB in Docker (Leistungstest)

1. Voraussetzungen 1. Das Projekt wurde bereitges...