vue3.2 前端动态分页算法

文章目录

    • 背景
    • 思路
    • 页面情况
    • 核心代码
    • 小结
    • 效果

背景

   1. 后台接口只是动态返回一个数组的数据,前端需要根据数据量的大小判断是否需要分页,页面高度固定2. 页面根据页数大小有不同的展示a. 只有一页  头部 + 内容 + 统计 + 尾部b. 多页i.  第一页 头部 + 内容 + 尾部ii. 中间页 内容 + 尾部iii. 最后一页 内容 + 统计 + 尾部

思路

	1. 先判断是否一页能满足 如果能满足 不做数据处理2. 不满足则肯定是多页a. 先计算第一页的逻辑,将数组分为[第一页数据, 剩余数据]b. 剩余数据只有两种情况i. 符合尾页逻辑 直接将剩余数据放入最后一页ii. 不符合尾页逻辑 递归实现中间页

页面情况

 s1 只有一页  不需要操作s2 多页a. 第一页因为要显示头部  所以高度为  540 - 50b. 中间页只显示内容      所以高度为  540c. 尾页因为要显示统计    所以高度为  540 - 50

核心代码

<template><div class="container"><div class="page" v-for="(list, index) in lists" :key="index"><div class="top" v-if="index === 0"><VHead /></div><div class="middle"><VTable :item="list" /><VTotal v-if="index === lists.length - 1" /></div><div class="bottom"><VFooter /></div></div></div>
</template><script setup>
import { ref, onMounted, nextTick } from 'vue'
import VHead from './components/VHead.vue'
import VTable from './components/VTable.vue'
import VTotal from './components/VTotal.vue'
import VFooter from './components/VFooter.vue'
import { init } from './data/index.js'const HEIGHT = 540const list = init(5)
const lists = ref([])const render = async () => {lists.value = [list]await nextTick()calculatePages()
}const getTrs = () => {const trEls = document.querySelectorAll('.v-table tbody tr')let trHeights = []for (let i = 0; i < trEls.length; i++) {trHeights.push(trEls[i].offsetHeight)}const trHeightsTotal = trHeights.reduce((acc, cur) => acc + cur, 0)return {trHeights,trHeightsTotal}
}const calculatePages = () => {const isSiglePage = getIsSinglePage()if (!isSiglePage) {const remainIndex = calculateFirstPage()lists.value = [list.slice(0, remainIndex)]calculateOtherPages(remainIndex)}
}const getIsSinglePage = () => {const { trHeightsTotal } = getTrs()if (trHeightsTotal + 100 > HEIGHT) {return false}return true
}const calculateFirstPage = () => {const { trHeights } = getTrs()const maxHeight = HEIGHT - 50let total = 0let index = 0for (let i = 0; i < trHeights.length; i++) {if (total + trHeights[i] > maxHeight) {break}total += trHeights[i]index = i}return index
}const calculateOtherPages = (remainIndex) => {const { trHeights } = getTrs()const remainTrHeights = trHeights.slice(remainIndex)const remainTrTotal = remainTrHeights.reduce((acc, cur) => acc + cur, 0)if (remainTrTotal + 50 > HEIGHT) {let total = 0let index = 0for (let i = remainIndex; i < trHeights.length; i++) {if (total + trHeights[i] > HEIGHT) {break}total += trHeights[i]index = i}if (index) {lists.value.push(list.slice(remainIndex, index))calculateOtherPages(index)}} else {lists.value.push(list.slice(remainIndex))}
}onMounted(() => {render()
})
</script><style lang="scss" scoped>
.container {display: flex;flex-direction: column;
}.page {width: 800px;height: 590px;border: 1px solid #ccc;display: flex;flex-direction: column;justify-content: space-between;margin-bottom: 2px;overflow: hidden;.top,.bottom {height: 50px;}.middle {flex: 1;overflow: hidden;}
}
</style>

小结

最开始想的是通过AI实现,经过多次测试发现AI实现的有很多缺陷,甚至需求都不明白,最后只能自己一步一步实现,想了很多方案,最终在此方案下符合需求。
如果有更好的方案,欢迎交流

