better-scroll封裝上拉刷新,下拉加載更多功能


一、better-scroll的初始使用

首先下載

cnpm install better-scroll

在代碼中引用

import BScroll from ‘better-scroll’

接下來便是new

let wrapper = document.querySelector('.wrapper')
let scroll = new BScroll(wrapper)//wrapper是外層較小的那個盒子

⚠️:使用原理必須是外層有一個較小的盒子,外層有一個較大的盒子,這樣才可以滾動起來。

 

同時new BScroll的時候需要獲取真實的DOM元素,所以需要在mounted生命周期內進行。

 

二、特點

會使click事件失效

 會使tap事件失效

解決方案,在new的時候,設置click,tap為true

1 mounted(){
2         this.scroll = new BScroll(this.$refs.wrapper,{
3             tap:true,
4             click:true
5         })
6     },

三、對better-scroll的二次封裝

在better-scroll的封裝文件中(vue)

 1 <template>
 2     <div class="wrapper" ref="wrapper">
 3         <slot></slot>
 4     </div>
 5 </template>
 6 
 7 <script>
 8 import BScroll from "better-scroll"
 9 export default {
10     name:"alley-BScroll",
11     mounted(){
12         this.scroll = new BScroll(this.$refs.wrapper,{
13             tap:true,
14             pullDownRefresh:true,//這個配置用於做下拉刷新功能,默認為 false。當設置為 true 或者是一個 Object 的時候,可以開啟下拉刷新
15             pullUpLoad:true//這個配置用於做上拉加載功能,默認為 false。當設置為 true 或者是一個 Object 的時候,可以開啟上拉加載
16         })
17     },
18     methods:{
19         //下拉刷新加載數據
20         handlepullingDown(callback){
21              this.scroll.on("pullingDown",()=>{
22                  callback();
23              })
24         },
25         //下拉刷新加載數據完畢通知better-scroll
26         handlefinishPullDown(){
27             this.scroll.finishPullDown();//通知bettwer-scroll已經加載完畢
28             this.scroll.refresh();//重新計算 better-scroll,當 DOM 結構發生變化的時候務必要調用確保滾動的效果正常。
29         },
30         //上拉加載更多
31         handlepullingUp(callback){
32             this.scroll.on("pullingUp",()=>{
33                 callback()
34             })
35         },
36         handlefinishPullUp(){
37             this.scroll.finishPullUp();
38             this.scroll.refresh();
39         }
40     }
41 }
42 </script>
43 
44 
45 <style>
46     .wrapper{
47         height: 100%;
48     }
49 </style>

 

在要使用該使用該封裝的組件,只需要用這個組件將要出現效果的元素包裹起來即可,如下所示,包起來后,內容便可以有彈性的滑動了。

 1 <alley-BScroll ref="alleyscroll">
 2       <div class="movie_body">
 3         <div
 4           class="movie_item"
 5           v-for="(item,index) in movieList"
 6           :key="index"
 7           @click="handleclick()"
 8         >
 9           <div class="movie_item_pic">
10             <img :src="item.img |ToImg('128.180')" />
11           </div>
12           <div class="movie_item_info">
13             <h2>{{item.nm}}</h2>
14             <p>
15               觀眾評:
16               <span class="grade">{{item.sc}}</span>
17             </p>
18             <p>
19               主演:
20               <span>{{item.star}}</span>
21             </p>
22             <p>
23               <span>{{item.showInfo}}</span>
24             </p>
25           </div>
26           <div
27             :class="item.globalReleased?'movie_item_btn asale':'movie_item_btn ticket'"
28           >{{item.globalReleased?'購票':'預售'}}</div>
29         </div>
30       </div>
31     </alley-BScroll>

接下來便可以調用封裝組件里的方法了,因為需要獲取DOM元素,便要寫在mounted這個生命周期內。

 1 mounted(){
 2   //下拉刷新
 3     this.$refs.alleyscroll.handlepullingDown(async ()=>{
 4       
 5         let n = parseInt(Math.random()*7);
 6         let arr = [10,1,20,40,50,55,59]
 7 
 8 
 9 
10         let data = await movie_now_api(arr[n]);
11         this.movieList = data.data.movieList;
12         sessionStorage.setItem("movieList",JSON.stringify(data.data.movieList))
13         this.$refs.alleyscroll.handlefinishPullDown();//下拉刷新完成后,通知better-scroll,下拉刷新已經完成。
14     })
15 
16 
17     //上拉加載更多
18     this.$refs.alleyscroll.handlepullingUp(async ()=>{
19         let n = parseInt(Math.random()*7);
20         let arr = [10,1,20,40,50,55,59]
21         let data = await movie_now_api(arr[n]);
22         this.movieList = [...this.movieList,...data.data.movieList];
23         sessionStorage.setItem("movieList",JSON.stringify(data.data.movieList))
24         this.$refs.alleyscroll.handlefinishPullUp();
25     })
26   }

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM