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

Detaillierte Erklärung der langsamen Remote-Verbindung von Navicat zu MySQL

Die endgültige Lösung ist im letzten Bild Wenn Si...

Einige Tipps zur Beschleunigung der Entwicklung von WeChat-Miniprogrammen

1. Erstellen Sie eine Seite mit app.json Gemäß un...

Informationen zu WSL-Konfigurations- und Änderungsproblemen in Docker

https://docs.microsoft.com/en-us/windows/wsl/wsl-...

So verwenden Sie js, um festzustellen, ob eine Datei UTF-8-codiert ist

Konventionelle Lösung Verwenden Sie FileReader, u...

Vue realisiert den Gleitkreuzeffekt des Balles

In diesem Artikelbeispiel wird der spezifische Co...

MySQL verwendet Aggregatfunktionen zum Abfragen einer einzelnen Tabelle

Aggregatfunktionen Wirkt auf einen Datensatz ein ...

Installieren Sie JDK1.8 in einer Linux-Umgebung

Inhaltsverzeichnis 1. Installationsumgebung 2. In...

Netzwerkmanagement und Netzwerkisolationsimplementierung von Docker-Containern

1. Docker-Netzwerkverwaltung 1. Docker-Container-...

Vue implementiert eine Zeit-Countdown-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Zusammenfassung der Unterschiede zwischen Get- und Post-Anfragen in Vue

Die Betriebsumgebung dieses Tutorials: Windows 7-...