高亮/选中单元格
上一篇
复制与导出
下一篇
简介
Loading...
我们通过鼠标悬停 (hover) 和点击 (click) 可以触发表格单元格的 高亮
和 选中
,在一些特定场景下,如果希望主动触发,可以通过内置的 交互 API 来实现。
高亮的效果和默认的 主题配置 一致,内部状态为 "hover"
const targetCell = s2.facet.getRowCell()[0]s2.interaction.highlightCell(targetCell)s2.interaction.getCurrentStateName() // "hover"
将一组子节点对应的单元格设置为高亮状态。
const targetNodes = s2.facet.getRowNodes()s2.interaction.highlightNodes(targetNodes)s2.interaction.highlightNodes(targetNodes, 'hover')s2.interaction.highlightNodes(targetNodes, 'selected')
选中的效果和默认的 主题配置 一致,内部状态为 "selected"
const targetCell = s2.facet.getRowCell()[0]s2.interaction.selectCell(targetCell)s2.interaction.getCurrentStateName() // "selected"
全部的单元格都会被更新为选中的样式,内部状态为 "allSelected"
s2.interaction.selectAll()s2.interaction.getCurrentStateName() // "allSelected"
具体请查看 获取单元格数据 - 选中单元格
本质上 highlightCell
和 selectCell
内部都是基于 changeCell
实现的语法糖,所以你也可以直接使用 changeCell
实现更细致的状态更新,如 S2 内置的行列头选中也是基于该 API 实现。
import { InteractionStateName } from '@antv/s2'const targetCell = s2.facet.getRowCell()[0]s2.interaction.changeCell({cell: targetCell,stateName: InteractionStateName.SELECTED,isMultiSelection: false,scrollIntoView: false,})
默认会滚动至可视范围内,可以通过 scrollIntoView
禁用。
也可以直接使用 changeState
直接更新指定单元格的状态
import { InteractionStateName, getCellMeta } from '@antv/s2'const targetCell = s2.facet.getRowCell()[0]// 选中s2.interaction.changeState({cells: [getCellMeta(targetCell)],stateName: InteractionStateName.SELECTED,});// 取消选中s2.interaction.changeState({cells: [],stateName: InteractionStateName.UNSELECTED,});
每一个 单元格实例 都有一个 update
方法,调用它可以进行重绘,从而实现单元格的手动更新。
const targetCell = s2.facet.getRowCell()[0]targetCell.update()
当选中或高亮单元格时,会自动滚动,可以通过 animate: false
关闭动画。
s2.interaction.selectCell(targetCell, {animate: false})
自动滚动时,默认不会触发内部滚动事件,即 S2Event.GLOBAL_SCROLL
, 可以通过 skipScrollEvent: false
禁用。
s2.interaction.selectCell(targetCell, {skipScrollEvent: false})