Smart Table Scroll
Build 1MM row tables with native scroll bars by reusing and yielding nodes.
Created by @ChrisPolis, originally as a component of Datacomb
For related projects, see: Clusterize.js and fixed-data-table
Demo
Usage
var table = // DOM element to render to el: document // Array of objects that will be used to build and update each row data: row1Data row2Data ... // Function used to calculate the height of each row { return rowDatahasPicture ? 20 : 10; } // Used when first creating dom nodes for each row { var node = document; nodeclassList; nodeinnerHTML = "<div class='test-col index'>"+rowDataindex+"</div>"+ "<div class='test-col color'>"+rowDatacolor+"</div>"+ "<div class='test-col random'>"+rowDatarandom+"</div>"; return node; } // Used to yield an existing row to a new element in `data` { rowElchildNodes0textContent = rowDataindex; rowElchildNodes1textContent = rowDatacolor; rowElchildNodes2textContent = rowDatarandom; } // (Optional) How many rows to create nodes for // this needs to be > than the max number of rows that can fit on screen (2x this value seems right) // play around, this will have performance implications availableNodes: 200; // To update the table, pass in new data to `updateData`table;
Include smart-table-scroll.css
or add the following to your CSS:
Known limitations
Firefox has an issue with top
css property greater than ~18,000,000px
(more info); the 1,000,000 row demo works with Firefox, but larger tables may not.
To build and test locally
$ npm install
$ npm run build
$ npm run serve
$ open localhost:5050