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


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的each方法使用示例分享
Mar 25 Javascript
javascript 处理null及null值示例
Jun 09 Javascript
jQuery获取动态生成的元素示例
Jun 15 Javascript
用console.table()调试javascript
Sep 04 Javascript
原生js结合html5制作简易的双色子游戏
Mar 30 Javascript
js闭包所用的场合以及优缺点分析
Jun 22 Javascript
jQuery手机拨号界面特效代码分享
Aug 27 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
Mar 30 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
Jun 14 Javascript
微信小程序的开发范式BeautyWe.js入门详解
Jul 10 Javascript
vue 项目@change多个参数传值多个事件的操作
Jan 29 Vue.js
微信小程序在地图选择地址并返回经纬度简单示例
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中创建和调用webservice接口示例
2014/07/25 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
Python标准库之sqlite3使用实例
2014/11/25 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
python简单验证码识别的实现方法
2019/05/10 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
化学教师教学反思
2014/01/17 职场文书
万年牢教学反思
2014/02/15 职场文书
建材投资建议书
2014/05/16 职场文书
企业精神口号
2014/06/11 职场文书
2014年个人售房协议书
2014/10/30 职场文书
英文升职感谢信
2015/01/23 职场文书
2015入党自传格式范文
2015/06/26 职场文书
春节慰问简报
2015/07/21 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS