溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

scroll-view如何完成列表頁

發(fā)布時(shí)間:2021-03-15 15:06:19 來源:億速云 閱讀:290 作者:小新 欄目:移動(dòng)開發(fā)

這篇文章主要介紹scroll-view如何完成列表頁,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

scroll-view組件介紹

scroll-view是微信小程序提供的可滾動(dòng)視圖組件,其主要作用是可以用來做手機(jī)端經(jīng)常會(huì)看到的上拉加載下拉刷新列表頁!下面就以<搖出微笑>為例來講解一下這個(gè)組件的使用吧!

為app導(dǎo)入新page頁面

首先需要為我們的小程序?qū)胄碌膒age頁面,項(xiàng)目根目錄打開app.json這個(gè)項(xiàng)目配置文件在里面的pages數(shù)組添加"pages/allJoke/allJoke"然后設(shè)置底部導(dǎo)航在"tabBar"的列表項(xiàng)("list")添加:

 {
   "text": "列表",
   "pagePath": "pages/allJoke/allJoke",
   "iconPath": "images/note.png",
   "selectedIconPath": "images/noteHL.png"
  },

如果大家要了解具體配置的含義可以參考小程序配置文檔這里不再贅述!

json配置頁

接下來就是我們新建page的配置頁了,在page目錄下新建一個(gè)目錄如alljoke,再在這個(gè)目錄下新建一個(gè)allJoke.json,復(fù)制下面代碼到這個(gè)文件里面:

{
  "navigationBarTitleText": "笑話集錦",
  "enablePullDownRefresh": true
}

因?yàn)槲覀兇龝?huì)做下拉刷新時(shí)需要用到小程序提供的onPullDownRefresh方法,所以在配置項(xiàng)里面必須開啟enablePullDownRefresh.另外一個(gè)選項(xiàng)是頁頂標(biāo)題大家隨意設(shè)置也可以不用設(shè)置!

wxml視圖頁

好輪到視圖頁了,同樣的在alljoke目錄下新建一個(gè)alljoke.wxml頁面.wxml是小程序自創(chuàng)的一個(gè)視圖頁文檔類型,其寫法類似html,對(duì)于前端來說入門沒有難度.需要詳細(xì)了解的可以去閱讀wxml文檔.同樣復(fù)制以下代碼到alljoke.wxml里面

<view>
 <view>
  <scroll-view class="scroll" scroll-top="{{scrollTop}}" style="height:580px;" scroll-y="true" bindscroll="scrll"  bindscrolltolower="loadMore">
   <view class="block" wx:for="{{listLi}}" wx:for-item="item">
    <text>{{item.text}}</text>
   </view>  
  </scroll-view>
 </view>
 <view class="top" hidden="{{hidden}}" catchtap="goTop">?</view>
</view>

大家可以看到,我們的主角scroll-view也在這里隆重登場了!帶過來的是一長串配置,就讓我來為大家講一下這些配置的作用吧!

配置項(xiàng)作用
scroll-top設(shè)置豎向滾動(dòng)條的位置,要注意一點(diǎn)如果設(shè)置的值沒有變化,組件不會(huì)渲染!
scroll-y允許縱向滾動(dòng)
bindscroll滾動(dòng)時(shí)觸發(fā)的回調(diào)函數(shù)
bindscrolltolower滾動(dòng)到底部觸發(fā)的事件

用到的選項(xiàng)都列出來了,還有一點(diǎn)需要大家特別注意的:

使用豎向滾動(dòng)條時(shí)必須為組件設(shè)置一個(gè)固定高度就是上面代碼style里面設(shè)置的高!切記切記!

更多資料請(qǐng)閱讀微信小程序scroll-view組件文檔

wxss樣式

同樣在alljoke目錄下面新建allJoke.wxss文件,小程序的樣式和傳統(tǒng)css差不多大家可以根據(jù)自己喜好自行設(shè)計(jì),這里我簡單做了一下樣式比較丑大家將就著用吧.(題外話:受不了的自己動(dòng)手豐衣足食)

.block {
  border: 8px solid #71b471;
  margin: 20rpx 20rpx;
  padding: 10rpx;
  background-color: #fff;
  border-radius: 20rpx;
  text-align: center;
}
.top {
  width: 100rpx;
  height: 100rpx;
  line-height: 100rpx;
  background-color: #fff;
  position: fixed;
  bottom: 40rpx;
  right: 20rpx;
  text-align: center;
  font-size: 50rpx;
  opacity: .8;
  border-radius: 50%;
  border: 1px solid #fff; 
}

小程序文檔中關(guān)于樣式的介紹

邏輯部分

來到最后也是最重要的邏輯部分了!老規(guī)矩alljoke目錄下新建allJoke.js文件,先貼代碼再慢慢講解:

Page({
 data:{
  listLi:[],
  page:1,
  scrollTop:0,
  done: false,
  hidden: true
 },
 onLoad:function(options){
  this.getList(1);
 },

 onPullDownRefresh: function(){
  wx.showToast({
   title: '加載中',
   icon: 'loading'
  });
  this.getList(1,true);
 },

 getList: function(page, stopPull){
  var that = this
  wx.request({
   url: 'https://wechat.sparklog.com/jokes',
   data: {
    page: page,
    per: '20'
   },
   method: 'GET', 
   success: function(res){
    if(page===1){
     that.setData({
      page: page+1,
      listLi: res.data,
      done: false
     })
     if(stopPull){
      wx.stopPullDownRefresh()      
     }
    }else{
     if(res.data<20){
      that.setData({
       page: page+1,
       listLi: that.data.listLi.concat(res.data),
       done: true
      }) 
     }else{
      that.setData({
       page: page+1,
       listLi: that.data.listLi.concat(res.data)
      }) 
     }  
    }
   },
  })
 },

 loadMore: function(){
  var done = this.data.done;
  if(done){
   return
  }else{
   wx.showToast({
    title: '加載中',
    icon: 'loading',
    duration: 500
   });
   var page = this.data.page;
   this.getList(page)
  }
 },

 scrll: function(e){
  var scrollTop = e.detail.scrollTop
  if(scrollTop>600){
   this.setData({
    scrollTop: 1,
    hidden: false    
   })
  }else{
   this.setData({
    scrollTop: 1,
    hidden: true  
   });
  }
 },

 goTop: function(){
  this.setData({
   scrollTop:0,
   hidden: true 
  })
 }
})

大家可以看到首先我們需要用page()函數(shù)注冊頁面,然后在data里面定義一些初始化數(shù)據(jù).onLoad是這個(gè)頁面的生命周期函數(shù),頁面加載時(shí)會(huì)調(diào)用到它.我們在頁面加載時(shí)調(diào)用了自定義的getList函數(shù).這個(gè)函數(shù)接收兩個(gè)參數(shù),第一個(gè)參數(shù)是要加載的頁面,第二個(gè)參數(shù)是布爾值,用來判斷是下拉刷新調(diào)用的這個(gè)函數(shù),還是頁面加載時(shí)調(diào)用的這個(gè)函數(shù)!接下來onPullDownRefresh是小程序提供的下拉刷新函數(shù),里面wx.showToast顯示消息提示框,用來提示用戶正在加載,loadMore是滾動(dòng)到底部觸發(fā)的事件.函數(shù)里面會(huì)檢查是否已經(jīng)加載了全部列表項(xiàng),如果已經(jīng)加載了全部列表項(xiàng)會(huì)return掉,如果數(shù)據(jù)庫還有列表項(xiàng),上拉到底部加載下一頁!scrll函數(shù)是滾動(dòng)時(shí)觸發(fā)的函數(shù),可以看到這個(gè)函數(shù)會(huì)判斷滾動(dòng)條位置是否大于六百,如果大于六百顯示點(diǎn)擊直達(dá)底部的按鈕,如果小于六百隱藏直達(dá)頂部的按鈕.同時(shí)會(huì)更新滾動(dòng)條位置的參數(shù).剛剛在講wxml時(shí)已經(jīng)講過scroll-view組件設(shè)置豎向滾動(dòng)條位置scroll-top設(shè)置項(xiàng)時(shí)如果參數(shù)一樣,頁面不會(huì)重新渲染,我們就是利用了這一點(diǎn),如果要到達(dá)頂部,位置必定是'0',滾動(dòng)時(shí)觸發(fā)scrll函數(shù),我們把位置信息設(shè)置為'1',因?yàn)闈L動(dòng)函數(shù)會(huì)反復(fù)觸發(fā),所以此時(shí)頁面是不會(huì)渲染的.也就是說由于位置設(shè)置參數(shù)都是設(shè)置為'1'不變,導(dǎo)致scroll-top設(shè)置項(xiàng)不會(huì)生效為goTop函數(shù)的直達(dá)頂部(把參數(shù)變?yōu)?#39;0'提供機(jī)會(huì)).最后就是直達(dá)頂部按鈕的函數(shù)了,可以看到它是把位置信息變?yōu)?#39;0',參數(shù)變化scroll-top設(shè)置生效,頁面直達(dá)頂部.最后再通過改變hidden這個(gè)參數(shù)把自己(直達(dá)頂部按鈕)給隱藏掉了!

結(jié)尾

ok,通過上面的步驟我們終于實(shí)現(xiàn)了下拉刷新上拉加載的列表頁功能了,從上面我們可以看到微信提供的接口和api還是挺全面的,要實(shí)現(xiàn)一個(gè)功能總體來說要比原生js實(shí)現(xiàn)要簡單一些!

以上是“scroll-view如何完成列表頁”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI