微信小程序实现页面下拉刷新和上拉加载功能详解


Posted in Javascript onDecember 03, 2018

本文实例讲述了微信小程序实现页面下拉刷新和上拉加载功能。分享给大家供大家参考,具体如下:

web手机端或App中经常会有下拉刷新,上拉加载这些功能。

微信小程序中如何实现下拉刷新,上拉加载的功能。

实现思路:

1.监听界面的下拉刷新事件和上拉加载事件

  • bindscrolltolower 监听上拉加载
  • bindscrolltoupper 监听下拉刷新

2.下拉刷新时清空数据列表,并重新请求数据进行界面展示。

3.上拉加载增量请求数据,增量增加数据列表,增量界面展示

效果图:

微信小程序实现页面下拉刷新和上拉加载功能详解

实现代码:

WaterFall.wxml:

<!--pages/WaterFall/WaterFall.wxml-->
<view style="display:none">
 <image wx:for="{{images}}" wx:key="id" id="{{item.id}}" src="{{item.pic}}" bindload="onImageLoad"></image>
</view>
<scroll-view scroll-y="true" style="height:{{scrollH}}px" bindscrolltolower="loadImages" bindscrolltoupper="PullDownRefresh">
 <view style="width:100%">
  <view class="img_item">
   <view wx:for="{{col1}}" wx:key="id">
    <image src="{{item.pic}}" style="width:100%;height:{{item.height}}px"></image>
   </view>
  </view>
  <view class="img_item">
   <view wx:for="{{col2}}" wx:key="id">
    <image src="{{item.pic}}" style="width:100%;height:{{item.height}}px"></image>
   </view>
  </view>
 </view>
</scroll-view>

WaterFall.js:

let col1H = 0;
let col2H = 0;
Page({
 data: {
  scrollH: 0,
  imgWidth: 0,
  loadingCount: 0,
  images: [],
  col1: [],
  col2: []
 },
 onLoad: function () {
  wx.getSystemInfo({
   success: (res) => {
    let ww = res.windowWidth;
    let wh = res.windowHeight;
    let imgWidth = ww * 0.48;
    let scrollH = wh;
    this.setData({
     scrollH: scrollH,
     imgWidth: imgWidth
    });
    //加载首组图片
    this.loadImages();
   }
  })
 },
 PullDownRefresh:function(){
  console.log("页面下拉2");
 },
  onShow: function () {
   console.log("页面显示");
 },
 /**
  * 生命周期函数--监听页面隐藏
  */
 onHide: function () {
  console.log("页面隐藏");
 },
 /**
  * 用户点击右上角分享
  */
 onShareAppMessage: function () {
  console.log("点击分享");
 },
 onImageLoad: function (e) {
  let imageId = e.currentTarget.id;
  let oImgW = e.detail.width;     //图片原始宽度
  let oImgH = e.detail.height;    //图片原始高度
  let imgWidth = this.data.imgWidth; //图片设置的宽度
  let scale = imgWidth / oImgW;    //比例计算
  let imgHeight = oImgH * scale;   //自适应高度
  let images = this.data.images;
  let imageObj = null;
  for (let i = 0; i < images.length; i++) {
   let img = images[i];
   if (img.id === imageId) {
    imageObj = img;
    break;
   }
  }
  imageObj.height = imgHeight;
  let loadingCount = this.data.loadingCount - 1;
  let col1 = this.data.col1;
  let col2 = this.data.col2;
  //判断当前图片添加到左列还是右列
  if (col1H <= col2H) {
   col1H += imgHeight;
   col1.push(imageObj);
  } else {
   col2H += imgHeight;
   col2.push(imageObj);
  }
  let data = {
   loadingCount: loadingCount,
   col1: col1,
   col2: col2
  };
  //当前这组图片已加载完毕,则清空图片临时加载区域的内容
  if (!loadingCount) {
   data.images = [];
  }
  this.setData(data);
 },
 loadImages: function () {
  let images = [
   { pic: "../../images/1.png", height: 0 },
   { pic: "../../images/2.png", height: 0 },
   { pic: "../../images/3.png", height: 0 },
   { pic: "../../images/4.png", height: 0 },
   { pic: "../../images/5.png", height: 0 },
   { pic: "../../images/6.png", height: 0 },
   { pic: "../../images/7.png", height: 0 },
   { pic: "../../images/8.png", height: 0 },
   { pic: "../../images/9.png", height: 0 },
   { pic: "../../images/10.png", height: 0 },
   { pic: "../../images/11.png", height: 0 },
   { pic: "../../images/12.png", height: 0 },
   { pic: "../../images/13.png", height: 0 },
   { pic: "../../images/14.png", height: 0 }
  ];
  console.log("dasddasd" + images);
  let baseId = "img-" + (+new Date());
  for (let i = 0; i < images.length; i++) {
   images[i].id = baseId + "-" + i;
  }
  this.setData({
   loadingCount: images.length,
   images: images
  });
 }
})

希望本文所述对大家微信小程序设计有所帮助。

Javascript 相关文章推荐
jquery复选框CHECKBOX全选、反选
Aug 30 Javascript
清除网页历史记录,屏蔽后退按钮!
Dec 22 Javascript
使用javascript实现雪花飘落的效果
Jan 13 Javascript
jQuery中wrapAll()方法用法实例
Jan 16 Javascript
异步JS框架的作用以及实现方法
Oct 29 Javascript
JavaScript中三种异步上传文件方式
Mar 06 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
May 10 Javascript
Vue.js实现简单ToDoList 前期准备(一)
Dec 01 Javascript
基于Vue.js 2.0实现百度搜索框效果
Dec 28 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
May 16 Javascript
学前端,css与javascript重难点浅析
Jun 11 Javascript
vue组件开发之tab切换组件使用详解
Aug 21 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
Dec 03 #Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
Dec 03 #Javascript
创建Vue项目以及引入Iview的方法示例
Dec 03 #Javascript
利用Vue构造器创建Form组件的通用解决方法
Dec 03 #Javascript
swiper.js插件实现pc端文本上下滑动功能示例
Dec 03 #Javascript
微信小程序显示倒计时功能示例【测试可用】
Dec 03 #Javascript
从零开始实现Vue简单的Toast插件
Dec 03 #Javascript
You might like
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
js下载文件并修改文件名
2017/05/08 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
建筑施工实习自我鉴定
2013/09/19 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
赔偿协议书
2015/01/27 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers