首页 > 其他分享 >VUE实现 上滑加载更多

VUE实现 上滑加载更多

时间:2024-04-11 10:25:47浏览次数:25  
标签:VUE const 实现 items loadingMore handleScroll page 加载

实现HTML5页面上滑加载更多功能的方案:

1. 页面结构

<div id="content-container">
  <div class="item" v-for="(item, index) in items" :key="index">
    <!-- 在这里渲染单个数据项的内容 -->
  </div>
</div>

<!-- 加载提示区域 -->
<div id="load-more" v-if="loadingMore">
  <p>Loading...</p>
</div>

2. JavaScript(假设使用Vue.js作为示例框架)

const app = new Vue({
  el: '#app',
  data() {
    return {
      items: [], // 存储已加载的数据项
      page: 1, // 当前请求页码
      loadingMore: false, // 是否正在加载更多
      hasMore: true, // 是否还有更多数据可供加载
    };
  },
  mounted() {
    this.fetchData();
    window.addEventListener('scroll', this.handleScroll);
  },
  beforeDestroy() {
    window.removeEventListener('scroll', this.handleScroll);
  },
  methods: {
    fetchData() {
      this.loadingMore = true;
      axios.get(`your-api-url?page=${this.page}&limit=15`)
        .then(response => {
          const newItems = response.data.items; // 假设API返回数据结构中包含一个名为items的数组
          if (newItems.length < 15) {
            this.hasMore = false; // 如果本次加载数量不足15条,说明已无更多数据
          }
          this.items.push(...newItems);
          this.page++;
          this.loadingMore = false;
        })
        .catch(error => {
          console.error('Error fetching more data:', error);
          this.loadingMore = false;
        });
    },
    handleScroll() {
      const contentContainer = document.getElementById('content-container');
      const threshold = 100;
      const { scrollTop, offsetHeight, scrollHeight } = contentContainer;
      const distanceFromBottom = scrollHeight - (scrollTop + offsetHeight);

      if (!this.loadingMore && distanceFromBottom <= threshold && this.hasMore) {
        this.fetchData();
      }
    },
  },
});

解释说明

  • 页面结构中,使用div#content-container来存放数据项,并通过v-for循环遍历items数组进行渲染。同时,添加了一个div#load-more用于显示加载中的提示,其显示与否由loadingMore状态控制。

  • JavaScript部分,我们创建了一个Vue实例,其中:

    • data属性定义了所需的状态变量:items存储已加载的数据项,page记录当前请求的页码,loadingMore表示是否正在加载更多,hasMore标识是否还有更多数据可加载。

    • mounted生命周期钩子中,初始化时调用fetchData方法加载第一页数据,并监听窗口的scroll事件,绑定handleScroll方法处理滚动行为。

    • beforeDestroy生命周期钩子中,移除scroll事件监听器,防止内存泄漏。

    • methods中定义了:

      • fetchData方法:负责发起Ajax请求,获取下一页数据。请求成功后,将新数据追加到items数组,并更新页码和loadingMore状态。若本次加载数据不足15条,则设置hasMorefalse。若请求失败,仅打印错误信息并恢复loadingMore状态。

      • handleScroll方法:计算content-container距底部的距离distanceFromBottom。当距离小于等于阈值(100像素),且当前未处于加载状态且仍有更多数据时,触发fetchData方法加载更多数据。

使用div展示数据,通过Ajax动态加载,距离底部100像素时触发加载,加载中显示提示,加载失败时不重试,每次加载15条数据。



欢迎关注公-众-号【TaonyDaily】、留言、评论,一起学习。

公众号

Don’t reinvent the wheel, library code is there to help.

文章来源:刘俊涛的博客


若有帮助到您,欢迎点赞、转发、支持,您的支持是对我坚持最好的肯定(_)

标签:VUE,const,实现,items,loadingMore,handleScroll,page,加载
From: https://www.cnblogs.com/lovebing/p/18128220

相关文章

  • gin 框架实现异步处理
    packagemainimport("log""time""github.com/gin-gonic/gin")funcmain(){//1.创建路由//默认使用了2个中间件Logger(),Recovery()r:=gin.Default()//1.异步r.GET("/long_async",func(c*gi......
  • Vuex和Pinia
    一、区别     pinia它没有mutation,他只有state,getters,action【同步、异步】使用他来修改state数据。pinia默认也是存入内存中,如果需要使用本地存储,配置上比vuex麻烦一点。pinia语法比vuex更容易理解和使用,灵活。pinia没有modules配置,没一个独立的仓库,都是definSto......
  • VUE - 使用h函数创建虚拟节点
    VUE-使用h函数创建虚拟节点 1. 如在 antd 的 notification 组件中使用 参考文档:https://1x.antdv.com/components/notification-cn/leth=this.$createElement;that.$notification.error({message:'上传提示',descrip......
  • Vue3+TS+Vite+pinia
    一、创建项目    创建文件夹,然后cmd,输入以下内容。然后选择TS版本。npmcreatevite二、安装依赖   在vscode中,使用终端,输入命令 npmi三、安装其他插件    3.1、路由vue-router        多页面应用需要安装路由。所以需要使用v......
  • 两个纯数字字符串相加Python实现版
    """两个字符串相加模拟两个大整数相加,但是不能直接相加,采用每一位相加的方式"""defadd_large_numbers(num1,num2):#反转字符串,方便从低位开始相加num1=num1[::-1]num2=num2[::-1]#初始化结果列表和进位result=[]carry=0#......
  • 基于istio实现多集群流量治理
    本文分享自华为云社区《基于istio实现多集群流量治理》,作者:可以交个朋友。一背景对多云、混合云等异构基础设施的服务治理是Istio重点支持的场景之一。为了提高服务的可用性,避免厂商锁定,企业通常会选择将应用部署在多个地域的多个集群,甚至多云、混合云等多种云环境下,多集群的......
  • 基于java实现的二手车交易网站
    开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9页面展示用户功能模块定金支付管理,在定金支付管理页面可以填写订单编号、车型、品牌、分类、车身颜色、售价、订......
  • 前端学习-vue视频学习015-其他API
    尚硅谷视频教程shallowRefshallowReactive浅层次的响应式数据(仅第一层)shallowRef:只能整体修改person.value可以修改,但是person.value.name无法修改shallowReactive:只能修改对象的第一层数据car.brand可以修改,但是car.options.color无法修改主要用处在于:如果数据量非常......
  • 前端使用 Konva 实现可视化设计器(3)
    github/giteeStar终于有几个了!从这章开始,难度算是(或者说细节较多)升级,是不是值得更多的Star呢?!继续求Star,希望大家多多一键三连,十分感谢大家的支持~创作不易,Star50个,创作加速!github源码gitee源码示例地址选择框准备工作想要拖动一个元素,可以考虑使用节点的drag......
  • 毕设作品案例-基于JAVA-SSM实现-微信小程序-校园电商商城系统-附源码+LW(文档+PPT)+示例
    目录概要小程序开发说明研究背景系统功能分析系统功能的具体实现(项目展示)小程序端-前台功能模块后台管理员功能模块管理员功能模块源码获取概要本文论述了微信小程序的校园商铺系统的设计和实现,该系统从实际运用的角度出发,运用了计算机系统设计、数据库等相关知识......