Open jsvr opened 6 years ago
@jsvr 你的这个场景下,原生的echarts是否有mouseout事件产生?你可以在echarts官网示例里面调试一下。
@xieziyu 我刚才试了下, 原生的在官网里试是没有问题的,完全ok
@jsvr setOptMap里面有做什么操作吗?
@xieziyu 就是把一些国家的默认选中了
把一些国家默认选中
@jsvr 如果没有重置图表,事件侦听器应该不会失效的。 能否用我的stackblitz建一个模拟你问题现场的环境: https://stackblitz.com/edit/angular-dcoe1h 这将有助于复现问题和我这边进行调查
刚才测试,发现一个问题, 就是鼠标进入的时候不setOption,鼠标离开时执行setOption, 鼠标再次进入时,进入事件是响应的.
我执行的setOption 相当于就是从新重置图表吧 @xieziyu
@jsvr setOption不会的
稍等一下, 我去你给我的链接上复现一下问题
是这样的,能不能留一个你的联系方式, 我把项目发给你吧 @xieziyu
@xieziyu https://github.com/jsvr/Lenovo-SSCDFPC 这是我的项目地址
@jsvr 收到,多谢,我去看一下。
嗯嗯
@jsvr 我看了一下,貌似并没有出现事件没有被执行的问题,从log看起来,MouseOut和MouseOver都被正确顺序触发了:
不过我注意到在两个国家边缘移动的时候,MouseOver会被额外多触发一次。 但这恐怕不是ngx-echarts的BUG了
还有一个问题:绑定到html上的函数和属性,不能用private修饰,需要改成public的,不然AoT编译时候会报错。
你的那个版本代码是我调试的另一个状态,你把代码改成我这样, @xieziyu
@jsvr 嗯,这个现象需要再深入调查一下,首先可以排除的是,chartMouseOver和chartMouseOut这两个事件接口是正常的。 MouseOut事件未被调用是和setOption导致地图重绘有关系的,重绘并不会取消事件侦听,但是可能影响到了echarts对鼠标位置判定,我怀疑是在重绘过程中,echarts判定鼠标初始位置是在地图之外的,所以它才会在移动过程中,不停地上报MouseOver,而理论上MouseOver只应该报一次。
@jsvr 找到个方法帮你解决问题,就是如果发现是同样的事件,就不要重绘地图:
export class MapInformationComponent implements OnInit, AfterViewInit {
lastEvent: any = {};
// ....
private onChartEvent(event: any, type: string) {
console.log('chart event:', type, event);
// add these codes:
if (this.lastEvent.name === event.name && this.lastEvent.type === type) {
return;
} else {
this.lastEvent.name = event.name;
this.lastEvent.type = type;
}
// ...
我换了个思路这个问题解决了,使用dispatchAction的highlight属性配置,给dataindex传一个地图的数组 @xieziyu
@jsvr 太好了,你的解决方案更好!最大程度避免了重绘
@xieziyu 真的太谢谢你了, 首次使用angular些项目,用ngx-echart,没想到还能作者沟通交流,真的很感谢,我最近都在做关于地图绘制数据方面的工作,希望有机会一块交流.我的微信 15891785237希望可以认识你
@xieziyu ,嗯嗯对的,他的原生一些属性方法就是为了避免你从新绘制地图,应该往那方靠拢
鼠标放在地图上时,判断鼠标放入的国家后,然后setOption配置地图,鼠标离开当前的国家时,chartMouseOut事件无法执行.急求,在线等, 急急急急急急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @xieziyu