antd多个table表格同步滚动
1 <div className={styles.test_table} onScrollCapture={this.handleScrollTable} ref={this.table}> 2 <Table 4 columns={[...partInfoHeader]} 5 dataSource={[...partInfoDataSource]} 6 scroll={{ 7 x: 1300, 8 }} 9 /> 10 </div>
1 <div ref={this.editTable}> 2 { 3 tableList.map((item, index)=> { 4 return ( 5 <div className={styles.table_box} key={index} onScrollCapture={this.handleScrollEditTable}> 6 <Collapse defaultActiveKey={['1']} expandIconPosition="right" ghost> 7 <Panel header={item.name} key="1"> 8 <EditTalble 10 tableData={item.paramArray} 11 tabelHeader={item.columns} 12 editkeys={item.editKeys} 13 update={(data)=> { this.handleUpdatetable(data, index)}}/> 14 </Panel> 15 </Collapse> 16 </div> 17 ) 18 }) 19 } 20 </div>
两个表格都要添加 onScrollCapture 方法,第二个表格是遍历出来的9个表格,因此在最外层加 ref,这样当之后需要对9个表格进行操作时,可以通过 ref 取到父节点,之后遍历获取想要的所有的子节点,(注意不要再 return 的 div 里加 ref,因为这样只加给了最后一个表格),代码如下:
1 handleScrollTable = (scroll) => { 2 console.log('childNodes', this.editTable.current.childNodes);
5 this.editTable.current.childNodes.forEach( item => { 6 let itemBody = item.querySelector('.ant-collapse-content-box') 7 itemBody.scrollLeft = scroll.target.scrollLeft 8 }) 9 }
1 handleScrollEditTable = (scroll) => { 2 const tableBody = this.table.current.querySelector('.ant-table-content') 4 tableBody.scrollLeft = scroll.target.scrollLeft 5 }