@antv/g2
Version:
the Grammar of Graphics in Javascript
64 lines (56 loc) • 1.3 kB
text/typescript
import { each } from '@antv/util';
import Element from '../../../geometry/element/';
import Action from '../base';
import { getElementsByState } from '../util';
/**
* 状态量 Action 的基类
* @abstract
* @class
* @ignore
*/
abstract class StateBase extends Action {
/**
* 状态名称
*/
protected stateName: string = '';
/**
* 设置状态是否激活
* @param enable 状态值
*/
protected abstract setStateEnable(enable: boolean);
/**
* 是否具有某个状态
* @param element 图表 Element 元素
*/
protected hasState(element: Element): boolean {
return element.hasState(this.stateName);
}
/**
* 设置状态激活
* @param enable 状态值
*/
protected setElementState(element: Element, enable: boolean) {
// 防止闪烁
element.setState(this.stateName, enable);
}
/**
* 设置状态
*/
public setState() {
this.setStateEnable(true);
}
/**
* 清除所有 Element 的状态
*/
public clear() {
const view = this.context.view;
this.clearViewState(view);
}
protected clearViewState(view) {
const elements = getElementsByState(view, this.stateName);
each(elements, (el: Element) => {
this.setElementState(el, false);
});
}
}
export default StateBase;