效果

在这里插入图片描述
在这里插入图片描述

完整代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88594.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UC浏览器PC版自2016年后未再更新不支持vue3

win uc浏览器&#xff0c;点击页面触发异常。UC浏览器PC版自2016年后未再更新&#xff08;最新版本停留在Chromium 50内核&#xff09;。其内置内核版本较低&#xff08;如Trident/Blink旧版&#xff09;&#xff0c;无法支持Vue 3等现代前端框架的语法特性&#xff08;如ES6、…

亚古数据:澳大利亚公司的ABN和ACN号码是什么?

在跨国商业的迷宫中&#xff0c;了解目标市场的公司注册细节是一项不可或缺的技能。对于与中国企业有业务往来的朋友们来说&#xff0c;澳大利亚这片充满机遇的土地上&#xff0c;两个缩写——ABN与ACN&#xff0c;如同解锁合作之门的密钥&#xff0c;显得尤为重要。今天&#…

LangChain框架 Prompts、Agents 应用

目录 (Prompts)提示作用 Prompts 常见操作 基础 PromptTemplate 使用 Few-shot 提示模板 ChatPromptTemplate (对话提示模板) (Agents)代理作用 Agents 常见操作 基础 Agent 使用 自定义工具 Agent 高级应用示例 带记忆的对话代理 使用本地模型的代理 结构化输出代…

模拟实现unordered_map

1.定义unordered_map 是 C 标准库中的哈希表容器&#xff0c;特点是无序存储、平均 O (1) 时间复杂度的插入 / 查找 / 删除操作。其核心原理是通过哈希函数将关键字映射到哈希桶&#xff08;bucket&#xff09;&#xff0c;再通过链表或红黑树处理哈希冲突。2.实现原理1. 哈希表…

史上最详细Java并发多线程(面试必备,一篇足矣)

第一章&#xff1a;线程基础 1.1 线程与进程 进程&#xff1a;系统资源分配的基本单位&#xff0c;拥有独立的内存空间 线程&#xff1a;CPU调度的基本单位&#xff0c;共享进程内存空间 关系&#xff1a;一个进程可包含多个线程&#xff0c;线程切换成本远低于进程 1.2 线程的…

【DataFlow】数据合成流水线工具

1.整体解读 核心思想&#xff1a;以数据为中心的AI&#xff08;Data-Centric AI&#xff09; DataFlow 的核心目标是通过一系列自动化“流水线”&#xff08;Pipelines&#xff09;来处理和生成高质量的数据&#xff0c;从而提升大语言模型&#xff08;LLM&#xff09;在特定领…

Hangfire 调用报错解决方案总结

System.ArgumentNullException: 值不能为 null 错误在使用 Hangfire 时确实是一个常见问题&#xff0c;特别是在配置 Hangfire 服务器时。问题分析这个错误通常发生在以下情况&#xff1a;没有正确配置 Hangfire 服务器队列配置缺失或不正确连接字符串配置问题解决方案要点正确…

MySQL的使用

MySQL的使用一、mysql中的周边命令1. 检查版本2. 查看字符集3. 查看客户端连接4. 查看最后一条警告消息二、数据库、数据表的管理1. 语法规则2. 数据库2.1 查看数据库2.2 创建数据库2.3 选择数据库2.4 查看创建数据库命令2.5 创建库时添加字符集2.6 修改数据库字符集2.7 删除数…

2025Nginx最新版讲解/面试

维护系统多服务器部署&#xff0c;将我们请求代理到各个服务器。代理正向代理&#xff0c;代理对象是我们的客户端&#xff0c;目标对象不知道我们用户。VPN就是典型的正向代理。反向代理&#xff0c;代理对象是服务端&#xff0c;用户不知道服务端具体信息。而这正是Nginx所做…

JAVASCRIPT 前端数据库-V8--仙盟数据库架构-—-—仙盟创梦IDE

