微信小程序实现页面下拉刷新和上拉加载功能详解
程序员文章站
2023-11-25 13:58:34
本文实例讲述了微信小程序实现页面下拉刷新和上拉加载功能。分享给大家供大家参考,具体如下:
web手机端或app中经常会有下拉刷新,上拉加载这些功能。
微信小程序中如何实...
本文实例讲述了微信小程序实现页面下拉刷新和上拉加载功能。分享给大家供大家参考,具体如下:
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 }); } })
希望本文所述对大家微信小程序设计有所帮助。