Pull-Down-Aktualisierung und Pull-Up-Ladekomponenten basierend auf Vue-Kapselung

Pull-Down-Aktualisierung und Pull-Up-Ladekomponenten basierend auf Vue-Kapselung

Basierend auf Vue und nativer JavaScript-Kapselung werden Pulldown-Aktualisierungs- und Pullup-Ladekomponenten zu Ihrer Referenz bereitgestellt. Die spezifischen Inhalte sind wie folgt

  • Im upTilte-Slot wird der benutzerdefinierte Inhalt der Pulldown-Aktualisierung platziert
  • Im downTilte-Slot werden die benutzerdefinierten Inhalte abgelegt, die vom Pull-up geladen wurden.
  • Der Standard-Slot ist der Listeninhaltsbereich

Der Komponentencode lautet wie folgt

<Vorlage>
  <div Klasse="aktualisieren" id="aktualisieren">
    <slot name="upTilte"></slot>
    <Steckplatz></Steckplatz>
    <slot name="downTilte"></slot>
  </div>
</Vorlage>

<Skript>
Standard exportieren {
  Name: "PullupOrPulldownRefresh",
  Requisiten: {
    // Maximale Bewegungsdistanz maxMove: {
      Typ: Nummer,
      Standard: 300
    },
    // Dämpfungskoeffizient Reibung: {
      Typ: Nummer,
      Standard: 0,3
    }
  },
  Daten() {
    zurückkehren {
      startY: 0,
      ul: null,
      Unentschieden: null,
      nach oben: null,
      nach unten: null,
      y: 0 // Trägheitsrückpralldistanz}
  },
  montiert() {
    dies.$nextTick(() => {
      this.draw = document.getElementById('aktualisieren')
      dies.ul = dies.draw.children[1]
      dies.oben = dies.zeichnen.Kinder[0]
      dies.nach unten = dies.zeichnen.Kinder[2]
      dies.draw.addEventListener('touchstart', dies.touchstart)
      this.draw.addEventListener('touchmove', this.touchmoveEvent)
      this.draw.addEventListener('touchend', this.touchendEvent)
    })
  },
  Methoden: {
    // Touch-Start-Ereignis touchstart(Ereignis) {
      this.startY = event.changedTouches[0].clientY
    },
    // Berühren Sie das Bewegungsereignis touchmoveEvent(event) {
      const height = this.ul.clientHeight - this.draw.clientHeight
      wenn (Höhe === this.draw.scrollTop || this.draw.scrollTop === 0) {
        var a = event.changedTouches[0].clientY - this.startY
        dies.y = a <= dies.maxMove ? a : dies.maxMove
        // Um ​​das Verzögerungsproblem zu beseitigen, müssen Sie den Übergangseffekt löschen this.ul.style.transition = 'none'
        this.ul.style.transform = 'translateY(' + this.friction * this.y + 'px)'
        // Status ändern const upHeight = -this.up.clientHeight + this.friction * this.y
        // Zum Starten nach unten ziehen, wenn (this.friction * this.y > 0) (this.setStatus(this.friction * this.y), this.up.style.transition = 'none', this.up.style.transform = 'translateY(' + upHeight + 'px) translateX(-50%)')
        // Hochziehen und starten, wenn (this.friction * this.y < 0) (this.setStatus(this.friction * this.y), this.down.style.transition = 'none', this.down.style.marginTop = this.friction * this.y + 'px')
      }
    },
    // Touch-Ende-Ereignis touchendEvent(event) {
      wenn (diese.Friktion * dies.y >= 50) dies.$emit('RefreshUp', diese.Friktion * dies.y)
      sonst wenn (diese.reibung * dies.y < -50) dies.$emit('RefreshDown', diese.reibung * dies.y)
      sonst this.resetStyle()
    },
    // Zurücksetzen und Übergangseffekte hinzufügen resetStyle() {
      this.ul.style.transition = "Transformation .6s"
      this.ul.style.transform = "translateY(" + 0 + "px)"
      this.up.style.transition = "alle .6s"
      this.up.style.transform = 'übersetzeY(-' + this.up.clientHeight + 'px) übersetzeX(-50%)'
      this.down.style.transition = "alle .6s"
      this.down.style.marginTop = -this.down.clientHeight + 'px'
    },
    // Setze den Aktualisierungsstatus setStatus(y) {
      dies.$emit('setStatus', y)
    }
  }
}
</Skript>

<style lang="scss">
.aktualisieren {
  Breite: 100 %;
  Höhe: 100vh;
  Rand: 2px durchgezogen #ccc;
  Position: relativ;
  Überlauf: versteckt;
  Überlauf: automatisch;
  Position: fest;
  ul {
    Zoom: 1;
    Polsterung: 0 – 10 %;
  }

  ul::nach {
    Inhalt: '';
    Anzeige: Block;
    Sichtbarkeit: versteckt;
    Höhe: 0;
    klar: beides;
  }

  li {
    Listenstil: keiner;
    Breite: 100 %;
    Höhe: 50px;
    Zeilenhöhe: 50px;
    Textausrichtung: zentriert;
  }
  .UpRefresh {
    Position: absolut;
    links: 50%;
    transformieren: übersetzenX(-50%);
    Z-Index: -9;
  }
  .DownRefresh {
    Position: relativ;
    links: 50%;
    transformieren: übersetzenX(-50%);
    Rand oben: -10px;
    Z-Index: -9;
  }
}
</Stil>
  • So verwenden Sie Komponenten
  • Reibung ist der Reibungskoeffizient
  • @RefreshUp löst das Ereignis aus, wenn der Benutzer bis zu einer bestimmten Distanz nach unten zieht
  • @RefreshDown löst das Ereignis aus, wenn das Gerät bis zu einer bestimmten Distanz nach oben gezogen wird
  • @setStatus ist eine Methode zum Ändern des Aktualisierungsstatus
<Vorlage>
  <div>
    <PullupOrPulldownRefresh
      ref="PullupOrPulldownRefresh"
      :maxMove="maxMove"
      :Reibung="Reibung"
      @RefreshUp="Aktualisieren"
      @RefreshDown="AktualisierenNach unten"
      @setStatus="Status festlegen"
    >
      <Vorlage v-slot:upTilte>
        <!-- <div class="UpRefresh" v-show="isUpRefresh">{{ Uptitle }}</div> -->
        <div Klasse="UpRefresh" v-show="isUpRefresh">
          <img :src="require('@/assets/logo.png')" alt="" />
          <p>{{ Uptitle }}</p>
        </div>
      </Vorlage>
      <ul>
        <li
          v-for="(Element, Index) in Daten"
          :Schlüssel="Index"
          Stil="Hintergrund: orange"
        >
          {{ Artikel }}
        </li>
      </ul>
      <Vorlage v-slot:downTilte>
        <div Klasse="DownRefresh" v-show="isDownRefresh">{{ Downtitle }}</div>
      </Vorlage>
    </PullupOrPulldownRefresh>
  </div>
</Vorlage>

<Skript>
Standard exportieren {
  Daten() {
    zurückkehren {
      maxBewegung: 300,
      Reibung: 0,3,
      Daten: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
      isUpRefresh: false,
      isDownRefresh: false,
      Downtitle: 'Ziehen Sie nach oben, um mehr zu laden',
      Obertitel: „Zum Aktualisieren nach unten ziehen“
    }
  },
  Methoden: {
    setStatus(y) {
      wenn (y && y > 0) {
        this.isUpRefresh = true
        this.Uptitle = 'Zum Aktualisieren nach unten ziehen'
        if (y >= 50) this.Uptitle = 'Zum Aktualisieren loslassen'
        zurückkehren
      }
      this.isDownRefresh = true
      this.Downtitle = 'Ziehen Sie nach oben, um mehr zu laden'
      if (y <= -50) this.Downtitle = 'Loslassen, um mehr zu laden'
    },
    Aktualisieren(y) {
      wenn (!y) zurückgeben
      wenn (y >= 50) {
        this.Uptitle = 'Aktualisieren'
        setzeTimeout(() => {
          für (var i = 1; i <= 10; i++) {
            diese.Daten.push(diese.Daten[diese.Datenlänge - 1] + 1)
          }
          this.$refs.PullupOrPulldownRefresh.resetStyle() // Rebound zurücksetzen}, 1000)
      }
    },
    RefreshDown(y) {
      wenn (!y) zurückgeben
      wenn (y <= -50) {
        this.Downtitle = "Wird geladen"
        setzeTimeout(() => {
          für (var i = 1; i <= 10; i++) {
            diese.Daten.push(diese.Daten[diese.Datenlänge - 1] + 1)
          }
          this.$refs.PullupOrPulldownRefresh.resetStyle() // Rebound zurücksetzen}, 1000)
      }
    }
  }
}
</Skript>

<style scoped lang="scss">
.UpRefresh img{
  Breite: 30px;
}
</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:
  • Beheben Sie die Fallstricke bei der Verwendung des Vant-Frameworks für H5 (zum Aktualisieren nach unten ziehen, zum Laden nach oben ziehen usw.).
  • Vue-Beispielcode zum Pull-Up-Laden und Pull-Down-Aktualisieren basierend auf Vant
  • Verwendung von Van-List in Vant
  • Eine kurze Diskussion über das Problem des Pull-Up-Ladens und der Pull-Down-Aktualisierung in Vant-List

<<:  Beispielüberprüfung MySQL | Update-Feld mit demselben Wert zeichnet Binlog auf

>>:  So stellen Sie ein Vue-Projekt mit Docker-Image + nginx bereit

Artikel empfehlen

So konfigurieren Sie Benutzerrollenberechtigungen in Jenkins

Die Jenkins-Konfiguration von Benutzerrollenberec...

So legen Sie die Tabellenbreite in IE8 und Chrome fest

Wenn die oben genannten Einstellungen in IE8 und C...

Detaillierte Erklärung, wie Angular mit unerwarteten Ausnahmefehlern umgeht

Vorne geschrieben Unabhängig davon, wie gut der C...

Spezifische Verwendung des Linux-gcc-Befehls

01. Befehlsübersicht Der Befehl gcc verwendet den...

Beispielcode zum Konvertieren von Videos mit der ffmpeg-Befehlszeile

Bevor Sie mit dem Haupttext dieses Artikels begin...

MySQL startet langsames SQL und analysiert die Ursachen

Schritt 1. Aktivieren Sie die langsame MySQL-Abfr...

Konfigurationsmethode für die Mehrfachauswahlfunktion von React Mouse

Im Allgemeinen verfügen Listen über Auswahlfunkti...

So stellen Sie Dienste in Windows Server 2016 bereit (Grafisches Tutorial)

Einführung Wenn eine große Anzahl an Systemen ins...

Vue implementiert Baumtabelle

In diesem Artikelbeispiel wird der spezifische Co...

Einführung und detaillierte Verwendung von React Fragment

Inhaltsverzeichnis Vorwort Motivation für Fragmen...