• 微信小程序上拉加载下拉刷新


    微信小程序实现上拉加载下拉刷新

    使用小程序默认提供方法。

    (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载的动画可能会是白色背景,会看不清。

    {
        "usingComponents": {
            "annicate": "/components/annicate/index"
        },
        "navigationBarTitleText": "通告列表",
        "enablePullDownRefresh": true,
        "backgroundColor": "#ffffff",
        "backgroundTextStyle": "dark"
    }

    (2). 在 js 中处理逻辑

    /**
         * 页面相关事件处理函数--监听用户下拉动作
         */
        onPullDownRefresh: function () {
            // 标题栏显示刷新图标,转圈圈
            wx.showNavigationBarLoading()
            // 请求最新数据
            this.initDate(true);
            setTimeout(() => {
                // 标题栏隐藏刷新转圈圈图标
                wx.hideNavigationBarLoading()
            }, 1000);
        },
    
        /**
         * 页面上拉触底事件的处理函数
         */
        onReachBottom: function () {
            setTimeout(() => {
                this.initDate();
            }, 300);
        },

    data 中

    loading: false,                         // 是否正在加载中
            loaded: false,                          // 是否加载完全部数据
    /**
         * 初始化数据
         */
        initDate: function (isPage) {
            var that = this;
            // 加载第一页
            if (isPage === true){
                that.setData({ 
                    notice_list: [],
                    page: 1
                });
            } else {
                var num = that.data.page + 1;
                if (num <= that.data.totalPage) {
                    that.setData({
                        page: num
                    });
                } else if (num > that.data.totalPage) {
                    that.setData({
                        loaded: true
                    });
                }
            }
    
            if (that.data.loading) return;
            if (that.data.loaded) return;
            
            var json = {
                keywords: that.data.keywords
            };
            wx.showLoading({
                title: '加载中',
            })
    
            that.setData({ loading: true, loadTitle: '' });
            noticeList(json).then(res => {
                let notice_list = app.SplitArray(res.data.notice_list.list, that.data.notice_list);
                wx.hideLoading()
                that.setData({
                    notice_list: notice_list,
                    loading: false,
                    loadTitle: that.data.page == res.data.notice_list.total_page ? '已全部加载' : '加载更多',
                    totalPage: res.data.notice_list.total_page
                });
            }).catch(err => {
                that.setData({ loading: false, loadTitle: '加载更多' });
            });;
        },

    页面中

    <view class='annicate_wrap'>
                <annicate bindtap='detailFun' wx:for="{{notice_list}}" wx:key="index" jsonDate="{{item}}"></annicate>
                <view class='loadingicon acea-row row-center-wrapper' wx:if='{{notice_list.length > 0}}'>
                    <text class='loading iconfont icon-jiazai' hidden='{{loading==false}}'></text>{{loadTitle}}
                </view>
            </view>
    app.SplitArray是小程序连接两个数组的方法
    app.js 中
    /*
         * 合并数组
         * @param array list 请求返回数据
         * @param array sp 原始数组
         * @return array
         */
        SplitArray: function(list, sp) {
            return util.SplitArray(list, sp)
        }

    untils 中

    /*
    * 合并数组
    */
    const SplitArray = function (list, sp) {
        if (typeof list != 'object') return [];
        if (sp === undefined) sp = [];
        for (var i = 0; i < list.length; i++) {
            sp.push(list[i]);
        }
        return sp;
    }
  • 相关阅读:
    轻量级javascript库不用写CSS3动画 Move.js
    ajax post 和 get方法详解
    HTML5 localStorage图书阅读器实例
    css3 监听webkitAnimationEnd运动结束 后执行什么
    设计模式四 工厂模式
    设计模式三 原型模式
    设计模式二 单例模式
    设计模式一 6大设计原则
    zookeeper 源码编译
    plantuml 基本语法(转摘)
  • 原文地址:https://www.cnblogs.com/haonanZhang/p/11929116.html
Copyright © 2020-2023  润新知