- 默认情况(大圆用作小圆的参照)
图标在没有偏移的情况下点击范围是上图所圈部分,但是这个却不是我要的效果,我的坐标应该指针所指位置,但现在在这个图标的中点 - 使用偏移后
options = { offset: { // 偏移值 x: 0, y: -10 } }
这时,图标的指针指向是正确的坐标了,但是点击事件的响应范围却没有和图标一样偏移的同一位置 - 解决方法
通过观察可以发现,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;
这里的范围类型默认是 “circle”,其他类型自行更改。这里判断是否为“icon”的画图类型才使用偏移,如果你使用其他类型就自行判断,或者不要判断直接使用,全部的使用偏移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;
- 最终效果
Mapv 偏移后的图标导致点击错位的解决方法
最新推荐文章于 2023-09-08 19:50:10 发布