本页面介绍了 Apache ECharts 中的视觉状态和动画系统,它们共同实现了交互式、动态的可视化。视觉状态定义了图表元素在不同交互上下文(正常、强调、模糊或选中)下的外观,而动画系统则控制元素在这些状态之间的过渡以及对数据变化的响应。
有关高级图形自定义的信息,请参阅 图形工具。
ECharts 提供了一个全面的系统来管理图表元素的视觉状态。这些状态决定了图表元素在不同用户交互时的外观。
ECharts 定义了四种显示状态,如 src/util/types.ts652-653 中可以看到。
来源:src/util/types.ts652-653 src/util/states.ts82-83
视觉状态通过图表选项中的嵌套结构进行配置。
emphasis 配置接受两个重要属性:
focus:控制哪些元素被强调
'self':仅高亮鼠标悬停的元素(饼图、漏斗图默认值)'series':高亮整个系列(大多数图表默认值)'adjacency':高亮元素及其相邻元素(适用于图、桑基图)'descendant':高亮元素及其后代元素(适用于树、树状图、旭日图)blurScope:控制哪些元素被模糊
'coordinateSystem':模糊同一坐标系内的元素'series':模糊系列内的元素'global':模糊所有系列的所有元素来源:src/util/states.ts78-83 src/util/states.ts647-684 test/hoverFocus.html72-81
ECharts 使用内部属性跟踪每个元素的当前状态。
el.hoverState:数值(0:正常,1:模糊,2:强调)el.selected:布尔标志,指示选中状态状态转换由诸如 enterEmphasis()、leaveBlur() 等函数管理,这些函数会更新这些属性并触发视觉更新。
来源:src/util/states.ts109-145 src/util/states.ts372-396
ECharts 的动画系统提供了状态更改和数据更新的平滑过渡。
动画选项可以在多个级别指定:
在 src/util/types.ts833-872 中定义了关键的动画属性:
animation:启用/禁用动画(布尔值)animationThreshold:当元素数量超过阈值时禁用动画animationDuration:初始动画的持续时间(毫秒)animationEasing:缓动函数(例如,'linear'、'quadraticOut')animationDelay:动画开始前的延迟(毫秒)animationDurationUpdate:更新动画的持续时间(毫秒)animationEasingUpdate:更新的缓动函数animationDelayUpdate:更新动画开始前的延迟(毫秒)来源:src/util/types.ts823-872 test/bar-race.html117-120
动画系统是通过关键方法实现的:
initProps():使用动画初始化元素属性updateProps():使用动画更新元素属性removeElement():使用动画移除元素removeElementWithFadeOut():使用淡出效果移除元素这些函数从 src/animation/basicTransition.ts 导出,并在 src/util/graphic.ts82 中重新导出。
来源:src/util/graphic.ts72-82 src/chart/bar/BarView.ts319-320
视觉状态和动画协同工作,以创建平滑、交互式可视化。
当元素状态改变时(例如,从正常到强调),视觉属性(如颜色、大小或不透明度)会从其初始值过渡到目标状态值。
过渡动画过程
stateProxy 函数计算目标外观。updateProps() 函数从当前外观动画到目标外观。来源:src/util/states.ts325-339 src/chart/bar/BarView.ts424-439
ECharts 为标签动画提供了特殊处理,允许文本标签在值更改时平滑地进行动画。
当启用 valueAnimation 时,标签中更改的值将从旧值动画到新值。
来源:src/label/labelStyle.ts280-285 test/bar-race.html108-115
柱状图赛跑(Bar racing charts),如 test/bar-race.html 所示,展示了 ECharts 动画系统的强大功能
关键配置元素包括:
来源:test/bar-race.html101-120 src/chart/bar/BarSeries.ts190-162
ECharts 通过 emphasis(强调)状态提供了丰富的悬停效果功能
focus 设置来强调相关的元素blurScope 来弱化(模糊)其他元素来源:test/hoverStyle.html165-171 test/hoverFocus.html84-85
对于大型数据集,动画会影响性能。ECharts 提供了 animationThreshold 选项,当元素数量超过阈值时自动禁用动画。
在某些情况下,您可能希望即使元素不可见也要强制进行动画。ECharts 为此目的提供了特殊的标志。
forceLabelAnimation:即使对于不可见的元素,也强制进行标签动画disableLabelAnimation:即使在正常情况下会动画,也禁用标签动画这些在类似柱状图赛跑(bar-racing)的图表中特别有用,因为元素可能暂时超出视图。
来源:src/util/types.ts125-139 src/chart/bar/BarView.ts296
ECElement 接口通过状态管理属性扩展了 ZRender 的 Element
ECharts 使用状态代理机制来计算元素在不同状态下的视觉外观。默认实现位于 elementStateProxy() (src/util/states.ts325-339)
此代理函数在未定义特定样式时应用默认的视觉增强。
来源:src/util/states.ts325-339 src/util/states.ts346-356
Apache ECharts 中的视觉状态和动画系统提供了创建交互式和动态可视化的强大工具
了解这些系统可以帮助您创建更具吸引力和交互性的图表,并通过平滑的过渡帮助用户理解数据变化和关系。
来源:src/util/types.ts652-653 src/util/states.ts78-83 src/util/types.ts823-872