在cube ui中使用better-scroll 自定义下拉刷新和上拉加载内容

在这次写项目中,偶然看到cube-ui组件库,看到这个ui组件库滚动盒子都是根据better-scroll封装的,在移动端上滑动效果体验比较不错,于是我决定使用cube-ui组件库,在使用过程中,在自定义下拉刷新中出错,由于项目时间比较紧张,也就没有再细研究。
今天中午闲下来,完整代码如下:(需要注意的是:必须要绑定滚动事件,让下拉刷新盒子的top值实时于内容顶部位置吻合)

<template>
    <div class="alarm-list">
        <div class="select-group">

        </div>
        <div class="list-scroll-wrap">
            <cube-scroll
                ref='alarm-list-scroll'
                :data="items" :options="options"
                :scroll-events="['scroll']"
                @scroll="onScrollHandle"
                @pulling-down="onPullingDown"
                @pulling-up="onPullingUp">
                <ul>
                    <li v-for="item in items" class="item"></li>
                </ul>
              <!--  下拉刷新  需要加上:cube-pulldown-wrapper  定位下拉盒子内容在content顶部 :style="pullDownStyle" -->
                <template slot="pulldown" slot-scope="props">
                    <div v-if="props.pullDownRefresh" class="cube-pulldown-wrapper" :style="pullDownStyle">
                <!--  自定义下拉刷新的内容   -->
                        <div class="pulldown-content">
                            <span v-if="props.beforePullDown">下拉刷新...</span>
                            <div v-else>
                                <span v-if="props.isPullingDown">正在更新...</span>
                                <span v-else>更新成功</span>
                            </div>
                        </div>
                    </div>
                </template>
                <template slot="pullup" slot-scope="props">
                    <div v-if="props.pullUpLoad" class="cube-pullup-wrapper" style="height: 0.8rem">
                        <p v-if="props.isPullUpLoad">  加载中.....</p>
                    </div>
                </template>
            </cube-scroll>
        </div>
    </div>
</template>

<script>

    export default {
        data() {
            return {
                items: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                /* options 参数配置参考better-scroll 的官网*/
                options: {
                    pullDownRefresh: {
                        threshold: 40,
                        stop: 50,
                    },
                    pullUpLoad:{
                        threshold: 100,
                    },
                },
                pullDownY: 0,
                pullDownStyle: '',
            }
        },
        computed: {
            /* 自定义下拉到一定高度你想展示的内容 */
            // pullDownTip() {
            //     if (this.pullDownY <= 60) {
            //         return '下拉刷新...'
            //     } else if (this.pullDownY <= 90) {
            //         return '继续下拉有惊喜...'
            //     } else {
            //         return '松手得惊喜!'
            //     }
            // },
        },
        methods: {
            /* 根据滚动事件 计算下拉刷新的位置,当自定的下拉刷新动画盒子定位在盒子顶部 */
            onScrollHandle(pos) {
                // console.log(pos)
                this.pullDownY = pos.y
                if (pos.y > 0) {
                    this.pullDownStyle = `top:${pos.y - 30}px`
                }
            },
            /*  下拉刷新完成 : this.$refs['alarm-list-scroll'].forceUpdate() 强制执行下拉盒子的高度 */
            onPullingDown() {
                setTimeout(() => {
                    this.$refs['alarm-list-scroll'].forceUpdate()
                }, 1000)
            },
            /* 上拉加载  */
            onPullingUp(){
                setTimeout(() => {
                    for(let i=0;i<3;i++){
                        this.items.push(i+'=')
                    }
                    this.$refs['alarm-list-scroll'].forceUpdate()
                }, 3000)
            }
        }
    }
</script>

<style lang="scss" rel="stylesheet/stylus">
    .alarm-list {
        height: 100vh;
    }

    .select-group {
        height: 1.5rem;
    }

    .list-scroll-wrap {
        height: calc(100vh - 1.5rem);
        background: lavender;

        .item {
            height: 1.8rem;
            background: lightblue;
            margin: 0.3rem;

            &:nth-child(1) {
                margin-top: 0;
            }
        }
    }


</style>

实现效果
在这里插入图片描述

  • html布局
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值