前言

最近又用到了百度地图api,之前用到的是百度地图js api的写法,需要一个个定义对象,添加事件或者监控,最后画到地图上,时不时还有渲染时序不对的情况,非常的不友好。所以这次用了vue Baidu Map,基于百度地图 JS API 开发的开源库的封装,减少了代码量,虽然文档部分封装和说明文档不是友好,但交互性相比之前的好多了。
用到了的覆盖物较多,信息窗体infowindow——直角边框加白底黑字,那么的 普通 ,肯定要修改一下,可是封装好的vue组件也不支持直接给style换底色和圆角,参阅其他文章的学习与不断调试后,最终效果如下所示,算是达到预期,大概也归结了两种方法。

在原来基础上修改CSS样式

总的来说就是修改这个窗体的风格样式,新样式加 !important 覆盖掉旧样式。
想法不错,但这个窗体写的属实有点复杂了,通过审查解析窗体结构,发现官方的信息窗口内部是由9个div组成的!分别是左上小正方体(1),上顶部(2),右上小正方体(3),中间主体内容部分(4),左下小正方体(5),下底部(6),右下小正方体(7),回到主体部分的一个div(8),最下面指向点的箭头(9)。而且官方没有给它们绑定任何的类名或id。所以我们找到它们的父级标签使用序选择器,直接修改。
还有一点不得不提,我本以为最下方的箭头是用css画成的箭头,结果居然是张图片,没办法,只能把原图下方原有的箭头替换一下颜色,然后代替一下原图片。

主要的css风格代码如下:

<style>/*地图标题 infoWindow*/
.BMap_bubble_title{color:#fff;font-size:18px;/*font-weight: bold;*/text-align:left;background:transparent !important;
}.BMap_pop .BMap_top{background:#3F4358 !important;border:0 !important;
}
.BMap_pop .BMap_center{width:251px !important;border:0 !important;background:#3F4358 !important;
}
.BMap_pop .BMap_bottom{border:0 !important;background:#3F4358 !important;
}.BMap_pop div:nth-child(3){background:transparent !important;
}
.BMap_pop div:nth-child(3) div{border-radius:7px;background:#3F4358 !important;border:0 !important;
}
.BMap_pop div:nth-child(1){border-radius:7px 0 0 0;background:transparent !important;border:0 !important;
}
.BMap_pop div:nth-child(1) div{background:#3F4358 !important;
}
.BMap_pop div:nth-child(5){border-radius:0 0 0 7px;background:transparent !important;border:0 !important;
}
.BMap_pop div:nth-child(5) div{border-radius:7px;background:#3F4358 !important;
}
.BMap_pop div:nth-child(7){background:transparent !important;
}
.BMap_pop div:nth-child(7) div{border-radius:7px;background:#3F4358 !important;
}.BMap_pop div:nth-child(8) div{/*border-radius:7px;*/background:#3F4358 !important;
}
/*窗体阴影*/
.BMap_shadow div:nth-child(5) img{margin-left: -1100px !important;
}.BMap_shadow div:nth-child(4){width: 262px !important;
}/*下面箭头替换为自己本地修改过的*/
img[src="http://api0.map.bdimg.com/images/iw3.png"] {content: url('../img/Screen/arrow.png');
}
img[src="https://api.map.baidu.com/images/iw3.png"] {margin-top: -692px !important;filter: alpha(opacity=70);content: url('../img/Screen/arrow.png');
}
</style>

在窗体内容部分写的就比较随意了,调到了一个合适的宽度(阴影也不会出现重叠或者缺色)后,避免里面内容太长而导致窗体变形,在bm-info-window下所有的div都规定了一个宽度。

 <bm-info-window  title="工单详情" :position="{lng: point.lng, lat: point.lat}"  :show="point.showFlag" @close="infoWindowClose(point)" @open="infoWindowOpen(point)"><div style="color:#fff;font-size:16px;"><div style="margin-top:5px;height: 2px; width:100%;background-color: #1981E1 !important;"></div><div style="margin-top:10px;width:220px">  异常区域:{{ point.regionName }}</div><div style="margin-top:5px;width:220px">  详细地址:{{ point.location }}</div><div style="margin-top:5px;width:220px">  严重程度:{{ point.severity }}</div><div style="margin-top:5px;width:220px">  上报人:{{ point.reporterName }}</div><div style="margin-top:5px;width:220px">  联系方式:{{ point.reporterPhone }}</div><div style="margin-top:5px;width:220px">  指派人:{{ point.orderPeopleStr }}</div><div style="margin-top:5px;width:220px">  故障开始时间:{{ point.repairStartTime }}</div><div style="margin-top:5px;width:220px">  详细信息:{{ point.information }}</div></div></bm-info-window>

重写自定义覆盖物

如果觉得改原有的样式太过繁琐的话,重写一个新的自定义覆盖物可能是个比较好的选择。我正好需要一个窗体展示简略信息,效果如下:

