百度地图自定义覆盖物点击事件在移动界面后点击事件会消失的问题

百度地图自定义覆盖物点击事件在移动界面后点击事件会消失的问题

最近用到了百度地图,使用了自定义覆盖物后,出现了问题,就是界面首次加载时,点击事件可以用,但是移动地图后就失效了,在看了官方的类参考之后,发现了原因
在这里插入图片描述
只要实现了这个方法,在方法里面重新添加事件就可以了

//自定义覆盖物
	ComplexCustomOverlay.prototype.initialize = function(map) {
		this._map = map; // 保存map对象实例  
		//创建一个父盒子
		var div = this._div = document.createElement("div"); //创建一个盒子节点
		div.style.position = "absolute";
		div.style.boxSizing = "content-box" //内外边距不向内塌陷
		div.style.zIndex = BMap.Overlay.getZIndex(this._point.lat);
		div.style.backgroundColor = "#fff";
		div.style.border = "1px solid #000";
		div.style.color = "white";
		div.style.height = "45px";
		div.style.whiteSpace = "nowrap";
		div.style.MozUserSelect = "none";
		div.style.fontSize = "12px"

		//头部信息条
		var boxHead = this._boxHead = document.createElement("div");
		boxHead.style.position = "absolute";
		boxHead.style.boxSizing = "content-box" //内外边距不向内塌陷
		boxHead.style.backgroundColor = "#2877AF";
		boxHead.style.height = "20px";
		boxHead.style.padding = "2px"
		boxHead.style.top = "-27px";
		boxHead.style.lineHeight = "20px"; //以实现文字居中
		boxHead.style.marginLeft = "50%";
		boxHead.style.transform = "translateX(-50%)";
		boxHead.style.borderRadius = "3px"; //圆角边框
		div.appendChild(boxHead);

		//头部信息条内容
		var span = this._span = document.createElement("span"); //创建一个文本节点
		boxHead.appendChild(span);
		span.appendChild(document.createTextNode(this._text)); //创建一个文本节点

		var that = this;

		//插入图片
		var img = this._img = document.createElement("img");
		img.src = "img/1.png";
		img.style.height = "40px";
		div.appendChild(img);

		//红色倒三角图标
		var arrow = this._arrow = document.createElement("div");
		arrow.style.background = "url(img/label.png) no-repeat";
		arrow.style.position = "absolute";
		arrow.style.width = "11px";
		arrow.style.height = "10px";
		arrow.style.top = "45px";
		arrow.style.left = "10px";
		div.appendChild(arrow);

		map.getPanes().labelPane.appendChild(div); // 将div添加到覆盖物容器中

		this._div = div; // 保存div实例
		return div;
	}


//给覆盖物定位
	ComplexCustomOverlay.prototype.draw = function() {
		var map = this._map;
		var pixel = map.pointToOverlayPixel(this._point); //根据地理坐标获取对应的覆盖物容器的坐标,此方法用于自定义覆盖物
		this._div.style.left = pixel.x - parseInt(this._arrow.style.left) + "px";
		this._div.style.top = pixel.y - 57 + "px";

		//每当视图移动时,点位将会刷新,所以需要重新添加事件
		myCompOverlay1.addEventListener('click', function() {
			map.openInfoWindow(infoWindow, point); // 开启信息窗口
		});
	}

//创建点标记
	var txt1 = "1111";
	var myCompOverlay1 = new ComplexCustomOverlay(new BMap.Point(117.714328, 50.112275), txt1);
	//添加点标记
	map.addOverlay(myCompOverlay1);

//点击事件
	ComplexCustomOverlay.prototype.addEventListener = function(event, fun) {
		this._div['on' + event] = fun;
	}

var sContent =
		`	
				<h4 style='margin:0 0 5px 0;'>
					巴拉巴拉巴拉
				</h4>
				<img style='float:right; width: 150px; height: 150px;' id='imgDemo' src='img/1.png' width='139' height='104'/>
			
				<p style='margin:0;line-height:1.5;font-size:13px;text-indent:2em'>
					巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉
				</p>
		`;
	var infoWindow = new BMap.InfoWindow(sContent);

// 添加点标记点击事件
	myCompOverlay1.addEventListener('click', function() {
		map.openInfoWindow(infoWindow, point); // 开启信息窗口
	});
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现百度地图自定义覆盖物移动,可以通过以下步骤: 1. 创建自定义覆盖物对象,并在地图上添加。 2. 通过定时器或其他方式,更新自定义覆盖物的位置坐标。 3. 调用自定义覆盖物对象的setPosition()方法,设置新的位置坐标。 4. 调用地图对象的panTo()方法,将地图中心移动到新的位置坐标。 以下是示例代码: ``` // 自定义覆盖物类 function CustomOverlay(point){ this._point = point; } CustomOverlay.prototype = new BMap.Overlay(); CustomOverlay.prototype.initialize = function(map){ // 创建DOM元素,并添加到地图容器中 var div = document.createElement("div"); div.style.position = "absolute"; div.style.width = "20px"; div.style.height = "20px"; div.style.backgroundColor = "red"; map.getPanes().labelPane.appendChild(div); this._div = div; return div; } CustomOverlay.prototype.draw = function(){ // 根据坐标计算DOM元素的位置,并设置 var pixel = map.pointToOverlayPixel(this._point); this._div.style.left = pixel.x + "px"; this._div.style.top = pixel.y + "px"; } CustomOverlay.prototype.setPosition = function(point){ this._point = point; this.draw(); } // 创建自定义覆盖物对象,并添加到地图上 var customOverlay = new CustomOverlay(new BMap.Point(116.404, 39.915)); map.addOverlay(customOverlay); // 定时器更新自定义覆盖物位置,并移动地图中心 setInterval(function(){ var point = customOverlay._point; point.lng += 0.001; customOverlay.setPosition(point); map.panTo(point); }, 1000); ``` 上述示例代码中,自定义覆盖物类CustomOverlay继承自BMap.Overlay,实现了initialize()和draw()方法用于创建和更新DOM元素的位置。setPosition()方法用于设置新的位置坐标。在定时器中,更新自定义覆盖物的位置坐标,并调用setPosition()方法和地图对象的panTo()方法移动地图中心
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值