uni-app实现页面下拉刷新功能和上拉加载更多的案例(干货详解)。

下拉刷新功能

1.首先要在pages.json里面配置,给你要实现下拉刷新的页面增添这个字段,让页面支持下拉刷新。

"enablePullDownRefresh": true

预览效果:



我们开启了下拉刷新的这个功能,这时候是不是就需要去监听一下,下拉刷新这个动作了。


2. onPullDownRefresh 是一个处理函数,监听该页面用户下拉刷新事件(和onLoad等生命周期函数同级)

onPullDownRefresh () {
            console.log('用户发生了下拉刷新')
        }

效果预览:


3.我们来实现一个简单的小功能,就是当用户下拉刷新的时候更新数据,从而更新视图。

代码:

<template>
    <view class="container">
        <view v-for="(item,index) in PoetsList" :key="index">
            {{item}}
        </view>
    </view>
</template>

<script>
    export default {
        data () {
            return {
                PoetsList:['苏轼','苏辙','苏洵','柳宗元','辛弃疾']
            }
        },
        onPullDownRefresh () {
            this.PoetsList = ['李白','杜甫','李贺','白居易']
        }
    }
</script>

我们发现下拉刷新结束后,圈圈还在转,看着难受是不是?想要阻止它转圈圈是不是?莫慌。


3. uni.stopPullDownRefresh()这个函数来了,它就是下拉刷新完成后,视图已经显示,不需要再继续转圈圈了,它的功能就是阻止我们转圈圈的,停止当前页面下拉刷新。

onPullDownRefresh () {
            this.PoetsList = ['李白','杜甫','李贺','白居易']
            uni.stopPullDownRefresh()
        }

效果预览:



你可能发现了,下拉刷新后,转圈圈立马就结束了,就这种转瞬即逝一眨眼的效果,很影响用户体验是不是?


4.setTimeout()来帮你实现下拉刷新延迟,实现完美的用户微调体验。
效果预览:

代码修改:

onPullDownRefresh () {
            setTimeout(() => {
                this.PoetsList = ['李白','杜甫','李贺','白居易']
                uni.stopPullDownRefresh()
            },1500)
        }

到这里,我们基本可以发现我们都是用户手动去下拉刷新实现的,而且还是页面型的,那有没有触发型的呢?也是有的哦!


5. uni.startPullDownRefresh(OBJECT) 支持方法调用。开始下拉刷新,调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。

我们先来看下效果预览:


代码:

<template>
    <view class="container">
        <view class="" v-for="(item,index) in PoetsList" :key="index">
            {{item}}
        </view>
        <button type="primary" @tap="PullDownRefresh()">刷新</button>
    </view>
</template>

<script>
    export default {
        data () {
            return {
                PoetsList:['苏轼','苏辙','苏洵','柳宗元','辛弃疾']
            }
        },
        methods: {
            PullDownRefresh:function(){
                setTimeout(() => {
                    this.PoetsList = ['李白','杜甫','李贺','白居易']
                    uni.stopPullDownRefresh()
                },1500)
            }
        }
    }
</script>

如果使用方法定义的下拉刷新,那么pages.json中配置的下拉刷新功能的就不需要了。



但方法定义的下拉刷新是否却了一点东西?是不是少了那个会动会转转的小图标?这好像也很影响用户视觉体验呢?还是有法子的哟。


6.uni-app的button组件自带一个loading的会转圈圈的属性,它是个布尔值判断类型,所以需要再data里面定义绑定一个布尔判断。

效果预览:


代码:

<template>
    <view class="container">
        <view class="" v-for="(item,index) in PoetsList" :key="index">
            {{item}}
        </view>
        <button :loading="isLoad" type="primary" @tap="PullDownRefresh()">刷新</button>
    </view>
</template>

