美文网首页
虚拟滚动-前端处理海量数据展示

虚拟滚动-前端处理海量数据展示

作者: 游民_cd31 | 来源:发表于2020-07-13 21:39 被阅读0次

    官方网址:scroll

    手动实现的参考链接:知乎

    原理:假设有一万条数据在前端展示

    1.父元素定高度(400px)

    2.子元素包括:一个万条数据高度的空元素以保证父元素可正常滑动;一个十条数据展示的盒子absolute;

    3.父元素滚动事件中,同步修改数据盒子的transform:translateY('scrollTop');以保证数据盒子一直在父元素的可视区域内;同步修改数据盒子内展示的数组;

    
    initScroll() {
    
                this.$nextTick(() => {
    
                    this.visibleCount = Math.ceil(this.$refs.scrollWrap.clientHeight / this.itemHeight) * 3 + 2;
    
                    this.start = 0;
    
                    this.end = this.start + this.visibleCount;
    
                    this.visibleData = this.dataSourceTablesList.list.slice(this.start, this.end);
    
                });
    
            },
    
            handleScroll() {
    
                const scrollTop = this.$refs.scrollWrap.scrollTop;
    
                const fixedScrollTop = scrollTop - (scrollTop % this.itemHeight);
    
                this.$refs.content.style.transform = `translate3d(0, ${fixedScrollTop}px, 0)`;
    
                // this.scrollTimer && clearInterval(this.scrollTimer)
    
                // this.scrollTimer=setTimeout(e=>{
    
                //    console.log('setTimeout')
    
                //    this.start = Math.floor(scrollTop / this.itemHeight);
    
                //    this.end = this.start + this.visibleCount;
    
                //    this.visibleData = this.dataSourceTablesList.list.slice(this.start, this.end);
    
                // },50)
    
                this.start = Math.floor(scrollTop / this.itemHeight);
    
                this.end = this.start + this.visibleCount;
    
                this.visibleData = this.dataSourceTablesList.list.slice(this.start, this.end);
    
            },
    style
     .left_bottom{
                    position: relative;
                    height: calc(100vh - 141px);
                    width: 280px
                    margin: 10px
                    overflow: auto
                    background: #3a3c48
                    
                }
                .list-view-phantom {
                    position: absolute;
                    left: 0;
                    top: 0;
                    right: 0;
                    z-index: -1;
                }
    
                .list-view-content {
                    left: 0;
                    right: 0;
                    top: 0;
                    position: absolute;
                }
    

    html:

    image

    相关文章

      网友评论

          本文标题:虚拟滚动-前端处理海量数据展示

          本文链接:https://www.haomeiwen.com/subject/ncnzcktx.html