首页 > 其他分享 >Vue中实现触底加载效果

Vue中实现触底加载效果

时间:2024-09-18 20:48:44浏览次数:3  
标签:Vue const 触底 observer observerElement value IntersectionObserver 加载

Vue中实现触底加载效果

在移动应用和Web应用中,触底加载是一种常见的功能,它允许用户在滚动到页面底部时自动加载更多内容。这种技术可以提高用户体验,减少用户的操作步骤。本文将介绍如何在Vue中实现触底加载效果。

思路

  1. 使用IntersectionObserver API:这是一个用于异步检测目标元素与祖先元素或顶级文档视窗(viewport)交叉状态的API。
  2. 监听元素的可见性:当用户滚动到页面底部时,底部的元素(触发元素)变为可见,触发加载更多内容。
  3. 分页加载:模拟分页加载数据,每次触底时增加页码,获取下一页的数据。

实现

以下是使用Vue实现触底加载的代码示例:

<template>
  <!-- 列表内容 -->
  <div class="container">
    <ul>
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
    <!-- 触底加载触发元素 -->
    <div ref="observerElement">加载更多...</div>
  </div>
</template>

<script>
import { ref, onMounted, onBeforeUnmount } from 'vue';

export default {
  setup() {
    const items = ref([]); // 列表数据
    const observerElement = ref(null); // 用于触发加载的元素
    const observer = ref(null); // IntersectionObserver 实例
    let page = 1; // 初始化页码

    // 加载更多内容的函数
    const loadMoreItems = () => {
      // 模拟异步加载数据
      setTimeout(() => {
        const newItems = [];
        for (let i = 0; i < 20; i++) {
          newItems.push({ name: `item${(page - 1) * 10 + i + 1}` });
        }
        items.value = [...items.value, ...newItems]; // 合并数组
        page++; // 页码递增
      }, 1000);
    };

    // 创建 IntersectionObserver 实例
    onMounted(() => {
      observer.value = new IntersectionObserver((entries) => {
        if (entries[0].isIntersecting) {
          loadMoreItems();
        }
      }, {
        root: null, // 视口作为根元素
        rootMargin: '0px',
        threshold: 1.0 // 完全可见时触发
      });

      if (observerElement.value) {
        observer.value.observe(observerElement.value);
      }
    });

    // 停止观察并断开 IntersectionObserver 实例
    onBeforeUnmount(() => {
      if (observer.value) {
        observer.value.disconnect();
      }
    });

    return {
      items,
      observerElement
    };
  }
};
</script>

<style>
  .container {
    height: 200px;
    border: 1px solid #000;
    overflow-y: auto;
  }
</style>

代码解释

  • 模板部分:使用<ul>标签显示列表项,<div>标签作为触发加载的元素。
  • 脚本部分
    • 使用ref创建响应式数据itemsobserverElementobserver
    • loadMoreItems函数模拟异步加载数据,每次调用时增加页码并更新列表数据。
    • onMounted生命周期钩子中创建IntersectionObserver实例,并观察observerElement
    • observerElement可见时,调用loadMoreItems函数加载更多数据。
    • onBeforeUnmount生命周期钩子中断开观察者,避免内存泄漏。
  • 样式部分:设置.container的样式,使其具有固定高度和滚动条。

总结

通过使用Vue的组合式API和IntersectionObserver,我们可以轻松实现触底加载功能。这种方法不仅提高了用户体验,而且可以有效地管理数据加载,减少不必要的数据请求。

标签:Vue,const,触底,observer,observerElement,value,IntersectionObserver,加载
From: https://blog.csdn.net/Lyy_ID/article/details/142343607

相关文章

  • springboot+vue疫情监控系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景近年来,全球范围内频繁爆发的疫情不仅严重威胁着人类生命健康,也对社会经济活动造成了巨大冲击。随着信息技术的飞速发展,构建高效、智能的疫情监控系统成为应对疫情挑战、保障公共卫生安全的重要手段。该系统旨在通过集成多源数据、运用......
  • springboot+vue疫情监控平台【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着全球疫情的不断演变,高效、精准的疫情监控成为了保障公共卫生安全、快速响应疫情变化、减少社会经济损失的关键。传统的手工记录与信息传递方式已难以满足当前复杂多变的疫情防控需求。因此,构建一个集数据采集、分析、预警、反馈于......
  • springboot+vue疫情环境下校园宿舍管理系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着全球疫情的持续影响,校园作为人员密集、流动性大的特殊场所,其疫情防控工作显得尤为重要。传统的校园宿舍管理模式在面对疫情挑战时,暴露出信息更新滞后、管理效率低下、健康监测不全面等问题。特别是在学生体温监测、宿舍出入管理、......
  • springboot+vue疫情管理系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景近年来,全球范围内频繁爆发的疫情事件,如COVID-19,对人类社会、经济及日常生活造成了前所未有的冲击。面对疫情,高效、精准的防控管理成为了各国政府及公共卫生部门亟待解决的关键问题。传统的手工记录与管理方式已难以满足大规模疫情下的......
  • 基于django+vue个人健康管理APPapp端【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在快节奏的现代生活中,健康已成为人们日益关注的焦点。随着科技的飞速发展,智能手机普及率的大幅提升,以及大数据、人工智能等技术的广泛应用......
  • OSG开发笔记(三十):OSG加载动力学仿真K模型文件以及测试Demo
    前言  Osg需要打开模型文件,但是遇到显示动力学仿真的K模型文件,.k文件是一种描述材料属性的文件,比如密度、弹性模量等,该模型文件不是常规中间开放格式,无法直接支持,需要自定义解析并且重建三维模型。<br>Demo  实际非常流程,因为视频转gif导致部分看起来不行:      <......
  • 基于django+vue个人博客微信小程序演示录像22023【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网的飞速发展,微信小程序作为一种轻量级、无需下载即可使用的应用形态,已经深入人们的日常生活。个人博客作为个人表达、知识分......
  • 基于django+vue个人博客微信小程序【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网的迅猛发展,微信小程序以其无需下载、即用即走的特点,迅速成为用户获取信息、交流互动的重要平台。个人博客作为个人思想展示......
  • 基于django+vue隔离酒店管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球公共卫生事件的频发,隔离酒店作为疫情防控的重要一环,其管理效率与服务质量直接关系到疫情防控的效果与公众健康安全。传统的人工管......
  • 【Node.js Vue】健康健身追踪系统,帮你解决运动计划难题,实时跟踪成效,让每一次锻炼都精
    ......