百度地图开发如何自定义控件(无敌的解决办法)

简介: 百度地图开发如何自定义控件(无敌的解决办法)

为什么写?

问题起因:开发一个利用MUI开发的移动端的APP,APP中使用了百度地图。在使用了百度地图开发过程中,我想实现自定义控件,如下图所示:百度地图APP中的竖着的,靠右边或者下边的控件一样。

折腾了几天的空余时间,终于搞出来了,最终结果对比图:

百度地图APP的:

我实现的:

丑是丑了点(毕竟没专业学过前端),但是总归是实现了(自夸一下,我还是很厉害的,hhhh)

可愁死个人,翻遍了百度都找不到一篇比较适合新手的文章。真是很符合一句话:自己动手,丰衣足食。那就自己来吧!

喜欢百度的原因是因为DOME文档给的挺好,复制下来,然后阅读下代码基本上就可以拿到项目中来了。

地址:http://lbsyun.baidu.com/jsdemo.htm#b0_6

找到如上图所示的地图控件示例

大家可以自己试试:我个人觉得这种方法做简单的还可以,如果是复杂点的程序,就不太好了。建议自己把这个小dome跑一下,学任何语言毕竟都是从hello开始的嘛!

如果不想去百度官网复制下来,就用下面的吧:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  <style type="text/css">
    body, html {width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
    #allmap{width:100%;height:500px;}
    p{margin-left:5px; font-size:14px;}
  </style>
  <script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>
  <title>添加自定义控件</title>
</head>
<body>
  <div id="allmap"></div>
  <p>在地图左上角添加"放大2级"自定义控件,双击放大地图2级</p>
</body>
</html>
<script type="text/javascript">
  // 百度地图API功能
  var map = new BMap.Map("allmap");
  map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
  // 定义一个控件类,即function
  function ZoomControl(){
    // 默认停靠位置和偏移量
    this.defaultAnchor = BMAP_ANCHOR_TOP_LEFT;
    this.defaultOffset = new BMap.Size(10, 10);
  }
  // 通过JavaScript的prototype属性继承于BMap.Control
  ZoomControl.prototype = new BMap.Control();
  // 自定义控件必须实现自己的initialize方法,并且将控件的DOM元素返回
  // 在本方法中创建个div元素作为控件的容器,并将其添加到地图容器中
  ZoomControl.prototype.initialize = function(map){
    // 创建一个DOM元素
    var div = document.createElement("div");
    // 添加文字说明
    div.appendChild(document.createTextNode("放大2级"));
    // 设置样式
    div.style.cursor = "pointer";
    div.style.border = "1px solid gray";
    div.style.backgroundColor = "white";
    // 绑定事件,点击一次放大两级
    div.onclick = function(e){
    map.setZoom(map.getZoom() + 2);
    }
    // 添加DOM元素到地图中
    map.getContainer().appendChild(div);
    // 将DOM元素返回
    return div;
  }
  // 创建控件
  var myZoomCtrl = new ZoomControl();
  // 添加到地图当中
  map.addControl(myZoomCtrl);
</script>

还可以添加比例尺

可以添加图层切换

代码请到官网自取

但是都不能满足我这颗幼小的心灵

费劲心思的筹划了这一切,但是似乎想到了一个更好的办法,如下:

  • 那就是我可以直接创建一个div呀,让div直接浮在百度地图的map上,不就好了吗?

二话不说就干了

代码如下:

<!-- 悬浮的div工具栏 -->
    <div id="up-map-div" style="color: #000000;">
      <div class="mui-input-row" style="text-align: center;" >
        <a href="javascript:void(0)" class="mui-tab-item " >
          <span class="iconfont icon-tuceng"></span>
          <br />
          <span class="caidanYanse">图层</span>
        </a>
      </div>
      <hr style="height:1px;border:none;border-top:1px solid #555555;" />
      <div class="mui-input-row" style="text-align: center;">
        <a href="javascript:void(0)" class="mui-tab-item " id="jingdian">
          <span class="iconfont icon-jingdian" class="caidanYanse"></span>
          <br />
          <span class="caidanYanse">景点</span>
        </a>
      </div>
      <hr style="height:1px;border:none;border-top:1px solid #555555;" />
      <div class="mui-input-row" style="text-align: center;">
        <a href="javascript:void(0)" class="mui-tab-item " id="baoxiu">
          <span class="iconfont icon-wj-bxd" class="caidanYanse"></span>
          <br/>
          <span class="caidanYanse">报修</span>
        </a>
      </div>
      <hr style="height:1px;border:none;border-top:1px solid #555555;" />
      <div class="mui-input-row" style="text-align: center;">
        <a href="javascript:void(0)" class="mui-tab-item " id="biaobai">
          <span class="iconfont icon-biaobaiqiang" class="caidanYanse"span>
          <br/>
          <span class="caidanYanse">表白</span>
        </a>
      </div>
      <hr style="height:1px;border:none;border-top:1px solid #555555;" />
      <div class="mui-input-row" style="text-align: center;">
        <a href="javascript:void(0)" class="mui-tab-item " id="gengduo">
          <span class="iconfont icon-gengduo" class="caidanYanse"></span>
          <br/>
          <span class="caidanYanse">更多</span>
        </a>
      </div>
    </div>

由于上面的代码很多,复杂,凌乱,不好演示。就创建一个简单的div,为了好演示

<div id="map" style="margin-top: 47.8px;"></div>
<!-- 测试的悬浮div工具栏 -->
<div id="test_map_div"> 
  我是悬浮的测试的div工具栏
</div>

项目跑起来的结果:并没有我刚才添加的div

这个时候就要看个人的基本功了

操作步骤如下图

发现自己创建的div被百度地图的map的div给顶到下面了,看不到了。

不要紧,这个时候要看css了

position: absolute;
top: 50%;

感觉怎么样,是不是很爽呀。简简单单的css

更爽的来了

#test_map_div{
  top: 50%;
  left: 85%;
  width: 40px;
  height: 300px;
  position: absolute;
  z-index: 9999;
  border: 1px solid black;
  border-radius: 9px;
  background-color: #FFFFFF;
}

