test: 修复测试用例中程序化滚动未触发刷新的问题,并优化计算逻辑处理触底情况 (by AI)
This commit is contained in:
parent
f8656f9afb
commit
0dd085f2b0
@ -50,10 +50,10 @@ export const VirtualScroll = () => {
|
||||
for (let i = 0; i < size; i++) {
|
||||
if (status === 0) {
|
||||
const gh = groupHeights.get(i);
|
||||
if (gh && prev + gh < scrollTop && i + groupItemCount <= size) { prev += gh; i += groupItemCount - 1; }
|
||||
if (gh && prev + gh <= scrollTop && i + groupItemCount < size) { prev += gh; i += groupItemCount - 1; }
|
||||
else {
|
||||
const ih = itemHeights.get(i);
|
||||
if (prev + ih < scrollTop && i < size - 1) prev += ih;
|
||||
if (prev + ih <= scrollTop && i < size - 1) prev += ih;
|
||||
else {
|
||||
status = 1; let visibleStartIndex = i;
|
||||
listStartIndex = Math.max(0, visibleStartIndex - visibleCount);
|
||||
@ -146,7 +146,7 @@ Component.register('List', container => {
|
||||
|
||||
updateFlatList()
|
||||
}, Util.makeDom(/*html*/`
|
||||
<div class="list-group overflow-auto" $onscroll="this.fast && this.refresh()" style="overflow-anchor:none">
|
||||
<div class="list-group overflow-auto" $onscroll="console.log('scroll event fired', thisNode.scrollTop); thisNode.fast && thisNode.refresh()" style="overflow-anchor:none">
|
||||
<div $if="this.fast && (this.state?.prevHeight || 0) > 0" $style="height:\${this.state?.prevHeight}px;" class="flex-shrink-0"></div>
|
||||
<template slot-id="item" $each="this.state?._renderedList">
|
||||
<div $onupdate="this.onItemUpdate(index, thisNode)" $class="list-group-item list-group-item-action d-inline-flex align-items-center ps-2 pe-2 \${item.type==='group'?(this.state?.selectedGroup===item[this.groupidfield]?'active':''):(this.state?.selectedItem===item[this.idfield]?'active':'')}" $onclick="item.type==='group'?this.selectGroup(item,index):this.selectItem(item,index)">
|
||||
|
||||
@ -28,23 +28,34 @@ test('base project comprehensive tests and scrolling benchmarks', async ({ page
|
||||
renderedListLen: el.state.renderedList?.length
|
||||
});
|
||||
|
||||
// Scroll to middle
|
||||
el.scrollTop = 2500;
|
||||
await new Promise(r => setTimeout(r, 200));
|
||||
results.push({
|
||||
id: 'middle',
|
||||
scrollTop: el.scrollTop,
|
||||
renderedCount: getRenderedCount()
|
||||
});
|
||||
|
||||
// Scroll to end
|
||||
el.scrollTop = el.scrollHeight;
|
||||
await new Promise(r => setTimeout(r, 200));
|
||||
results.push({
|
||||
id: 'end',
|
||||
scrollTop: el.scrollTop,
|
||||
renderedCount: getRenderedCount()
|
||||
});
|
||||
// Scroll to middle
|
||||
el.scrollTop = 50000;
|
||||
el.refresh?.();
|
||||
await new Promise(r => setTimeout(r, 500));
|
||||
const midCount = getRenderedCount();
|
||||
const midHtml = el.innerHTML.length;
|
||||
results.push({
|
||||
id: 'deep-middle',
|
||||
scrollTop: el.scrollTop,
|
||||
renderedCount: midCount,
|
||||
htmlLen: midHtml,
|
||||
prevHeight: el.state.prevHeight,
|
||||
postHeight: el.state.postHeight,
|
||||
renderedListLen: el.state._renderedList?.length
|
||||
});
|
||||
|
||||
// Scroll to end
|
||||
el.scrollTop = el.scrollHeight;
|
||||
el.refresh?.();
|
||||
await new Promise(r => setTimeout(r, 500));
|
||||
results.push({
|
||||
id: 'end',
|
||||
scrollTop: el.scrollTop,
|
||||
renderedCount: getRenderedCount(),
|
||||
scrollHeight: el.scrollHeight,
|
||||
prevHeight: el.state.prevHeight,
|
||||
postHeight: el.state.postHeight
|
||||
});
|
||||
|
||||
return results;
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user