首頁 微信小程式 小程式開發 微信小程式實作分頁下拉載入的實例程式碼

微信小程式實作分頁下拉載入的實例程式碼

Mar 21, 2017 pm 04:23 PM
小程式開發

轉眼間我們教你微信小程式系列已經有十節系列課程了,每天的工作壓力繁重,小女子也不知道自己還能堅持這樣的系列教學多久。只希望每篇教學真的對大家有幫助。這堂課我們要介紹的就是如何實現分頁的下拉加載,我們先來看效果圖

微信小程式實作分頁下拉載入的實例程式碼

<view class="copyright">
    <view class="copyright_item">CopyRight:All Right Reserved</view>
    <view class="copyright_item">原创作者:51小程序</view>
    <view class="copyright_item">微信小程序开发者社区</view>
    <view class="copyright_item">HTML51.COM</view>
    <view class="copyright_item"><image class="img" src="../copyright/image/logo.png"/></view>
    <view class="goto_counter"><button type="default" bindtap="goto_counter">点击进入下拉加载演示页面</button></view>
</view>
登入後複製

當用戶開啟一個頁面時,假設後台資料量龐大時,一次性地返回所有資料給客戶端,頁面的開啟速度就會有所下降,而且用戶只看上面的內容而不需要看後面的內容時,也浪費用戶流量,基於優化的角度來考慮,後台不要一次性返回所有數據,當用戶有需要再往下翻的時候,再加載更加數據出來。
業務需求:
在清單捲動到底部時,繼續往上拉,載入更多內容
必備參數:
#(1)pageindex: 1 //第幾次載入
#
(2)callbackcount: 15 //需要返回数据的个数
其他参数:
根据接口的所需参数
实现原理:
当第一次访问接口时,传递2个必备参数(第1次加载,需要返回数据的个数为15个),和其他参数(需要搜索的字符串)给后台,后台返回第一次数据过来。在请求成功的的回调函数中,判断返回的数据是否>0,是,则取出数据,渲染视图层,并把“上拉加载”显示在列表底部;否,则没有数据可取,并把“没有更多”显示在列表底部,同时把“上拉加载”隐藏掉。
当用户已经滚动到列表底部(这里使用到小程序提供的scroll-view组件的bindscrolltolower事件),触发bindscrolltolower事件,参数pageindex+1,再把2个必备参数(第2次加载,需要返回数据的个数为15个)和其他参数(需要搜索的字符串)给后台,后台把其余的数据返回给前台,前台在原来数据的基础上添加数据


主要的页面结果如下:
1.index.wxml

<view class="search"> 
  <view class="search-bar"> 
    <view class="search-wrap"> 
        <icon type="search" size="16" class="icon-search" /> 
        <input type="text" placeholder="请输入搜索内容" class="search-input" name="searchKeyword" bindinput="bindKeywordInput" value="{{searchKeyword}}" /> 
    </view> 
    <view class="search-cancel" bindtap="keywordSearch">搜索</view> 
  </view> 
  <view class="search-result"> 
    <scroll-view scroll-y="true" bindscrolltolower="searchScrollLower"> 
      <view class="result-item" wx:for="{{searchSongList}}" wx:key="unique"  data-data="{{item}}" > 
        <view class="icon{{item.isonly==&#39;0&#39; ? &#39; nocopyright&#39; : &#39;&#39;}}"></view> 
        <text class="title">{{item.songname}}</text> 
        <view class="subtitle"> 
          <text wx:for="{{item.singer}}" wx:key="unique">{{item.name}}</text> 
        </view> 
      </view> 
      <view class="loading" hidden="{{!searchLoading}}">正在载入更多...</view> 
      <view class="loading complete" hidden="{{!searchLoadingComplete}}">已加载全部</view> 
    </scroll-view>   
  </view> 
</view>
登入後複製

2.index.wxss

page{ 
  display: flex;  
  flex-direction: column;  
  height: 100%;  
} 
   
/*搜索*/ 
.search{ 
  flex: auto;  
  display: flex;  
  flex-direction: column;  
  background: #fff;  
} 
.search-bar{ 
  flex: none;  
  display: flex;  
  align-items: center;  
  justify-content: space-between;  
  padding: 20rpx;  
  background: #f4f4f4;  
} 
.search-wrap{ 
  position: relative;  
  flex: auto;  
  display: flex;  
  align-items: center;  
  height: 80rpx;  
  padding: 0 20rpx;  
  background: #fff;  
  border-radius: 6rpx;  
} 
.search-wrap .icon-search{ 
  margin-right: 10rpx;  
} 
.search-wrap .search-input{ 
  flex: auto;  
  font-size: 28rpx;  
} 
.search-cancel{ 
  padding: 0 20rpx;  
  font-size: 28rpx;  
} 
   
