Mapv 偏移后的图标导致点击错位的解决方法

3 篇文章 1 订阅
  1. 默认情况(大圆用作小圆的参照)


    图标在没有偏移的情况下点击范围是上图所圈部分,但是这个却不是我要的效果,我的坐标应该指针所指位置,但现在在这个图标的中点
  2. 使用偏移后
    options = {
      offset: { // 偏移值
            x: 0,
            y: -10
        }
    }


    这时,图标的指针指向是正确的坐标了,但是点击事件的响应范围却没有和图标一样偏移的同一位置

  3. 解决方法
    通过观察可以发现,mapv 库画图标时使用了位置偏移,但点击范围的判断却没有带上偏移值
    打开 mapv.js 文件(如果使用的是在线库,必须要下载下来本地使用),搜索“var pathSimple”,找到“draw”方法:
    更改前
        case 'Point':
            var size = data._size || data.size || options._size || options.size || 5;
            if (symbol === 'circle') {
                if (options.bigData === 'Point') {
                    context.moveTo(coordinates[0], coordinates[1]);
                }
                context.arc(coordinates[0], coordinates[1], size, 0, Math.PI * 2);
            } else if (symbol === 'rect') {
                context.rect(coordinates[0] - size / 2, coordinates[1] - size / 2, size, size);
            } else if (symbol === 'honeycomb') {
                draw(context, coordinates[0], coordinates[1], size);
            }
            break;
    
    更改后
        case 'Point':
            var size = data._size || data.size || options._size || options.size || 5;
            if (symbol === 'circle') {
                if (options.bigData === 'Point') {
                    context.moveTo(coordinates[0], coordinates[1]);
                }
                var offset={x:0,y:0};
                if(options.draw==='icon') offset=options.offset;
                if(!offset) offset={x:0,y:0};
                context.arc(coordinates[0]+offset.x, coordinates[1]+offset.y, size, 0, Math.PI * 2);
            } else if (symbol === 'rect') {
                context.rect(coordinates[0] - size / 2, coordinates[1] - size / 2, size, size);
            } else if (symbol === 'honeycomb') {
                draw(context, coordinates[0], coordinates[1], size);
            }
            break;
    
    这里的范围类型默认是 “circle”,其他类型自行更改。这里判断是否为“icon”的画图类型才使用偏移,如果你使用其他类型就自行判断,或者不要判断直接使用,全部的使用偏移
  4. 最终效果
    ​​​​最终效果
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值