better-scroll 來做下拉刷新和 上拉加載 特別方便。 安裝好vue腳手架和better-scroll 之后 直接復制粘貼就可以看到效果了
<template> <div class="rules"> <p class="drop-down" v-if="dropDown">松手刷新數據...</p> <div class="bscroll" ref="bscroll"> <div class="bscroll-container"> <ul> <li>1</li><li>1</li><li>1</li> <li>1</li><li>1</li><li>1</li> <li>1</li><li>1</li><li>1</li> <li>1</li><li>1</li><li>1</li> <li>1</li><li>1</li><li>1</li> <li>1</li><li>1</li><li>1</li> <li>1</li><li>1</li><li>1</li> </ul> </div> </div> <!-- <p class="x">加載更多...</p> --> </div> </template> <script> import BScroll from 'better-scroll' export default { data(){ return{ dropDown:false } }, mounted(){ this.scrollFn() }, methods:{ scrollFn(){ this.$nextTick(() => { if (!this.scroll) { this.scroll = new BScroll(this.$refs.bscroll, { click: true, scrollY: true, probeType: 3 }); }else{ this.scroll.refresh(); } this.scroll.on('scroll', (pos) => { console.log(pos.y,this.dropDown) //如果下拉超過50px 就顯示下拉刷新的文字 if(pos.y>50){ this.dropDown = true }else{ this.dropDown = false } }) //touchEnd(手指離開以后觸發) 通過這個方法來監聽下拉刷新 this.scroll.on('touchEnd', (pos) => { // 下拉動作 if(pos.y > 50){ console.log("下拉刷新成功") this.dropDown = false } //上拉加載 總高度>下拉的高度+10 觸發加載更多 if(this.scroll.maxScrollY>pos.y+10){ console.log("加載更多") //使用refresh 方法 來更新scroll 解決無法滾動的問題 this.scroll.refresh() } console.log(this.scroll.maxScrollY+"總距離----下拉的距離"+pos.y) }) console.log(this.scroll.maxScrollY) }); } } } </script> <style scoped> .bscroll{ width: 100%; height:500px; overflow: hidden; } .bscroll-container{ background: #ff0000; } .drop-down{ position: absolute; top:0px; lefT:0px; width: 100%; height: 50px; line-height:50px; text-align: center; font-size:0.8rem; color:#CCC; } </style>