微信小程序中如何实现分页下拉加载?(附源码)
转眼间坚持写教你微信小程序系列已经有十节系列课程了,每天的工作压力繁重,小女子也不知道自己还能坚持这样的系列教程多久。只希望每篇教程真的对大家有帮助。这节课我们要介绍的就是如何实现分页的下拉加载,我们先来看效果图
1
2
3
4
5
6
7
8
|
< 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" > HTML 51. 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.index.wxml
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
< 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=='0' ? ' nocopyright' : ''}}" > < / 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
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
|
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 : 20 rpx; background : #f4f4f4; } .search - wrap { position : relative; flex : auto; display : flex; align - items : center ; height : 80 rpx; padding : 0 20 rpx; background : #fff; border - radius : 6 rpx; } .search - wrap .icon - search { margin - right : 10 rpx; } .search - wrap .search - input { flex : auto; font - size : 28 rpx; } .search - cancel { padding : 0 20 rpx; font - size : 28 rpx; } / * 搜索结果 * / .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 : 20 rpx 0 20 rpx 110 rpx; overflow : hidden ; border - bottom : 2 rpx solid #e5e5e5; } . result - item .media { position : absolute; left : 16 rpx; top : 16 rpx; width : 80 rpx; height : 80 rpx; border - radius : 999 rpx; } . result - item . title , . result - item .subtitle { overflow : hidden ; text - overflow : ellipsis; white - space : nowrap; line - height : 36 rpx; } . result - item . title { margin - bottom : 4 rpx; color : #000; } . result - item .subtitle { color : #808080; font - size : 24 rpx; } . result - item : first - child .subtitle text { margin - right : 20 rpx; } . result - item : not ( : first - child ) .subtitle text : not ( : first - child ) : before { content : ' / '; margin : 0 8 rpx; } .loading { padding : 10 rpx; text - align : center ; } .loading : before { display : inline - block; margin - right : 5 rpx; vertical - align : middle ; content : ''; width : 40 rpx; height : 40 rpx; background : url ( .. / index / images / icon - loading.png ) no - repeat ; background - size : contain ; animation : rotate 1 s linear infinite; } .loading.complete : before { display : none; } |
3.index.js
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
var util = require ( '.. / .. / utils / util.js' ) Page ( { data : { searchKeyword : '' , / / 需要搜索的字符 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 ( ) ; } } } ) |
源码下载地址:http://bbs.html51.com/t-1450-1-1/
微信小程序中如何实现分页下拉加载?(附源码)的更多相关文章
- 微信小程序中如何使用WebSocket实现长连接(含完整源码)
本文由腾讯云技术团队原创,感谢作者的分享. 1.前言 微信小程序提供了一套在微信上运行小程序的解决方案,有比较完整的框架.组件以及 API,在这个平台上面的想象空间很大.腾讯云研究了一番之后,发现 ...
- 在微信小程序中,如何实现下拉刷新(模拟刷新)
一.在app.json中启动刷新, 在Windows 中, 添加 "enablePullDownRefresh":"true" 二.在需要刷新的页面中写(若是 ...
- 微信小程序 在使用wx.request时显示加载中
微信小程序中,向后台请求数据是,通常想给用户提示正在加载中,如下图: 我们可以用wx.showLoading(OBJECT),当请求服务器的地方多了,怎么才能不每次都要去调用函数,我们只要对wx.re ...
- 【微信小程序】scroll-view与Page下拉冲突
需求:主界面是个列表.列表可以纵向滑动,下拉添加新的条目Item.每个条目Item可以横向滑动. 发现做下拉时,用Page的enablePullDownRefresh和scroll-view条目的横向 ...
- 微信小程序开发--模板(template)使用,数据加载,点击交互
微信小程序视图层提供了 模板(template),可以在模板中定义代码片段,然后在不同的地方调用.结果在数据渲染那懵逼了.按照官网上对模板的说明和对数据的加载. 1.定义模板 使用name属性,作为模 ...
- 微信小程序开发——设置默认图片、错误加载图片
小程序不支持h5中的onerrorimg,只开放了binderror属性,当错误发生时,会发布到 AppService,事件对象event.detail = {errMsg: 'something w ...
- 微信小程序:picker组件实现下拉框效果
一.wxml中代码 <view class="in_order_Param"> <text>状态:</text> ...
- 微信小程序(五) 利用模板动态加载数据
利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:
- 使用谷歌提供的SwipeRefreshLayout下拉控件,并自定义实现下拉加载的功能
package com.loaderman.swiperefreshdemo; import android.os.Bundle; import android.os.Handler; import ...
随机推荐
- python-----列表生成式和列表生成器表达
列表表达式: 程序一: 常规写法: L = [] for x in range(1, 11): L.append(x * x) print(L) #[1, 4, 9, 16, 25, 36, 49, ...
- 计算属性 computed
计算属性 computed 计算缓存 vs Methods <div id="example"> <p>Original message: "{{ ...
- 使用IntelliJ IDEA 创建Maven项目(入门)
一. 下载Maven 下载地址:http://maven.apache.org/download.cgi tar.gz压缩格式用于unix操作系统,而zip用于windows的操作系统,但在windo ...
- [App Store Connect帮助]五、管理构建版本(2)查看构建版本和文件大小
您可以查看您为某个 App 上传的所有构建版本,和由 App Store 创建的变体版本的大小.一些构建版本在该 App 发布到 App Store 上后可能不会显示. 必要职能:“帐户持有人”职能. ...
- python自动化学习笔记10-数据驱动DDT与yml的应用
在测试工作中,针对某一API接口,或者某一个用户界面的输入框,需要设计大量相关的用例,每一个用例包含实际输入的各种可能的数据.通常的做法是,将测试数据存放到一个数据文件里,然后从数据文件读取,在脚本中 ...
- 【js】callback时代的变更
最近团队开始越来越多的使用es7标准的async/await,从最开始的promise到后面的generator,再到现在async,对于异步,每个时期都有着其特有的解决方案,今天笔者就以自己的接触为 ...
- 题解报告:poj 1426 Find The Multiple(bfs、dfs)
Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ...
- Windows8.1查看已连接无线WIFI密码
Windows8.1操作系统下查看已连接无线wifi密码操作步骤如下: 1.右键任务栏中的无线图标,在弹出的菜单中选择"打开网络和共享中心": 2.在网络和共享中心界面中点击&qu ...
- MySQL replace into 用法(insert into 的增强版)
转 http://blog.csdn.net/risingsun001/article/details/38977797 MySQL replace into 用法(insert into 的增强版) ...
- JDK API文档下载
java SE 8 API文档:http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downloads-21331 ...