Malunan个人博客|IT技术博客 Malunan个人博客|IT技术博客
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
    • HTML
    • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 脚本
  • 剪辑
关于
  • 网站
  • 常用的前端轮子
  • 工具网站
  • 软件工具
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Lunan Ma

升职加薪搞钱~
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
    • HTML
    • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 脚本
  • 剪辑
关于
  • 网站
  • 常用的前端轮子
  • 工具网站
  • 软件工具
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

    • Git使用手册
    • Markdown使用教程
    • npm常用命令
    • 移动端兼容问题
    • 常用cmd命令
    • npm packageJson属性详解
    • yaml语言教程
    • Git修改分支名
    • javaScript-时间相加,超过24小时继续累加
    • 获取视频文件第一帧
    • 前端获取文件下载进度
    • 前端获取上传的视频图片详细信息
    • 解决拖拽时,如果元素内有input,无法选中文本的问题
    • css点击穿透
    • vue插槽传参
    • 谷歌浏览器的kiosk模式
    • 前台下载后台返的二进制文件流
    • css实现无缝切换跑马灯样式
    • 前端优化规范
    • 懒加载+无感删除list思路
      • 需求
      • 思路
        • 面临问题
        • 解决方法
        • 点击删除时 先删除 后请求删除接口
        • 删除到位置时 会触发懒加载请求数据
  • GitHub技巧

  • Nodejs

  • 博客搭建

  • 脚本

  • 技术
  • 技术文档
MaLunan
2024-11-12
目录

懒加载+无感删除list思路

# 需求

一个list列表,当删除子元素时,做到用户无感删除,不需要频繁请求loading 请求列表

# 思路

不重新请求列表刷新数据,做到无感删除

# 面临问题

1, 列表是懒加载,删除元素时,如果调用下一页的懒加载,对丢失上一页的部分数据 因为删除数据后,数据会自动前补齐索引

例如: 1页10条 删除2条数据 第一页8条是在前端展示的,第一页后2条是后端补齐,但没有请求回来

# 解决方法

# 点击删除时 先删除 后请求删除接口

arr.splice(index, 1)
1

# 删除到位置时 会触发懒加载请求数据

  1. 求取正常总数 请求总数 = 当前页数 * 每页条数
  let page = 1 //当前页数
  let pageSize = 10 //每页条数
  let arr = [] //前端操作后数据数组
  let totalNum = page * pageSize //请求总数
  let total = 0 // 请求回来的实时总数
1
2
3
4
5
  1. 变动后的差的条数 正常条数 - 当前数据数组长度
  let val = totalNum - arr.length
1
  1. 差条数 大于 0 && 请求回来的实时总数 !== 前端操作后数据数组 说明差条数,并且不是最后一页,需要补齐当前页数据 否则 正常页数++ 正常请求
  if (val > 0 && total !== arr.length) {
  } else {
    page++ //页数++
    getfn()//请求数据
  }
1
2
3
4
5
  1. 差的是本页的数据,还是上一页的数据,需要计算 相差的倍数 请求总数%实际总数/请求条数|去除小数 = 整数倍数
  let multipleNum = totalNum % arr.length / pageSize | 0
1
  1. 需要请求的页数 = 当前页数 - 相差的倍数
if (val > 0 && total !== arr.length) {
    page = page - multipleNum //差的是本页的数据
    ...
  } else {
    page.value++
    getfn()
  }
1
2
3
4
5
6
7
  1. 懒加载时请求逻辑处理
let resList = {
  total: 100,
  [
    ...
  ]
} //请求回来的数据

 // 请求是否是最后一页 实时数组总数 小于 当前请求条数 肯定是最后一页
let lengthNum = 0 //需要截取的数组长度
if (resList?.length < pageSize) {
  // 最后一页 差总数几个就补几个 
  lengthNum = total.value - arr.length
} else {
  // 删除数字是否改变页数,未改变补齐相差条数,改变补齐当前页数   倍数大于0说明不是当前页了  需要补齐
  if (multipleNum > 0) {
    //改变 
    lengthNum = pageSize - (arr.length % pageSize) //差的条数 = 当前请求条数 - (前端操作后的条数 % 当前请求条数)ps:比如10条,当前条数8条,差2条就补2条
  } else {
    // 未改变补齐删除的当页条数
    lengthNum = val
  }
}
// 截取数据 补齐数据
arr.push(...(resList.splice(resList.length - lengthNum, lengthNum)) as any)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
编辑 (opens new window)
上次更新: 2024/11/12, 14:16:18
前端优化规范
GitHub高级搜索技巧

← 前端优化规范 GitHub高级搜索技巧→

最近更新
01
移动端兼容问题
11-12
02
前端优化规范
03-25
03
css实现无缝切换跑马灯样式
03-05
更多文章>
Theme by Vdoing | Copyright © 2019-2024 LuNan Ma | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式