当前位置:   article > 正文

uni-app的虚拟列表_uniapp虚拟列表

uniapp虚拟列表
  1. <template>
  2. <div>
  3. <ul ref="list" class="list">
  4. <li v-for="(item, index) in virtualList" :key="item.id" class="item">
  5. {{ item.text }}
  6. </li>
  7. </ul>
  8. </div>
  9. </template>
  10. <script>
  11. export default {
  12. data() {
  13. return {
  14. list: [], // 原始数据列表
  15. virtualList: [], // 虚拟列表
  16. startIndex: 0, // 可视区域内第一个列表项的索引
  17. endIndex: 0, // 可视区域内最后一个列表项的索引
  18. itemHeight: 50, // 列表项的高度
  19. visibleCount: 5, // 可视区域内的列表项个数
  20. };
  21. },
  22. mounted() {
  23. // 初始化数据
  24. this.initData();
  25. // 监听滚动事件
  26. this.$refs.list.addEventListener('scroll', this.handleScroll);
  27. // 初始化虚拟列表
  28. this.initVirtualList();
  29. },
  30. methods: {
  31. initData() {
  32. // 获取数据列表
  33. // ...
  34. },
  35. initVirtualList() {
  36. // 计算可视区域内的列表项索引范围
  37. this.startIndex = 0;
  38. this.endIndex = Math.min(this.startIndex + this.visibleCount - 1, this.list.length - 1);
  39. // 截取可视区域内的列表项
  40. this.virtualList = this.list.slice(this.startIndex, this.endIndex + 1);
  41. },
  42. handleScroll() {
  43. // 计算滚动距离
  44. const scrollTop = this.$refs.list.scrollTop;
  45. // 计算可视区域内的列表项索引范围
  46. this.startIndex = Math.floor(scrollTop / this.itemHeight);
  47. this.endIndex = Math.min(this.startIndex + this.visibleCount - 1, this.list.length - 1);
  48. // 截取可视区域内的列表项
  49. this.virtualList = this.list.slice(this.startIndex, this.endIndex + 1);
  50. },
  51. },
  52. };
  53. </script>
  54. <style>
  55. .list {
  56. height: 250px;
  57. overflow-y: auto;
  58. }
  59. .item {
  60. height: 50px;
  61. line-height: 50px;
  62. border-bottom: 1px solid #ccc;
  63. text-align: center;
  64. }
  65. </style>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/779349
推荐阅读
相关标签
  

闽ICP备14008679号