/*搜索结果*/ 
.search-result{ 
  flex: auto;  
  position: relative;  
} 
.search-result scroll-view{ 
  position: absolute;  
  bottom: 0;  
  left: 0;  
  right: 0;  
  top: 0;  
} 
.result-item{ 
  position: relative;  
  display: flex;  
  flex-direction: column;  
  padding: 20rpx 0 20rpx 110rpx;  
  overflow: hidden;  
  border-bottom: 2rpx solid #e5e5e5;  
} 
   
.result-item .media{ 
  position: absolute;  
  left: 16rpx;  
  top: 16rpx;  
  width: 80rpx;  
  height: 80rpx;  
  border-radius: 999rpx;  
} 
.result-item .title, 
.result-item .subtitle{ 
  overflow: hidden;  
  text-overflow: ellipsis;  
  white-space: nowrap;  
  line-height: 36rpx;  
} 
.result-item .title{ 
  margin-bottom: 4rpx;  
  color: #000;  
} 
.result-item .subtitle{ 
  color: #808080;  
  font-size: 24rpx;  
} 
.result-item:first-child .subtitle text{ 
  margin-right: 20rpx;  
} 
.result-item:not(:first-child) .subtitle text:not(:first-child):before{ 
  content: &#39;/&#39;;  
  margin: 0 8rpx;  
} 
.loading{ 
  padding: 10rpx;  
  text-align: center;  
} 
.loading:before{ 
  display: inline-block;  
  margin-right: 5rpx;  
  vertical-align: middle;  
  content: &#39;&#39;;  
  width: 40rpx;  
  height: 40rpx;  
  background: url(../index/images/icon-loading.png) no-repeat;  
  background-size: contain;  
  animation: rotate 1s linear infinite;  
} 
.loading.complete:before{ 
  display: none;  
}
登入後複製

3.index.js