老版本 在v1 版本中我们讲述了 基础版的应用 JAVASCRIPT 前端数据库-V1--仙盟数据库架构-—-—仙盟创梦IDE-CSDN博客 接下载我们做一个更复杂的的其他场景 由于&#xff0c;V1查询字段必须 id 接下来我们修改了了代码 JAVASCRIPT 前端数据库-V2--仙盟数据库架构-—-—仙盟创…

UNIX 域套接字实现本地进程间通信

&#x1f680; 使用 UNIX 域套接字 (AF_UNIX) 实现高效进程通信 在 Linux 和其他类 UNIX 系统中&#xff0c;进程间通信 (IPC) 的方法有很多种&#xff0c;例如管道、消息队列、共享内存等。然而&#xff0c;当你的应用程序需要在 同一台机器上的不同进程间进行高效、低延迟的数…

【Axure教程】中继器间图片的传递

中继器在Axure中可以作为图片保存的数据库&#xff0c;在实际系统中&#xff0c;我们经常需要将选择数据库的图片添加到其他图片列表中&#xff0c;所以今天就教大家&#xff0c;怎么在Axure中实现中继器之间的图片传递&#xff0c;包含将一个中继器中的图片列表传递到另一个中…

专题:2025云计算与AI技术研究趋势报告|附200+份报告PDF、原数据表汇总下载

原文链接&#xff1a;https://tecdat.cn/?p42935 关键词&#xff1a;2025, 云计算&#xff0c;AI 技术&#xff0c;市场趋势&#xff0c;深度学习&#xff0c;公有云&#xff0c;研究报告 云计算和 AI 技术正以肉眼可见的速度重塑商业世界。过去十年&#xff0c;全球云服务收…

从代码学习深度强化学习 - PPO PyTorch版

文章目录 前言PPO 算法简介从 TRPO 到 PPOPPO 的两种形式:惩罚与截断代码实践:PPO 解决离散动作空间问题 (CartPole)环境与工具函数定义策略与价值网络PPO 智能体核心实现训练与结果代码实践:PPO 解决连续动作空间问题 (Pendulum)环境准备适用于连续动作的网络PPO 智能体 (连…

PortsWiggerLab: Blind OS command injection with output redirection

实验目的This lab contains a blind OS command injection vulnerability in the feedback function.The application executes a shell command containing the user-supplied details. The output from the command is not returned in the response. However, you can use o…

星云穿越与超光速飞行特效的前端实现原理与实践

文章目录 1,引言2,特效设计思路3,技术原理解析1. 星点的三维分布2. 视角推进与星点运动3. 三维到二维的投影4. 星点的视觉表现5. 色彩与模糊处理4,关键实现流程图5,应用场景与优化建议6,总结1,引言 在现代网页开发中,炫酷的视觉特效不仅能提升用户体验,还能为产品增添…

【Linux】C++项目分层架构:核心三层与关键辅助

C 项目分层架构全指南&#xff1a;核心三层 关键辅助一、核心三层架构 传统的三层架构&#xff08;或三层体系结构&#xff09;是构建健壮系统的基石&#xff0c;包括以下三层&#xff1a; 1. 表现层&#xff08;Presentation Layer&#xff09; 负责展示和输入处理&#xff0…

【机器学习】保序回归平滑校准算法

保序回归平滑校准算法&#xff08;SIR&#xff09;通过分桶合并线性插值解决广告预估偏差问题&#xff0c;核心是保持原始排序下纠偏。具体步骤&#xff1a;1&#xff09;按预估分升序分桶&#xff0c;统计每个分桶的后验CTR&#xff1b;2&#xff09;合并逆序桶重新计算均值&a…

项目开发日记

框架整理学习UIMgr&#xff1a;一、数据结构与算法 1.1 关键数据结构成员变量类型说明m_CtrlsList<PageInfo>当前正在显示的所有 UI 页面m_CachesList<PageInfo>已打开过、但现在不显示的页面&#xff08;缓存池&#xff09; 1.2 算法逻辑查找缓存页面&#xff1a;…

60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)

60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门&#xff08;附 BeagleBone Black 及驱动解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的开源可见光通信&#xff08;VLC / Li-Fi&#xff09;研究平台。它把硬件、驱动、协议栈…