class virtualizationList {
constructor(
virtualizationList,
parenBox,
listBox,
itemNumber = 5,
itemHeight = 200
) {
this.virtualizationList = virtualizationList;
this.parenBox = document.querySelector(parenBox);
this.listBox = document.querySelector(listBox);
this.itemHeight = itemHeight;
this.itemNumber = itemNumber;
this.scrollIndex = 0;
this.visualList = [];
}
init() {
let self = this;
this.visualList = this.virtualizationList.slice(0, this.itemNumber);
this.setDom()
this.listBox.addEventListener("scroll", function () {
let scrollIndex = Math.ceil(self.listBox.scrollTop / self.itemHeight);
if(scrollIndex <= self.scrollIndex ) return
self.scrollIndex = scrollIndex;
let item = self.virtualizationList[self.visualList.length]
item && self.visualList.push(item)
self.setDom()
});
}
setDom(){
this.visualList.forEach(item => {
if(item.flag) return;
var newDiv = document.createElement("div");
newDiv.textContent = item.i;
newDiv.style.height = this.itemHeight+'px'
newDiv.style.borderBottom = '1px solid #000';
this.listBox.appendChild(newDiv);
item.flag = true;
})
}
}
let arr = [];
for (let i = 0; i < 100; i++) {
arr.push({i,});
}
const V = new virtualizationList(
arr,
".virtualization_parent",
".virtualization_list"
);
V.init();