百度地图API“自定义”信息窗口样式
首先看一下起点样式和目标样式
默认
需求
说到样式,我在解决这个需求的时候一共想了三个方案(按产生时间排序):
利用API自定义的内容块覆盖
首先说这个方案很明显的一个缺点,无法实现透明。
控制台分析HTML,父级节点样式是position属性进行定位的,所以可以通过z-index属性进行覆盖。然后我把值写了“10000000”发现毫无效果。
本方案终结利用CSS的优先级覆盖
在控制台中寻找相关节点的类名,发现信息框由四个角落的块、中间三大块组成。还有一些没影响的img。但是,四个角落的div上好像没有class属性(Exm?)。
本方案终结寻找DOM节点规律,js驱动修改样式
此方案完美解决需求样式
通过自定义的内容定位,用js来获取四个角落的块、中间三大块的节点,并使用display隐藏掉。
剩下样式的书写什么的就不多说了,自己慢慢调试。如果还不懂直接分析一下下面的代码。
//为代码简洁,使用了JQueryAPI var sContent = "<div id="pos"></div>"; var map = new BMap.Map("allmap"); var point = new BMap.Point(116.404, 39.915); var marker = new BMap.Marker(point); var infoWindow = new BMap.InfoWindow(sContent); // 创建信息窗口对象 map.centerAndZoom(point, 15); map.addOverlay(marker); marker.addEventListener("click", function(){ var posP=$($($("#pos").parent('div')).parent('div')).siblings(); for(let i=0;i<7;i++){ posP[i].css({"display":none}); } posP[7].css({"top":"0","left":"0"}); //此地方修改关闭按钮位置,如需修改样式,做成图片修改src路径即可 //修改其它样式 ... this.openInfoWindow(infoWindow); }