微信小程序-自定义下拉刷新

摘要:
缺点二:最重要的是,如果自定义导航栏,即使使用固定定位,整个导航栏仍然会随着页面下拉,整体布局效果非常扭曲。该组件可分为三个部分:视图、下拉区域、刷新区域、插槽区域、视图、上拉区域、加载更多区域。但是,请注意,插槽的高度必须增加。

要实现微信小程序上拉刷新与下拉加载更多

微信给出的接口不怎么友好,最终想实现效果类似QQ手机版 ,一共3种下拉刷新状态变化,文字+图片+背景颜色

微信小程序-自定义下拉刷新第1张

微信小程序-自定义下拉刷新第2张

最终实现后的效果(这里提示有个不同点就是,自定义了导航条,并且下拉的时候,自定义导航条必须固定)

微信小程序-自定义下拉刷新第3张

小程序实现下拉加载2种方式:

1. 简单粗暴,直接开启enablePullDownRefresh,开启全局下拉刷新

2.利用scroll-view组件

简单分析下2种方式的利与弊

enablePullDownRefresh方式

  • 优点:简单粗暴,兼容性没问题
  • 缺点1: 只能配置背景颜色,没有图片与状态提示的变化。
  • 缺点2: 最重要的一点,如果自定义了导航条即使采用fixed定位,整个导航条还是会随页面一起往下拉动,整个布局效果非常变扭。这才是我放弃的最终原因(参考最终效果图,自定义了导航条)

scroll-view方式

  • 优点:可以自定义(参考最终效果图)
  • 缺点:安卓与微信存在不同的兼容问题,所以针对2套平台要有2套处理方式,比较麻烦

实现原理:

enablePullDownRefresh的方式没啥好说的,按照文档的来。

scroll-view方式的就比较麻烦了,首先说下引起问题的2个因素点

  • 自定义了导航条
  • IOS上有橡皮筋效果,安卓没有

自定义了导航条,那么页面的布局一定要减去这个导航条的占位,所以scroll-view包裹的区域,一定会有一个定位处理,top的定位距离就是导航条的高度。

IOS上scroll-view的实现原理

IOS默认存在橡皮筋效果那么意味着就会有反弹反馈,元素滚动一定会有scrollTop的变化,那么利用scrollTop的变化就能很好的实现

为了滚动的性能最大优化,所以默认都是用系统自带滚动,并不会做控制页面内容本身的滑动

布局的时候,原来的滚动内容部分用scroll-view包装,并且在之前加上下拉刷新的展示区域view,利用translateY把scroll-view的top设置为负值(展示区域的高度),这样就把下拉的显示区域拼接到了scroll-view之前,并且还看不到

在下拉scroll-view的时候,由于ios支持橡皮筋效果,所以scrollTop为负值的时候,展示区域自动会随着scrollTop的递减而出现。

状态的与图片的变化,可以通过监听scroll事件,通过scrollTop值的变化,做出相应的改变。当然这里还会有scrolltolower与touchend事件,要知道什么时候松手后触发刷新,并且刷新之后还要设置还原

安卓上scroll-view的实现原理

安卓就这样,没有反弹效果,所以scrollTop也不会有负数。这时候只能靠手动移动页面模拟反弹了。

安卓上需要对scroll-view绑定 start,move,end,scroll,upper事件,要监听用户的页面操作,当然如果是正常滚动内容的时候,不影响,也不做任何处理,一旦用户是下拉刷新操作,才介入

页面的布局也是由下拉刷新的展示区域+包裹内容的scroll-view区域组成,不同于ios布局的就是,下拉刷新区域默认高度是0,scroll-view也不需要设置translateY负值了,需要下拉的时候调整展示区域的高度

通过lower事件判断是边界,如果下拉越界,那么通过move控制scroll-view区域整体的往下滑动同时控制下拉刷新区域的高度变化,这样就实现了下拉的效果

最后在end中,判断下移动的距离跟刷新的高度对比,从而更改下拉的状态与图片,并且触发刷新请求,最后可以动画复位

封装

一般这种功能直接做成组件就好了,ios与安卓可以独立2个组件,然后注册到一个中介的组件中,判断调用哪个,这样比较好维护。

组件内部可以分成3部分

view 下拉刷新区域
slot 内容的slot区域
view 上拉加载更多区域

不过注意一点,slot一定要加高度,加高度。因为ios默认是反弹,滚动的,如果没有内容,或者内容高度不足,没撑开全部,那么就会触发默认滚动,页面的导航条会上下移动

1
2
3
<view style="min-height:100%;">
  <slot></slot>
</view>

  

结尾:

由于自定义了导航条,引起了一堆的问题出来,说不上好与坏,反正遇到问题总是要想办法解决的。

这里简单的记录下,给初入小程序的当个借鉴吧。可能我也有处理不对的,或者有更好的方法,可以给下建议。

代码部分如果有需要,等有空了,我就分离出来发一份咯。

如果您看完本篇文章感觉不错,请点击一下右下角的推荐】来支持一下博主,谢谢!

免责声明:文章转载自《微信小程序-自定义下拉刷新》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Debian9.5 VNC Server远程桌面配置GitHub中开启二次验证Two-factor authentication,如何在命令行下更新和上传代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android Studio 3.0.1 版本包下载

Android Studio 3.0.1 发布了,这是对 Android Studio 3.0 的一个小的更新,包括一般错误修复和性能改进 下载地址: Windows 64 位:https://dl.google.com/dl/android/studio/ide-zips/3.0.1.0/android-studio-ide-171.4443003-w...

Android学习笔记主题(Theme)资源文件

安卓的主题资源文件,可以用于对Android应用的美化。 styles文件是主题资源文件。定义一个主题资源格式如下: <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Ligh...

Android小笔记

一、ProgressBar控制转速 <ProgressBar android:id="@+id/pb"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:indeter...

vue用hbuilderX打包app嵌入h5方式云打包和遇到的问题

vue用hbuilderX打包app嵌入h5方式云打包和遇到的问题 vue用hbuilderX打包app就可以了,不过有兼容性问题,转换rem的用不了,嵌入到app的webview里面变得很小了,另外还有返回键监听的问题需要处理,否则按手机上的返回键不起作用,另外缓存问题,加载页跳转白屏问题也需要优化。======================安卓本地打...

Android自动化测试工具——monkey简介及入门

记得第二家单位的安卓开发在上线前都用monkey压几个小时,确实也能发现些问题,崩溃率低了些,没测过的确实可以压一压 搜了下资料,monkey确实很简单,发现问题自己搜下是什么问题,别一发现什么就跑去问开发 下面介绍下monkey的原理 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输...

Android蓝牙开发技术学习总结

Android开发,提供对蓝牙的通讯栈的支持,允许设别和其他的设备进行无线传输数据。应用程序层通过安卓API来调用蓝牙的相关功能,这些API使程序无线连接到蓝牙设备,并拥有P2P或者多端无线连接的特性。 蓝牙的功能: 1、扫描其他蓝牙设备 2、为可配对的蓝牙设备查询蓝牙适配器 3、建立RFCOMM通道(其实就是尼玛的认证) 4、通过服务搜索来链接其他的设备...