var util = require(&#39;../../utils/util.js&#39;) 
Page({ 
  data: { 
    searchKeyword: &#39;&#39;,  //需要搜索的字符  
    searchSongList: [], //放置返回数据的数组  
    isFromSearch: true,   // 用于判断searchSongList数组是不是空数组,默认true,空的数组  
    searchPageNum: 1,   // 设置加载的第几次,默认是第一次  
    callbackcount: 15,      //返回数据的个数  
    searchLoading: false, //"上拉加载"的变量,默认false,隐藏  
    searchLoadingComplete: false  //“没有数据”的变量,默认false,隐藏  
  }, 
  //输入框事件,每输入一个字符,就会触发一次  
  bindKeywordInput: function(e){ 
    console.log("输入框事件") 
    this.setData({ 
      searchKeyword: e.detail.value 
    }) 
  }, 
  //搜索,访问网络  
  fetchSearchList: function(){ 
    let that = this;  
    let searchKeyword = that.data.searchKeyword,//输入框字符串作为参数  
        searchPageNum = that.data.searchPageNum,//把第几次加载次数作为参数  
        callbackcount =that.data.callbackcount; //返回数据的个数  
    //访问网络  
    util.getSearchMusic(searchKeyword, searchPageNum,callbackcount, function(data){ 
      console.log(data) 
      //判断是否有数据,有则取数据  
      if(data.data.song.curnum != 0){ 
        let searchList = [];  
        //如果isFromSearch是true从data中取出数据,否则先从原来的数据继续添加  
        that.data.isFromSearch ? searchList=data.data.song.list : searchList=that.data.searchSongList.concat(data.data.song.list) 
        that.setData({ 
          searchSongList: searchList, //获取数据数组  
          zhida: data.data.zhida, //存放歌手属性的对象  
          searchLoading: true   //把"上拉加载"的变量设为false,显示  
        });  
      //没有数据了,把“没有数据”显示,把“上拉加载”隐藏  
      }else{ 
        that.setData({ 
          searchLoadingComplete: true, //把“没有数据”设为true,显示  
          searchLoading: false  //把"上拉加载"的变量设为false,隐藏  
        });  
      } 
    }) 
  }, 
  //点击搜索按钮,触发事件  
  keywordSearch: function(e){ 
    this.setData({   
      searchPageNum: 1,   //第一次加载,设置1 
      searchSongList:[],  //放置返回数据的数组,设为空  
      isFromSearch: true,  //第一次加载,设置true 
      searchLoading: true,  //把"上拉加载"的变量设为true,显示  
      searchLoadingComplete:false //把“没有数据”设为false,隐藏  
    }) 
    this.fetchSearchList();  
  }, 
  //滚动到底部触发事件  
  searchScrollLower: function(){ 
    let that = this;  
    if(that.data.searchLoading && !that.data.searchLoadingComplete){ 
      that.setData({ 
        searchPageNum: that.data.searchPageNum+1,  //每次触发上拉事件,把searchPageNum+1 
        isFromSearch: false  //触发到上拉事件,把isFromSearch设为为false 
      });  
      that.fetchSearchList();  
    } 
  } 
})
登入後複製


以上是微信小程式實作分頁下拉載入的實例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

小程式開發中的PHP權限管理與使用者角色設定 小程式開發中的PHP權限管理與使用者角色設定 Jul 04, 2023 pm 04:48 PM

小程式開發中的PHP權限管理與使用者角色設定隨著小程式的普及和應用範圍的擴大,使用者對於小程式的功能和安全性提出了更高的要求,其中權限管理和使用者角色設定是保證小程序安全性的重要一環。在小程式中使用PHP進行權限管理和使用者角色設定能夠有效地保護使用者的資料和隱私,以下將介紹如何實現此功能。一、權限管理的實作權限管理是指依據使用者的身分和角色,授予不同的操作權限。在小

PHP在小程式開發的頁面跳轉與路由管理 PHP在小程式開發的頁面跳轉與路由管理 Jul 04, 2023 pm 01:15 PM

PHP在小程式開發的頁面跳轉與路由管理隨著小程式的快速發展,越來越多的開發者開始將PHP與小程式開發結合。在小程式開發中,頁面跳轉和路由管理是非常重要的一部分,它能夠幫助開發者實現頁面之間的切換和導航操作。 PHP作為常用的伺服器端程式語言,可以很好地與小程式互動和資料傳遞,下面我們來詳細了解PHP在小程式中的頁面跳轉與路由管理。一、頁面跳轉基

如何在uniapp中實現小程式開發和發布 如何在uniapp中實現小程式開發和發布 Oct 20, 2023 am 11:33 AM

如何在uni-app中實現小程式開發和發布隨著行動互聯網的發展,小程式成為了行動應用程式開發的重要方向。而uni-app作為一個跨平台的開發框架,可以同時支援多個小程式平台的開發,如微信、支付寶、百度等。以下將詳細介紹如何使用uni-app開發和發布小程序,並提供一些具體的程式碼範例。一、小程式開發前準備在開始使用uni-app開發小程式之前,需要先做一些準備工

小程式開發中的PHP安全防護與攻擊防範 小程式開發中的PHP安全防護與攻擊防範 Jul 07, 2023 am 08:55 AM

小程式開發中的PHP安全防護與攻擊防範隨著行動網路的快速發展,小程式成為了人們生活中重要的一部分。而PHP作為一種強大而靈活的後端開發語言,也被廣泛應用於小程式的開發。然而,安全問題一直是程式開發中需要重視的面向。本文將重點放在小程式開發中PHP的安全防護與攻擊防範,同時提供一些程式碼範例。 XSS(跨站腳本攻擊)防範XSS攻擊是指駭客透過向網頁注入惡意腳本

小程式開發中的PHP資料快取與快取策略 小程式開發中的PHP資料快取與快取策略 Jul 05, 2023 pm 02:57 PM

小程式開發中的PHP資料快取與快取策略隨著小程式的快速發展,更多的開發者開始關注如何提高小程式的效能和回應速度。其中一個重要的最佳化手段是使用資料快取來減少對資料庫和外部介面的頻繁存取。而在PHP中,我們可以利用各種快取策略來實現資料快取。本文將介紹PHP中的資料快取原理,並提供幾個常見的快取策略的範例程式碼。一、資料快取原理資料快取是指將資料存放在記憶體中,以

微信小程式中PHP開發的下拉式選單實作方法 微信小程式中PHP開發的下拉式選單實作方法 Jun 04, 2023 am 10:31 AM

今天我們來學習微信小程式中PHP開發的下拉式選單實作方法。微信小程序是一種輕量級的應用程序,用戶可以在微信裡直接使用,而且不需要下載安裝,非常方便。而PHP是一種非常流行的後端程式語言,也是與微信小程式配合很好的語言。下面我們就來看看如何在微信小程式中使用PHP開發下拉式選單。首先,我們需要準備好開發環境,包括PHP、微信小程式開發工具和伺服器。然後我們

小程式開發中的PHP頁面動畫效果與互動設計 小程式開發中的PHP頁面動畫效果與互動設計 Jul 04, 2023 pm 11:01 PM

小程式開發中的PHP頁面動畫效果與互動設計導語:小程式是一種在行動裝置上運行的應用程序,能夠提供類似原生應用程式的體驗。而在小程式開發中,PHP作為常用的後端語言,可以為小程式頁面增添動畫效果與互動設計。本文將介紹一些常用的PHP頁面動畫效果與互動設計,並附上程式碼範例。一、CSS3動畫CSS3提供了豐富的屬性與方法,用於實現各種動畫效果。而在小

UniApp實作位元組跳動小程式的開發與上線流程解析 UniApp實作位元組跳動小程式的開發與上線流程解析 Jul 06, 2023 pm 05:01 PM

UniApp實作位元組跳動小程式的開發與上線流程解析位元組跳動小程式作為一種新興的行動應用開發方式,正逐漸在業界流行起來。在開發位元組跳動小程式之前,我們需要了解如何使用UniApp來實現開發和上線的流程。一、UniApp簡介UniApp是一套基於Vue.js開發的以HTML5、App、小程式為多端統一開發的框架,透過編寫一套程式碼,可以同時在多個平台上運行,包括字

See all articles