diff --git a/packages/s2-core/__tests__/spreadsheet/scroll-spec.ts b/packages/s2-core/__tests__/spreadsheet/scroll-spec.ts index b634849f5a..2752f4b171 100644 --- a/packages/s2-core/__tests__/spreadsheet/scroll-spec.ts +++ b/packages/s2-core/__tests__/spreadsheet/scroll-spec.ts @@ -1,6 +1,8 @@ +/* eslint-disable jest/expect-expect */ /* eslint-disable jest/no-conditional-expect */ import * as mockDataConfig from 'tests/data/simple-data.json'; import { createMockCellInfo, getContainer, sleep } from 'tests/util/helpers'; +import { cloneDeep } from 'lodash'; import { ScrollBar, ScrollType } from '../../src/ui/scrollbar'; import type { CellScrollPosition } from './../../src/common/interface/scroll'; import { PivotSheet, SpreadSheet } from '@/sheet-type'; @@ -909,7 +911,7 @@ describe('Scroll Tests', () => { new MouseEvent('click', { clientX: x + scrollbar.position.x, // 在滚动条内点击 - clientY: y + scrollbar.position.y + scrollbar.theme.size - 2, + clientY: y + scrollbar.position.y + scrollbar.theme.size! - 2, } as MouseEventInit), ); @@ -928,4 +930,30 @@ describe('Scroll Tests', () => { containsMock.mockReset(); }, ); + + test('should not trigger scroll event when first rendered', () => { + const expectScroll = getScrollExpect(); + + expectScroll(); + }); + + test('should not trigger scroll event when options changed', () => { + const expectScroll = getScrollExpect(); + + s2.setOptions({ + hierarchyType: 'tree', + }); + s2.render(); + + expectScroll(); + }); + + test('should not trigger scroll event when data config changed', () => { + const expectScroll = getScrollExpect(); + + s2.setDataCfg(cloneDeep(mockDataConfig)); + s2.render(); + + expectScroll(); + }); }); diff --git a/packages/s2-core/src/facet/base-facet.ts b/packages/s2-core/src/facet/base-facet.ts index fd14be4e2f..618a5f013d 100644 --- a/packages/s2-core/src/facet/base-facet.ts +++ b/packages/s2-core/src/facet/base-facet.ts @@ -265,7 +265,7 @@ export abstract class BaseFacet { this.renderHeaders(); this.renderScrollBars(); this.renderBackground(); - this.dynamicRenderCell(); + this.dynamicRenderCell(true); } /** @@ -641,24 +641,24 @@ export abstract class BaseFacet { this.hRowScrollBar.on(ScrollType.ScrollChange, ({ offset }) => { const newOffset = this.getValidScrollBarOffset(offset, maxOffset); - const rowHeaderScrollX = Math.floor(newOffset); - this.setScrollOffset({ rowHeaderScrollX }); + const newRowHeaderScrollX = Math.floor(newOffset); + this.setScrollOffset({ rowHeaderScrollX: newRowHeaderScrollX }); this.rowHeader?.onRowScrollX( - rowHeaderScrollX, + newRowHeaderScrollX, KEY_GROUP_ROW_RESIZE_AREA, ); this.rowIndexHeader?.onRowScrollX( - rowHeaderScrollX, + newRowHeaderScrollX, KEY_GROUP_ROW_INDEX_RESIZE_AREA, ); this.cornerHeader.onRowScrollX( - rowHeaderScrollX, + newRowHeaderScrollX, KEY_GROUP_CORNER_RESIZE_AREA, ); const scrollBarOffsetX = this.getScrollBarOffset( - rowHeaderScrollX, + newRowHeaderScrollX, this.hRowScrollBar, );