suchen
HeimWeb-Frontendjs-TutorialDas mobile Terminal von vue.js implementiert Pull-Up-Laden und Pull-Down-Aktualisierung

Dieses Mal bringe ich Ihnen das mobile Terminal vue.js zum Implementieren von Pull-Up, Laden, Pull-Down und Aktualisieren. Was sind die Vorsichtsmaßnahmen für die Implementierung von Pull-Up, Laden, Pull-Down? und auf dem mobilen Terminal von vue.js aktualisieren. Das Folgende ist ein praktischer Fall.

Genau wie beim horizontalen Scrollen verwenden wir immer noch die Better-Scroll-Bibliothek, um es zu implementieren. Da better auf eine neue Version aktualisiert wurde, war es zuvor Version 0.7. Nach dem Update stellte ich fest, dass es jetzt Version 1.2.6 ist und es weitere neue Versionen gibt. Da es sich um eine relativ einfach zu verwendende API handelt, habe ich auch den vorherigen Code umgeschrieben und die neue API verwendet, um das Pull-up-Laden und die Pull-down-Aktualisierung zu implementieren.

Schreiben Sie zuerst den Grundstil, der hier übersprungen wird, und stellen Sie dann die Better-Scroll-Bibliothek vor

import BScroll from 'better-scroll'

Zweitens können Sie beim Instanziieren des Bildlaufs im gemountetenLebenszyklus die Daten abrufen und dann neu, oder Sie können zuerst neu erstellen und dann nach dem Abrufen der Daten die Aktualisierung aufrufen.

Sie müssen während der Instanz einen Konfigurationsparameter übergeben. Weitere Informationen finden Sie in der Dokumentation. Hier sind nur zwei wichtige Punkte:

//是否开启下拉刷新,可传入true或者false,如果需要更多配置可以传入一个对象
pullDownRefresh:{
  threshold:80,
  stop:40
}
//是否开启上拉加载,同上,上拉无stop参数,这里需要注意是负数
pullUpLoad:{
  threshold:-80,
}
/**
 * 
 * @param threshold 触发事件的阀值,即滑动多少距离触发
 * @param stop 下拉刷新后回滚距离顶部的距离(为了给loading留出一点空间)
 */

Die oben genannten Zahlen erscheinen mir persönlich angemessener, aber da ich Taobao flexible.js zur Anpassung verwende, führt dies dazu: Der Abstand von 80 ist unter Android angemessen, unter iPhone 6s jedoch aufgrund der Skalierung 3 Jetzt sind 80 auf dem iPhone 6s etwa 27.

Daher müssen bei Bildschirmen mit unterschiedlichen Zoomstufen die entsprechenden Zoomverhältnisse multipliziert werden.

Taobao flexible.js verfügt tatsächlich bereits über diese Methode zum Ermitteln des Bildschirmzoomverhältnisses. Hier können Sie sie direkt daraus übernehmen:

//在util.js里面加一个方法
export function getDeviceRatio(){
  var isAndroid = window.navigator.appVersion.match(/android/gi);
  var isIPhone = window.navigator.appVersion.match(/iphone/gi);
  var devicePixelRatio = window.devicePixelRatio;
  var dpr;
  if (isIPhone) {
    // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案
    if (devicePixelRatio >= 3) {        
      dpr = 3;
    } else if (devicePixelRatio >= 2){
      dpr = 2;
    } else {
      dpr = 1;
    }
  } else {
    // 其他设备下,仍旧使用1倍的方案
    dpr = 1;
  }
  return dpr
}
import{ DEVICE_RATIO} from '../base/js/api.js'
/*获取当前缩放比*/
const DEVICE_RATIO=getDeviceRatio();
 /*下拉配置*/
const DOWN_CONFIG={
 threshold:80*DEVICE_RATIO,
 stop:40*DEVICE_RATIO
}
/*上拉配置*/
const UP_CONFIG={
 threshold:-80*DEVICE_RATIO,
}
this.scroller = new BScroll(scrollWrap,{
 click:true,
 probeType:3,
 pullDownRefresh:DOWN_CONFIG,
 pullUpLoad:UP_CONFIG
});

Nach der Instanziierung besteht der nächste Schritt darin, auf Pull-Up- und Pull-Down-Ereignisse zu warten. betterScroll hat einige neue Events hinzugefügt, die wichtigsten sind:

/*下拉事件*/
this.scroller.on('pullingDown',()=> {});
/*上拉事件*/
this.scroller.on('pullingUp',()=>{});

