1.在vue中使用腾讯地图并添加水波纹覆盖物
2.首先需要创建覆盖物
// 自定义水波纹覆盖物
export default class 水波纹覆盖物 extends TMap.DOMOverlay {
constructor(options) {
super(options);
}
// 初始化:获取配置参数
onInit({ position, 引用的图标, id, } = {}) {
Object.assign(this, { position, 引用的图标, id, });
}
// 创建DOM元素,返回一个Element,使用this.dom可以获取到这个元素
createDOM() {
this.onMouseEnter = function (e) {
this.emit('mouseenter', e.target.firstChild);
}.bind(this);
this.onMouseLeave = function (e) {
this.emit('mouseleave', e.target.firstChild);
}.bind(this);
this.onClick = function (e) {
this.emit('click', e.target.firstChild);
}.bind(this);
let mydom = document.createElement('div')
mydom.setAttribute("id", "grad2")
mydom.innerHTML = '<div class="biggest"><div class="middle"><img src="' + this.引用的图标+ '"/></div></div>';
mydom.style.cssText = ['position: absolute;', 'top: 0px;', 'left: 0px;'].join('');
mydom.addEventListener('click', this.onClick);
mydom.addEventListener('mouseenter', this.onMouseEnter);
mydom.addEventListener('mouseleave', this.onMouseLeave);
return mydom;
}
// 更新DOM元素,在地图移动/缩放后执行
updateDOM() {
if (!this.map) {
return;
}
// 经纬度坐标转容器像素坐标
let pixel = this.map.projectToContainer(this.position);
// 使饼图中心点对齐经纬度坐标点
let left = pixel.getX() - this.dom.clientWidth / 2 + 'px';
let top = pixel.getY() - this.dom.clientHeight / 2 + 'px';
this.dom.style.transform = `translate(${left}, ${top})`;
}
// 销毁时
onDestroy() {
if (this.onClick) {
this.dom.removeEventListener(this.onClick);
}
if (this.onMouseLeave) {
this.dom.removeEventListener(this.onMouseLeave);
}
if (this.onMouseEnter) {
this.dom.removeEventListener(this.onMouseEnter);
}
}
}
覆盖物要继承腾讯的类, 初始化的时候把我们用到的参数全部传进来
然后创建dom,创建dom的时候需要把鼠标事件创建出来,然后监听鼠标事件,实现对mark操作时候的响应,还需要把更新方法实现出来,通过transform实现坐标定位,销毁时,要把鼠标事件也销毁掉
3, 实现了自定义mark标记,我们引用的时候
要创建一个mark的集合来存储所有的自定义覆盖物,
MarkList: []
var param = new 水波纹覆盖物({
//点标注数据数组WaterRipple
map: map,
position: new TMap.LatLng(lat, lng),
引用的图标: 引用的图标,
id: id,
})
this.MarkList.push(param);
}
这样就可以吧自定义标记打到地图中去
但是我们还需要删除标记
if (this.MarkList) {
this.MarkList.forEach(mark => {
mark.setMap(null);
})
}
或者我们也可以根据我们自定义的id作为一个判断条件根据id删除
同时我们可以给自定义标记增加信息框,同时给标记增加各种鼠标事件
mark.on('click', () => {
});
var map = document.getElementById("china-map");
mark.on('mouseenter', () => {
map.style.cursor = "pointer";
});
mark.on('mouseleave', () => {
map.style.cursor = this.cursor;
});
给自定义标记添加信息框和默认的标记差不多创建一个信息框,并将信息通过mark传过去
到此结束