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

jQuery zum Erzielen eines gleitenden Treppeneffekts

In diesem Artikel wird der spezifische Code von j...

Detailliertes Tutorial zur Installation von Mysql5.7.19 auf Centos7 unter Linux

1. MySQL herunterladen URL: https://dev.mysql.com...

So verwenden Sie Bind zum Einrichten eines DNS-Servers

DNS (Domain Name Server) ist ein Server, der Domä...

MySql fügt Daten erfolgreich ein, meldet aber [Err] 1055 Fehlerlösung

1. Frage: Ich habe in diesen Tagen Einfügevorgäng...

Docker stellt Mysql, .Net6, Sqlserver und andere Container bereit

Inhaltsverzeichnis Installieren Sie Docker unter ...

Analyse gängiger Anwendungsbeispiele von MySQL-Prozessfunktionen

Dieser Artikel veranschaulicht anhand von Beispie...

CentOS 8 ist jetzt verfügbar

CentOS 8 ist jetzt verfügbar! Die Versionen von C...

So stellen Sie Ihre erste Anwendung mit Docker bereit

Im vorherigen Artikel haben Sie Docker Desktop in...

Hinweise zur Verwendung der verknüpften Liste des Linux-Kernel-Gerätetreibers

/******************** * Anwendung von verknüpften...

Detaillierte Erklärung der berechneten Eigenschaften in Vue

Inhaltsverzeichnis Interpolationsausdrücke Method...