收藏
回答

在有polyline的Map上单击polyline,无法执行在Map上绑定的tap事件

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 微信安卓客户端 8.0.40.2420 3.0.0(2023.7.26 17:40:41)

问题描述:在Map组件的polyline上单击,执行事件函数不能得到运行效果,而在空白区域点击,也是执行事件函数,可以得到运行效果,区别就是系统日志是否打印“调用事件函数”。而感观感受就是在Map的polyline上单击无法执行在Map上绑定的tap事件

代码具体如下:

在polyline上点击:

日志如下(表明代码执行了,输出了事件e的内容):

点击空白区域:

marker闪跳到了点击的位置(本应是动画平移,这里似乎有问题),日志输入了事件e的内容,前后输出了两次,并且系统日志提示调用了onTapMap,之前在polyline上点击没有系统提示调用onTapMap


回答关注问题邀请回答
收藏

1 个回答

  • 余晓辉
    余晓辉
    2023-07-27

    问题处理结果:

    在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 },仅执行一次。

    2023-07-27
    有用
    回复
登录 后发表内容