Nachdem wir das Pull-Up- oder Pull-Down-Ereignis ausgelöst haben, müssen wir this.scroller.finishPullDown() oder this.scroller.finishPullUp() aufrufen, um zu benachrichtigen, dass das Better-Scroll-Ereignis abgeschlossen ist.

Der allgemeine Ablauf ist wie folgt:

this.scroller.on('pullingDown',()=> {
  
  <!-- 1. 发送请求获取数据 -->
  
  <!-- 2. 获取成功后,通知事件完成 -->
  
  <!-- 3. 修改data数据,在nextTick调用refresh -->
});

Normalerweise müssen wir nach Abschluss des Vorgangs die Aktualisierungsmethode manuell auslösen, um die scrollbare Entfernung neu zu berechnen, damit wir eine Uhr schreiben können, um Änderungen in den Daten zu überwachen, sodass wir nur die Daten ändern und nicht aufrufen müssen Aktualisierungsmethode jedes Mal nach der Verarbeitung der Daten.

watch:{
 dataList(){
  this.$nextTick(()=>{
   this.scroller.refresh(); 
  }) 
 }
},

Wenn die von Ihnen verwendete Version noch alt ist, können Sie während des on(scroll)-Ereignisses eine Entscheidung treffen, um die Funktion

this.scroller.on("scroll",(pos)=>{ 
  //获取整个滚动列表的高度
  var height=getStyle(scroller,"height");
  //获取滚动外层wrap的高度
  var pageHeight=getStyle(scrollWrap,"height");
  //触发事件需要的阀值
  var distance=80*DEVICE_RATIO;
  //参数pos为当前位置
  if(pos.y>distance){ 
    //console.log("下拉");
    //do something
   
  }else if(pos.y-pageHeight<p style="text-align: left;"> zu implementieren
Um mehrere Auslöser zu verhindern, müssen Sie 2 Schalter hinzufügen;</p><pre class="brush:php;toolbar:false">var onPullUp=true;
var onPullDown=true;

Setzen Sie jedes Mal, wenn ein Ereignis ausgelöst wird, den entsprechenden Schalter auf „false“ und setzen Sie ihn nach Abschluss des Vorgangs auf „true“ zurück. Andernfalls lösen mehrere Pulldowns oder Pullups mehrere Ereignisse aus. Durch Einstellen des Schalters können Sie sicherstellen, dass jeweils nur ein Ereignis ausgeführt wird.

Verpacken Sie es abschließend in eine Komponente

 <template>
  <p> 
    </p>
<p>    
      <slot></slot>     
    </p>   
  
</template>

Da der spezifische Inhalt, der gescrollt werden muss, für jede Seite unterschiedlich ist, wird für die Verteilung ein Slot verwendet.

Die von der Komponente benötigten Parameter werden vom übergeordneten Element übergeben, und der Standardwert wird über prop

 export default {
  props: {
   dataList:{
    type: Array,
    default: []
   },
   probeType: {
    type: Number,
    default: 3
   },
   click: {
    type: Boolean,
    default: true
   },  
   pullDownRefresh: {
    type: null,
    default: false
   },
   pullUpLoad: {
    type: null,
    default: false
   },  
  }

empfangen und festgelegt Nachdem die Komponente gemountet wurde, verarbeitet sie das Ereignis nicht direkt, wenn das Ereignis ausgelöst wird, sondern sendet ein Ereignis an das übergeordnete Element. Das übergeordnete Element empfängt das Ereignis über die Vorlage v-on und verarbeitet die nachfolgende Logik

mounted() {
  this.scroll = new BScroll(this.$refs.wrapper, {
      probeType: this.probeType,
      click: this.click,    
      pullDownRefresh: this.pullDownRefresh,
      pullUpLoad: this.pullUpLoad,
    })
  this.scroll.on('pullingUp',()=> {
    if(this.continuePullUp){
      this.beforePullUp();
      this.$emit("onPullUp","当前状态:上拉加载");
    }
  });
  this.scroll.on('pullingDown',()=> {
    this.beforePullDown();
    this.$emit("onPullDown","当前状态:下拉加载更多");
  }); 
}

Wenn Sie die übergeordnete Komponente verwenden, müssen Sie den Konfigurationsparameter Props übergeben und die von der untergeordneten Komponente ausgegebenen Ereignisse verarbeiten und das Slot-Tag

  <scroller>
    <ul>
       <router-link>
          <p>
             <img  alt="Das mobile Terminal von vue.js implementiert Pull-Up-Laden und Pull-Down-Aktualisierung" >        
          </p>
          <p>
            </p>
<p>{{v.title}}</p>
            <p>导演:{{filterDirectors(v.directors)}}</p>
            <p>年份:{{v.year}}<span>{{v.stock}}</span></p>
            <p>类别:{{v.genres.join(" / ")}}<span></span></p>
            <p>评分:<span>{{v.rating.average}}分</span></p>
                       
        </router-link>
     </ul>     
   </scroller>

durch spezifischen Inhalt ersetzen. Die übergeordnete Komponente kann die untergeordnete Komponente über this.$refs.xxx abrufen und die Methode in der untergeordneten Komponente aufrufen Der vollständige Inhalt der Scroller-Komponente lautet wie folgt:

 computed:{
    scrollElement(){
      return this.$refs.scroll
    }
  }

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Für weitere spannende Inhalte achten Sie bitte auf andere verwandte Artikel auf der chinesischen PHP-Website!

   <template>
     <p> 
       </p>
<p>    
         <slot></slot>
         </p>
<p>
           <pullingword>0" :loadingWord="beforePullUpWord"></pullingword>
           <loading></loading>
         </p>    
        
       <transition>
         <loading></loading>
       </transition> 
     
   </template>
   <script>
    import BScroll from &#39;better-scroll&#39;
    import Loading from &#39;./loading.vue&#39;
    import PullingWord from &#39;./pulling-word&#39;
    const PullingUpWord="正在拼命加载中...";
    const beforePullUpWord="上拉加载更多";
    const finishPullUpWord="加载完成";
    const PullingDownWord="加载中...";
    export default {
     props: {
      dataList:{
       type: Array,
       default: []
      },
      probeType: {
       type: Number,
       default: 3
      },
      click: {
       type: Boolean,
       default: true
      },  
      pullDownRefresh: {
       type: null,
       default: false
      },
      pullUpLoad: {
       type: null,
       default: false
      },  
     },
     data() {
       return { 
         scroll:null,
         inPullUp:false,
         inPullDown:false,
         beforePullUpWord,
         PullingUpWord,
         PullingDownWord,
         continuePullUp:true
       }
     },
      
     mounted() {
       setTimeout(()=>{
         this.initScroll();
         this.scroll.on(&#39;pullingUp&#39;,()=> {
           if(this.continuePullUp){
             this.beforePullUp();
             this.$emit("onPullUp","当前状态:上拉加载");
           }
         });
         this.scroll.on(&#39;pullingDown&#39;,()=> {
           this.beforePullDown();
           this.$emit("onPullDown","当前状态:下拉加载更多");
         });
       },20)
       
     },
     methods: {
       initScroll() {
         if (!this.$refs.wrapper) {
           return
         }
         this.scroll = new BScroll(this.$refs.wrapper, {
           probeType: this.probeType,
           click: this.click,    
           pullDownRefresh: this.pullDownRefresh,
           pullUpLoad: this.pullUpLoad,
         })
       },
       beforePullUp(){
         this.PullingUpWord=PullingUpWord;
         this.inPullUp=true;
       }, 
       beforePullDown(){
         this.disable();
         this.inPullDown=true;
       },
       finish(type){
         this["finish"+type]();
         this.enable();
         this["in"+type]=false; 
       },
       disable() {
         this.scroll && this.scroll.disable()
       },
       enable() {
         this.scroll && this.scroll.enable()
       },
       refresh() {
         this.scroll && this.scroll.refresh()
       }, 
       finishPullDown(){
         this.scroll&&this.scroll.finishPullDown()
       },
       finishPullUp(){
         this.scroll&&this.scroll.finishPullUp()
       },   
     },
        
     watch: {
       dataList() {        
         this.$nextTick(()=>{
           this.refresh();            
         }) 
       }
     },
     components: {
       Loading,
       PullingWord
     }
    }
   </script>
Empfohlene Lektüre:


Das obige ist der detaillierte Inhalt vonDas mobile Terminal von vue.js implementiert Pull-Up-Laden und Pull-Down-Aktualisierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Verständnis der JavaScript -Engine: ImplementierungsdetailsVerständnis der JavaScript -Engine: ImplementierungsdetailsApr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitPython vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitApr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Python gegen JavaScript: Community, Bibliotheken und RessourcenPython gegen JavaScript: Community, Bibliotheken und RessourcenApr 15, 2025 am 12:16 AM

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Von C/C nach JavaScript: Wie alles funktioniertVon C/C nach JavaScript: Wie alles funktioniertApr 14, 2025 am 12:05 AM

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

JavaScript -Engines: Implementierungen vergleichenJavaScript -Engines: Implementierungen vergleichenApr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft