移动端页面下拉加载分页数据

1: javascript写法:

//请求阅读记录数据
var page = 0;
//第一页的数据。页面刚进来就请求这个方法
function getTingHistory(date) {
    $.ajax({
        url: '/studyplan/GetListen?userid=' + curUserId+'&time=' + date + '&page=0' + "&timezone=" + timezone,
        type: 'get',
        success: function (msg)
        {
                $("#read_history").html(msg);//msg里面是ul列表数据,直接塞到div里面显示
                is_extending = true;
        },
        error: function (msg) {
            console.log("请求错误");
            is_extending = false;
        }
    })
}
//后面几页的数据
function extendgetTingHistory(date, page) {
    $.ajax({
        url: '/studyplan/GetListen?userid=' + curUserId+'&time=' + date + '&page=' + page + "&timezone=" + timezone,
        type: 'get',
        success: function (msg) {
            if (msg.length>0) {
                $("#read_history").append(msg);//将后几页的数据加上
                is_extending = true;
            } 
        },
        error: function (msg) {
            console.log("请求错误");
            is_extending = false;
        }
    })
}

var is_extending = false;
//下拉加载更多
$(window).scroll(function () {
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    if (scrollTop + window.innerHeight + 20 >= document.documentElement.offsetHeight) {
        if (is_extending) {
            is_extending = false;
            page++;
            extendgetTingHistory(selectDay,page);
        }
    }
});

2: vue.js写法:

//html部分:
        <ul class="member_ul">
            <li class="member_li" v-for="(item,index) in studentList">
                <div class="avatar"><img :src="item.avatar" alt="Alternate Text"></div>
                <div class="member_right">
                    <div class="mem_name">{{item.name}}</div>
                </div>
            </li>
        </ul>

//js部分:
 export default {
        data: function () {
            return {
                studentList: [],
                myinfo: '',
                pageNum: 0,
               // 设置一个开关来避免重负请求数据
                is_extending: true,
            };
        },
        created() {
            var _self = this;
            this.GetStudentsList();
        },
        mounted() {
            //滚动监听事件
            window.addEventListener('scroll', this.menu);
        },
        methods: {
        //页面刚进来就请求这个方法
            GetStudentsList() {
                var _self = this;
                this.$http.get('/StudyPlan/GetStudents?classId=' + classid + "&page=0&size=30", {
                })
                    .then(function (response) {
                        _self.pageNum = 0;
                        _self.studentList = response.data.students;
                    })
                    .catch(function (error) {
                        _self.is_extending = false;
                    });
            },
            //请第二页以后的数据
            extendGetStudentsList() {
                var _self = this;
                _self.pageNum++;
                this.$http.get('/StudyPlan/GetStudents?classId=' + classid + "&page=" + _self.pageNum + "&size=30", {
                })
                    .then(function (response) {
                        _self.studentList = _self.studentList.concat(response.data.students);
                        _self.is_extending = true;
                    })
                    .catch(function (error) {
                        _self.is_extending = false;
                    });
            },
            menu() {
                var _self = this;
                _self.scroll = document.documentElement.scrollTop || document.body.scrollTop;
                if (_self.scroll + window.innerHeight+20>= document.documentElement.offsetHeight) {
                    if (_self.is_extending) {
                        _self.is_extending = false;
                        _self.extendGetStudentsList();
                    }

                }
            },
        },
    }
分页上拉加载下拉刷新是移动端开发中常见的功能,通常需要使用到第三方库来实现,比如React Native中的FlatList、ListView、SectionList等组件,这些组件都提供了相关的API来实现分页、上拉加载下拉刷新功能。 具体实现步骤如下: 1.在界面中添加FlatList、ListView、SectionList等组件,并设置相关属性如数据源、渲染函数等。 2.为组件添加onEndReachedThreshold和onEndReached事件,onEndReachedThreshold表示距离底部多少距离触发onEndReached事件,onEndReached事件表示到达底部时触发的回调函数,通常在回调函数中发起下一页数据的请求。 3.为组件添加refreshControl属性,并设置onRefresh事件,refreshControl表示下拉刷新的控件,onRefresh事件表示下拉刷新时触发的回调函数,通常在回调函数中重新请求第一页数据。 4.为组件添加ListFooterComponent属性,并设置上拉加载的控件,通常在请求下一页数据时显示上拉加载的控件,请求完毕后隐藏上拉加载的控件。 5.在请求数据时需要记录当前页码,并将请求的数据添加到数据源中,然后重新渲染组件即可。 示例代码如下(以React Native中的FlatList组件为例): ```javascript import React, { useState, useEffect } from 'react'; import { FlatList, View, Text, ActivityIndicator } from 'react-native'; const pageSize = 10; // 每页大小 const data = []; // 数据源 const renderItem = ({ item }) => { return ( <View> <Text>{item.title}</Text> </View> ); }; const renderFooter = () => { return ( <View style={{ alignItems: 'center', justifyContent: 'center', paddingVertical: 10 }}> <ActivityIndicator size="small" /> </View> ); }; const App = () => { const [page, setPage] = useState(1); // 当前页码 const [isLoading, setIsLoading] = useState(false); // 是否正在加载 useEffect(() => { fetchData(); }, [page]); const fetchData = async () => { setIsLoading(true); try { const response = await fetch(`https://api.example.com/list?page=${page}&pageSize=${pageSize}`); const result = await response.json(); data.push(...result.data); setIsLoading(false); } catch (error) { console.error(error); setIsLoading(false); } }; const handleRefresh = () => { setPage(1); }; const handleEndReached = () => { setPage(page + 1); }; return ( <FlatList data={data} renderItem={renderItem} ListFooterComponent={isLoading && renderFooter} onEndReachedThreshold={0.1} onEndReached={handleEndReached} refreshControl={<RefreshControl refreshing={isLoading} onRefresh={handleRefresh} />} /> ); }; export default App; ``` 以上代码中,App组件中的FlatList组件实现了分页上拉加载下拉刷新功能,pageSize表示每页大小,data表示数据源,renderItem表示渲染函数,renderFooter表示上拉加载的控件,page表示当前页码,isLoading表示是否正在加载,fetchData表示请求数据的函数,handleRefresh表示下拉刷新时触发的函数,handleEndReached表示到达底部时触发的函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值