<script>
    export default {
        data () {
            return {
                PoetsList:['苏轼','苏辙','苏洵','柳宗元','辛弃疾'],
                isLoad:false
            }
        },
        methods: {
            PullDownRefresh:function(){
                this.isLoad = true //当用户点击的时候转圈圈
                setTimeout(() => {
                    this.PoetsList = ['李白','杜甫','李贺','白居易','李清照']
                    uni.stopPullDownRefresh()
                    this.isLoad = false //1.5秒后停止转圈圈
                },1500)
            }
        }
    }
</script>

通过上面这些案例的剖析,你是不是一下子多了很多奇思妙想,赶快行动吧,比如:我们可以实现下拉刷新视图了哦!

比如很多的资讯类的app:拿今日头条app来说,下拉刷新这个功能,用户拉一下,就蹦跶出几条新闻,用户又拉一下。就又蹦跶出几条新闻,我们是不是可以实现了呢?。


7.综合案例
待续


上拉加载功能

onReachBottom 监听页面上拉触底,页面滚动到底部的事件,常用于下拉下一页数据。与method同级。

实行条件:页面要有一定的高度,右侧出现滚动条为止,不然没法子触发onReachBottom函数的。

最直接的方法给大容器增加一个高度样式 height:100vh;

<template>
    <view class="container">
        
    </view>
</template>

<style lang="scss" scoped>
    .container {
        height: 100vh;
    }
</style>

有了一定的高度,我们就可以触发它了(与method同级)。

onReachBottom:function(){
            console.log('页面触底了哦!')
        },

效果预览:



既然这个onReachBottom方法已经正常启用了,那么我们是不是可以实现一些功能了呢?比如上拉的时候,让页面加载更多的数据呢?嗯呢!就是这个样子。


细心的我们会发现,滚动条还未真正触碰到底部的时候,就已经触发了onReachBottom方法?这诗为什么?


我来揭谜底吧,其实这一小段距离其实是受 onReachBottomDistance 这个页面配置参数的影响,默认是距离底部50距离。


官方解释:

上面提到了onReachBottomDistance 是页面配置参数,所以理所应当是在pages.json里面配置了。


找到你所在的页面进行配置。


我们改成当前页面距离底部还有200px的时候触发触底事件。


预览效果:


我们发现细微挪动一下还没开始上挪滚动条就触发了触底事件了,效果很明显,而这个效果就是受到onReachBottomDistance 页面配置参数的影响。


接下来我们来看一些具体的小案例,实行上拉预处理加载更多数据,然后显示到视图上。


案例代码:

<template>
    <view class="container">
        <view class="" v-for="(item,index) in PoetsList" :key="index">
            {{item}}
        </view>
        
    </view>
</template>

<script>
    export default {
        data () {
            return {
                PoetsList:['苏轼','苏辙','苏洵','柳宗元','辛弃疾'],
                isLoad:false
            }
        },
        onReachBottom:function(){
            console.log('页面触底了哦!')
            //在原有数据的基础上,无限推送新数据,这里仅用来测试用途
            this.PoetsList = [
            ...this.PoetsList,
            ...['郑燮','杜牧','王维','陆游','纳兰性德'],
            ...['刘禹锡','陶渊明']
            ]
        },
        methods: {
            
        }
    }
</script>

<style lang="scss" scoped>
    .container {
        height: 100vh;
        width: 750upx;
        background-color: #ffff7f;
    }
</style>

上面没看懂的话,也可以用push()方法,实现的效果是一样的。

<script>
    export default {
        data () {
            return {
                PoetsList:['苏轼','苏辙','苏洵','柳宗元','辛弃疾'],
                PoetsList2:['郑燮','杜牧','王维','陆游','纳兰性德']
            }
        },
        onReachBottom:function(){
            console.log('页面触底了哦!')
            //在原有数据的基础上,无限推送新数据,这里仅用来测试用途
            for(let poet of this.PoetsList2) {
                this.PoetsList.push(poet)
            }
        },
        methods: {
            
        }
    }
</script>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,564评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,217评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 125,032评论 2 7