vue 触底加载 上滑刷新 vue加载更多

4 篇文章 0 订阅
export default {
    components:{
        FenLeiTab,
        Search
    },
    data() {
        return {
            goods_list:[],
            isLoading:false,//是否正在加载  
            isLoadingMsg:"拼命加载中......",

        }
    },
    created() {
       this.getgoodSeachData() //初次渲染页面
       this.bindScroll() //首次调用
    },
    destroyed() {
        this.clearScroll()  //页面销毁之前 清除scroll事件
    },
    methods: {
        // 绑定scroll事件
    bindScroll(){
      window.addEventListener("scroll",this.scrollHande)
    },
    // 清除scroll事件
    clearScroll(){
      window.removeEventListener("scroll",this.scrollHande)
    },
     // 滚动的回调函数
    scrollHande(){
      // scroll和input滑动等都是高频率触发事件,所以在写这些事件的时候 尽量加上防抖和节流
      if(this.isLoading) return // 正在加载的时候,如果滚动时候不请求新数据
      var B = document.documentElement.scrollHeight //获取html内容的高度
      var H = window.innerHeight //获取窗口的高度
      var S = document.body.scrollTop ||document.documentElement.scrollTop //滚出去的高度

      if(B-H-S<60){
        // 快触底了 请求新数据
        this.getgoodSeachData()
      }

    },
       // 请求页面数据
        getgoodSeachData(){
            this.page++ //请求一次page+1  请求下一页数据
            this.isLoading = true // 为true不在请求数据
//goodSeachData 是封装的请求方法            goodSeachData({cid:this.$route.params.id,pagenum:this.page,pagesize:5,}).then(data=>{
                this.isLoading = false
                  if(data.message.goods.length){ //判断data是否存在数据 
                    this.goods_list.push(...data.message.goods)
                }else{
                    this.isLoadingMsg="我是有底线的~~~" 
                }
                        
                })
            },
        },
   
}
uni-app 是一个使用 Vue.js 开发所有前端应用的框架,能够编译到iOS、Android、H5、以及各种小程序等多个平台。触底加载(通常称为“上拉加载更多”或“下拉刷新”)是一种常见的用户交互设计,用于在用户滚动到页面底部时加载更多内容。在 uni-app 中,可以利用框架提供的 API 或者自己编写逻辑来实现触底加载。 具体实现上,可以通过监听滚动事件,并在滚动到底部时执行数据加载的逻辑。在 uni-app 中,可以使用 `scroll-view` 组件或页面的滚动事件监听来完成这一功能。以下是一个简单的实现逻辑示例: 1. 在页面的 `onReachBottom` 事件中触发数据加载函数。 2. 数据加载完成后,更新页面数据并重新渲染。 3. 为了避免重复加载数据,可以设置一个标志位,表示是否正在加载数据。 代码示例: ```javascript export default { data() { return { listData: [], // 页面显示的数据列表 isLoading: false // 是否正在加载数据的标志 }; }, methods: { loadMoreData() { if (this.isLoading) return; // 如果正在加载,则不再加载 this.isLoading = true; // 设置标志为true,表示正在加载 // 这里执行实际的数据加载逻辑,比如调用API获取更多数据 // 假设加载成功后执行回调函数 this.fetchDataCallback(() => { this.isLoading = false; // 加载完成,将标志设置为false }); }, fetchDataCallback(callback) { // 模拟数据加载的异步操作 setTimeout(() => { // 假设每次加载10条数据 const newData = Array.from({ length: 10 }, (_, index) => index + this.listData.length); this.listData = this.listData.concat(newData); callback && callback(); }, 2000); } }, onReachBottom() { // 当页面滚动到底部时调用加载更多数据的方法 this.loadMoreData(); } }; ``` 在页面的 `onReachBottom` 事件中调用 `loadMoreData` 方法,每次用户滚动到底部时都会触发这个方法来加载更多数据。如果正在加载数据,则不会重复触发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值