问题描述:在Map组件的polyline上单击,执行事件函数不能得到运行效果,而在空白区域点击,也是执行事件函数,可以得到运行效果,区别就是系统日志是否打印“调用事件函数”。而感观感受就是在Map的polyline上单击无法执行在Map上绑定的tap事件
代码具体如下:
在polyline上点击:
日志如下(表明代码执行了,输出了事件e的内容):
点击空白区域:
marker闪跳到了点击的位置(本应是动画平移,这里似乎有问题),日志输入了事件e的内容,前后输出了两次,并且系统日志提示调用了onTapMap,之前在polyline上点击没有系统提示调用onTapMap
问题处理结果:
在skyline模式下,bind到map上的tap事件会执行两次,一次的e.detail返回屏幕坐标detail = { x, y },一次返回经纬度detail = { latitude, alititude },但在polyline上单击时,只会执行一次,且返回屏幕坐标detail = { x, y },如果按文档中写代码,有些系统接口对异常值作了处理,不会有问题,比如iOS 客户端的translateMarker滤掉了非法值,Android 没有,且不会报错信息,表面来看就是Android的手机在polyline上单击不执行某些api,其实是执行了,api内容认为是非法值,给忽略了,也没有提示,此处建议开发团队考虑针对异常值给出警告信息,方便小程序开发人员排除问题。
针对此种情况,解决文案是:
一、直接过滤detail = { x, y }的事件处理,仅针对detail = { latitude, alititude }的情况进行业务逻辑处理;
二、如果获取到detail = { x, y }用fromScreenLocation转换成经纬度再调用detail = { latitude, alititude }的逻辑进行处理;
三、针对两次事件执行,增加时间间隔判断标志,设定一个时间间隔阈值,使不管是detail = { x, y }还是detail = { latitude, alititude },仅执行一次。