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
Usage
var table = new SmartTableScroll({
el: document.querySelector('#some-table'),
data: [ { row1Data }, { row2Data } ... ],
heightFn: function(rowData) { return rowData.hasPicture ? 20 : 10; },
buildRow: function(rowData) {
var node = document.createElement('div');
node.classList.add('test-row');
node.innerHTML =
"<div class='test-col index'>"+rowData.index+"</div>"+
"<div class='test-col color'>"+rowData.color+"</div>"+
"<div class='test-col random'>"+rowData.random+"</div>";
return node;
},
updateRow: function(rowData, rowEl) {
rowEl.childNodes[0].textContent = rowData.index;
rowEl.childNodes[1].textContent = rowData.color;
rowEl.childNodes[2].textContent = rowData.random;
},
availableNodes: 200,
});
table.updateData([ { updatedRow1Data }, { updatedRow2Data } ... ]);
Include smart-table-scroll.css
or add the following to your CSS:
.sts-container {
overflow-y: scroll;
position: relative;
}
.sts-container .sts-row {
position: absolute;
}
.sts-container .sts-bottom-anchor {
position: absolute;
height: 1px;
width: 1px;
}
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