可以参考官方的教程https://dafrok.github.io/vue-baidu-map/#/zh/overlay/overlay,官方的推荐写法是二次封装成组件,这里我就不得不吐槽一下,封装的好一点不就可以不用二次封装了吗。首先是这个属性和事件都这么点,好歹能传个坐标啊;其次是覆盖物position 属性必须得用 “position: absolute;” ,不然会在最左上角放置覆盖物/汗

剩下的就比较简单了,在bm-overlay下加各种div,然后定义成自己想要的风格即可。

总结

确实,开源组件啥的自由度还是差些,想要达到自己的要求,还是得慢慢磨,好好看官方文档,不知道会被莫名其妙的bug卡住。
春节后的第一篇完成liao

百度地图API——修改infowindow样式相关推荐

  1. 百度地图API : 修改marker图标(icon)

    var map = new BMap.Map("map"); // 创建地图实例 var point = new BMap.Point(116.404, 39.915); // 创 ...

  2. 百度地图api自定义修改地图背景样式

    引入百度地图api就不用多说了吧! https://developer.baidu.com/map/custom/ //这个网址可以去模拟修改百度地图样式 当修改到心仪的样式时,点击生成JSON,就会 ...

  3. 百度地图API显示多个标注点的代码 以及修改传参

    引用的页面原始数据 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  4. 【百度地图API】如何调整结果面板的样式?如何获取指定页码的结果?

    原文:[百度地图API]如何调整结果面板的样式?如何获取指定页码的结果? 摘要: 1.你是否想自定义查询后,结果面板的显示样式? 2.数据接口每次只返回10条结果,如何取到单独每一页的结果? ---- ...

  5. 百度地图api之固定标记点(标记点自己设置样式)

    一.首先引入所申请的ak密钥 <script type="text/javascript" src="http://api.map.baidu.com/api?ak ...

  6. 百度地图API开发指南

    百度地图API开发指南 本文为百度地图API官方版本的开发指南,供各位51CTO的网友进行参考. 简介什么是百度地图API? 百度地图API是一套由JavaScript语言编写的应用程序接口,它能够帮 ...

  7. baidumap api MySQL_百度地图API

    本文我将从如何使用地图API(本文以百度为例,谷歌类似)开始,往后的扩展行的内容详见后续文章. 1.打开链接http://developer.baidu.com/map/jshome.htm 这里有很 ...

  8. 引用百度地图API完成热力图

    近期肺炎疫情信息闹的火热,就该情况完成来沪人员分布热力图以及标注确诊患者足迹.就开发研究中遇到的问题以及解决方案做一下记录,如下所示: 一.效果示意图 简述完成效果:百度地图引入,增加热力图,添加比例 ...

  9. 百度地图API的基础使用

    文章目录 地图初始化 创建普通地图 创建GL地图 为GL地图设置3D视角 为地图添加比例尺/缩放控件 点标记 添加点标记 添加窗体 点标记添加点击事件 自定义窗体 行政区划图 简易的行政区划图层 指定 ...

最新文章

  1. 【Java】字符串(二)
  2. 【 数字信号处理 】定点数的表示之二进制数的原码与补码
  3. 掌握房贷技巧可让你少奋斗十年(收藏)
  4. Vista共享文件夹无法访问?
  5. MySQL小误区:关于set global sql_slave_skip_counter=N 命令的一些点
  6. 命令行查看网卡使用的驱动+跳板机命令行设置静态地址
  7. Nuxt中如何使用Vuex-Store异步获取数据
  8. 前端学习(2165):vuecli3创建项目和目录结构
  9. 【引用】jQuery 选择器
  10. 怎么用java实现打字功能_怎么用JAVA编写一个打字游戏
  11. 53 MM配置-评估和科目设置-定义评估控制
  12. android开发自定义选择器,创建自定义android选择器
  13. 2010年被逼出来的10个中国IT产品
  14. 脉冲激光器的重要参数
  15. linux参考文献_小白爱折腾·其二:手机Linux部署DiscuzX论坛
  16. hook代码 svn_Svn结合hook实现自动更新及多Project管理更新
  17. cad编辑节点快捷键是什么_cad删除快捷键(cad删除节点快捷键)
  18. centos 禁止自动锁屏
  19. 微信ios浏览器 与 iframe的不兼容问题
  20. 扇贝编程python广告演员_‎扇贝编程-人人能学会的python课 az App Store-ban

热门文章

  1. 教你用HTML做一个超链接按钮
  2. 如何查看主机的网卡MAC地址及含义
  3. JS 中国标准时间转换yy-mm-dd HH:mm:ss
  4. 全球多地爆发!传染性极强!鄂尔多斯人近期外出一定要注意…
  5. 电流、电压、电阻、电容、电感的通俗理解
  6. 28.找出字符串中第一个匹配项的下标
  7. elasticsearch的linux安装
  8. windows 10 电脑必备软件
  9. mysql 查询最多的_MySQL中用通用查询日志找出查询次数最多的语句的教程
  10. python修改散点图中点的颜色_更改matplotlib中散点图点的颜色