自定义DOM覆盖物(DOMOverlay)
自定义DOM(DOMOverlay)覆盖物,使您可以创建HTML DOM对象做为覆盖物叠加到地图中,实现您所期望的各类需求,如制作您独特风格的信息窗口,叠加表格、img和svg图片、动画、文字、甚至视频以及浏览器可支持的HTML代码。
示例,将饼图覆盖到地图中:
自定义DOM覆盖物-SVG图层 示例,通过domoverlay添加svg图层: 在地图之上通过创建一个覆盖地图的svg元素,在其上创建多个svg子节点(如circle,text等),提高可创建元素数量,并通过给子元素添加交互事件,快速实现元素交互功能。
自定义 DOM 覆盖物-gif 图层 示例,通过 domoverlay 添加 gif 图层: 在地图之上通过创建一个覆盖地图的 gif 元素
详细使用说明:
为了您能够快速上手,以下代码为您演示了一个最简单的DOMOverlay的定义与使用的方法,供您参考:
(代码执行后显示地图,并创建自定义infoWindow,初始文字“Hello world!”,两秒钟后变为:“你好再见~” )
//自定义DOM覆盖物 - 继承DOMOverlay
function myInfoWindow(options) {
var mydom;
TMap.DOMOverlay.call(this, options);
}
myInfoWindow.prototype = new TMap.DOMOverlay();
// 初始化
myInfoWindow.prototype.onInit = function(options) {
this.position = options.position;
this.content = options.content;
};
// 创建DOM元素,返回一个DOMElement
myInfoWindow.prototype.createDOM = function() {
mydom=document.createElement("div");
//设置DOM样式
mydom.style.cssText = 'height:15px;max-width:120px;padding:5px;background:#fff;border:#ccc solid 1px;\
line-height:15px;font-size:12px;position:absolute;top:0px;left:0px;';
mydom.innerHTML=this.content;
return mydom;
};
// 更新DOM元素,在地图移动/缩放后执行
myInfoWindow.prototype.updateDOM = function() {
if (!this.map) {
return;
}
// 经纬度坐标转容器像素坐标
let pixel = this.map.projectToContainer(this.position);
//默认使用DOM左上角作为坐标焦点进行绘制(左上对齐)
//如想以DOM中心点(横向&垂直居中)或其它位置为焦点,可结合this.dom.clientWidth和this.dom.clientHeight自行计算
let left = pixel.getX() - this.dom.clientWidth / 2 + 'px'; //本例水平居中
let top = pixel.getY() + 'px';
//将平面坐标转为三维空间坐标
this.dom.style.transform = `translate3d(${left}, ${top}, 0px)`;
};
//自定义一个更新内容的方法
myInfoWindow.prototype.updateContent = function(content) {
mydom.innerHTML=content;
};
var mapOne;//定义地图对象
function initMap() {
// 初始化地图
mapOne = new TMap.Map("container", {
zoom:12, // 设置地图缩放级别
center: new TMap.LatLng(39.984104, 116.307503) // 设置地图中心点坐标
});
//创建一个自定义的infoWindow
var myIW = new myInfoWindow({
map:mapOne,
position: new TMap.LatLng(39.96030543872138, 116.25809083213608),
content:"Hello world!"
})
//两秒钟后更新文字内容
setTimeout(function(){myIW.updateContent("你好再见~")},2000);
}
这篇文章对您解决问题是否有帮助?
已解决
未解决