2、创建地图容器<_百度地图自定义信息窗口">
当前位置:   article > 正文

百度地图自定义信息窗口样式

百度地图自定义信息窗口

在项目中,UI经常会把信息窗口做自定义设计,那么如何实现自定义样式的信息窗口呢。核心代码如下:

  1. /*
  2. * 创建信息窗口
  3. * */
  4. function _createMapvInfoWindow(width,height,info,item,point) {
  5. var infoBox = new BMapLib.InfoBox(map,info,{
  6. boxStyle:{
  7. offset: new BMap.Size(10,10), //偏移量
  8. opacity: "0.8", //透明度
  9. background: "rgba(15,43,105,1)", //背景颜色
  10. boxShadow:'0px 3px 20px 3px rgba(23,211,253,0.3) inset', //阴影
  11. border: '1px solid rgba(62,136,255,1)', //边框
  12. width: width+"px", //宽度
  13. height: height+"px", //高度
  14. borderRadius: '2px' //边框宽度
  15. },
  16. closeIconUrl:"/demo/static1/images/map/close.png", //关闭信息窗口icon
  17. closeIconMargin: "1px 1px 0 0", //关闭按钮的位置
  18. enableAutoPan: true,
  19. align: INFOBOX_AT_TOP //信息窗口的位置,INFOBOX_AT_TOP:顶部居中
  20. });
  21. infoBox['id'] = item.id
  22. infoBox.open(point);
  23. infoWindows.push(infoBox)
  24. }

要完成自定义样式的信息弹窗,需要引入百度API及 InfoBox_min.js。

完整代码: 

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>百度地图自定义信息窗口样式</title>
  6. <script type="text/javascript" src="//apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
  7. <script type="text/javascript" src="//api.map.baidu.com/api?v=3.0&ak=你的AK"></script>
  8. <!-- InfoBox_min.js 可以去百度地图开放者平台获取 -->
  9. <script src="static1/js/InfoBox_min.js"></script>
  10. <style>
  11. html,body{
  12. margin: 0;
  13. padding: 0;
  14. height: 100%;
  15. }
  16. .bigMap{
  17. width: 100%;
  18. height: 100%;
  19. }
  20. </style>
  21. </head>
  22. <body>
  23. <!--地图-->
  24. <div id="allmap" class="bigMap"></div>
  25. <script type="text/javascript">
  26. var map = null
  27. var zoom = 10
  28. var infoWindows = []
  29. map = new BMap.Map("allmap");
  30. map.centerAndZoom('石家庄')
  31. var iconUrl = 'static1/images/map/blueCircle.png' //icon图片地址
  32. var icon = new BMap.Icon(iconUrl,
  33. new BMap.Size(100, 100),
  34. {
  35. imageOffset:new BMap.Size(0,0), // 图片相对视窗的偏移
  36. imageSize: new BMap.Size(100,100) // 引用图片实际大小
  37. });
  38. var marker = new BMap.Marker(new BMap.Point(114.51808,38.041719), {
  39. icon: icon
  40. });
  41. marker.id = 1 //给marker配置id,便于后续控制弹窗
  42. map.addOverlay(marker)
  43. marker.addEventListener('mouseover', function (e) {//鼠标悬停显示信息
  44. //先判断是否已经存在窗口
  45. if (!_checkAndOpenInfoWindowByMapv(marker.id, e, true)) {
  46. return false
  47. }
  48. var info = '<div class="info"><h5 style="color:#fff566;font-size:16px">'+ '标题' +'</h5><p style="color:#fff">内容</p></div>'
  49. _createMapvInfoWindow( 170, 100, info, marker, e.point)
  50. });
  51. marker.addEventListener('mouseout', function(e){ //鼠标移出
  52. _checkAndCloseInfoWindowByMapv(marker.id, e)
  53. })
  54. /*
  55. * 判断信息窗口是否存在,如果已存在,直接打开,如果不存在返回false
  56. * */
  57. function _checkAndOpenInfoWindowByMapv(id,e,notCloseLast) {
  58. var index = null
  59. var isHasInfowindow = false
  60. for (var i = 0; i < infoWindows.length; i++) {
  61. if(infoWindows[i]["id"] === id) {
  62. index = i
  63. isHasInfowindow = true
  64. break
  65. }
  66. }
  67. if(isHasInfowindow && !infoWindows[index].isOpen){
  68. infoWindows[index].open(e.point)
  69. return false
  70. }else{
  71. return true
  72. }
  73. }
  74. /*
  75. * 创建信息窗口
  76. * */
  77. function _createMapvInfoWindow(width,height,info,item,point) {
  78. var infoBox = new BMapLib.InfoBox(map,info,{
  79. boxStyle:{
  80. offset: new BMap.Size(10,10), //偏移量
  81. opacity: "0.8", //透明度
  82. background: "rgba(15,43,105,1)", //背景颜色
  83. boxShadow:'0px 3px 20px 3px rgba(23,211,253,0.3) inset', //阴影
  84. border: '1px solid rgba(62,136,255,1)', //边框
  85. width: width+"px", //宽度
  86. height: height+"px", //高度
  87. borderRadius: '2px' //边框宽度
  88. },
  89. closeIconUrl:"/demo/static1/images/map/close.png", //关闭信息窗口icon
  90. closeIconMargin: "1px 1px 0 0", //关闭按钮的位置
  91. enableAutoPan: true,
  92. align: INFOBOX_AT_TOP //信息窗口的位置,INFOBOX_AT_TOP:顶部居中
  93. });
  94. infoBox['id'] = item.id
  95. infoBox.open(point);
  96. infoWindows.push(infoBox)
  97. }
  98. /*
  99. * 判断信息窗口是否存在,如果已存在,关闭信息窗口
  100. * */
  101. function _checkAndCloseInfoWindowByMapv(id) {
  102. var index = null
  103. var isHasInfowindow = false
  104. for (var i = 0; i < infoWindows.length; i++) {
  105. if(infoWindows[i]["id"] === id) {
  106. index = i
  107. isHasInfowindow = true
  108. break
  109. }
  110. }
  111. if(isHasInfowindow){
  112. infoWindows[index].close()
  113. return false
  114. }else{
  115. return true
  116. }
  117. }
  118. </script>
  119. </body>
  120. </html>

最终效果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/109656
推荐阅读
相关标签
  

闽ICP备14008679号