如果有问题可以给我留言,看到会第一时间回复的,或者我邮箱:8042965@qq.com

目录
相关文章
|
1天前
|
JavaScript 定位技术
vue 百度地图开发【教程】3. 自定义百度地图主题
vue 百度地图开发【教程】3. 自定义百度地图主题
5 0
|
1天前
|
JavaScript 定位技术
vue 百度地图开发【教程】1. 绘制百度地图(不使用 vue-baidu-map,解决 BMap is undefined)
vue 百度地图开发【教程】1. 绘制百度地图(不使用 vue-baidu-map,解决 BMap is undefined)
5 0
|
1天前
|
JavaScript 定位技术
vue-baidu-map 绘制行政区划的轮廓,添加行政区划名称(含给覆盖物添加点击事件)——vue 百度地图开发
vue-baidu-map 绘制行政区划的轮廓,添加行政区划名称(含给覆盖物添加点击事件)——vue 百度地图开发
6 1
|
2月前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
|
2月前
|
开发工具 git 开发者
百度搜索:蓝易云【Git实际开发的流程】
以上是Git在实际开发中的一般流程。Git的分布式版本控制系统使得团队开发更加高效和灵活,并能有效管理项目的版本历史。
39 1
|
2月前
|
应用服务中间件 网络安全 nginx
百度搜索:蓝易云【nginx502 Bad Gateway错误解决办法】
请注意,解决502错误可能涉及到具体的网络架构和配置,因此以上办法仅供参考。如果问题仍然存在,建议根据具体情况深入分析并检查相关配置和服务器状态。同时,保持Nginx和上游服务器的版本为最新也是一个良好的实践,以获取更好的稳定性和性能。
74 2
|
2月前
|
存储 前端开发 Java
基于Springboot实现仿百度网盘开发
基于Springboot实现仿百度网盘开发
|
2月前
|
存储
百度搜索:蓝易云【clickhouse重启,以及修改数据存储目录后重启失败的解决办法】
这些解决方法应该能够帮助您重新启动ClickHouse服务或解决修改数据存储目录后重启失败的问题。如果问题仍然存在,请检查错误日志文件以获取更多详细信息,并在进一步尝试解决问题之前查找相应的错误消息。
69 0
|
2月前
|
Ubuntu 数据库 C++
百度搜索:蓝易云【【嵌入式Qt开发入门】在Ubuntu下编写C++教程。】
请注意,这只是一个入门教程,Qt开发涉及到更广泛的主题和概念,例如信号与槽机制、界面设计、数据库操作等。建议参考Qt官方文档和教程,以深入了解和掌握嵌入式Qt开发。
152 0
|
9月前
|
Ubuntu NoSQL C++
百度搜索:蓝易云【搭建ubuntu容器内C/C++开发调试环境】
以上是搭建 Ubuntu 容器内 C/C++ 开发调试环境的一般教程。你可以根据实际需求进行进一步的定制和配置。请注意,使用容器进行开发调试可以提供一种隔离的环境,但也需要注意容器的资源限制和安全性。建议参考 Docker 官方文档和其他可靠资源,以获取更详细和特定于你的需求的指导。
34 1