百度地图,自定义覆盖物为什么清除不了?

2017-10-13 09:58:33 +08:00
 yantianqi
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style type="text/css">  
    html {
      height:100%
    }  
    body {
      height:100%;
      margin:0px;
      padding:0px
    }  
    #main {
      height:100%
    }
    .circle-marker {
      position: absolute;
      width: 90px;
      height: 90px;
      background: #c00;
      border-radius: 50%;
      opacity: .7
    }
  </style>  
  <script src="http://api.map.baidu.com/api?v=2.0&ak=Ls1zIpQI8SB8bi46cSGieAYLHYeyHzfW"></script>
</head>
<body>
  <div id="main"></div>
  <script>
      var map = new BMap.Map("main", {enableMapClick: false});          // 创建地图实例
      var point = new BMap.Point(116.400551, 39.893524);  // 创建点坐标
      map.centerAndZoom(point, 12);                 // 初始化地图,设置中心点坐标和地图级别

      map.enableScrollWheelZoom()
      map.addControl(new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT}))
      // 圆形覆盖物
      function customOverlay(point) {
        this.point = point
      }
      customOverlay.prototype = new BMap.Overlay()
      // 初始化,设置覆盖物形状
      customOverlay.prototype.initialize = function() {
        var div = this.div = document.createElement('div')
        div.className = 'circle-marker'
        map.getPanes().labelPane.appendChild(div)
      }
      // 覆盖物的位置
      customOverlay.prototype.draw = function () {
        var p = map.pointToOverlayPixel(this.point)
        this.div.style.left = p.x - 45 + 'px'
        this.div.style.top = p.y - 45 + 'px'
      }

      var marker = new BMap.Marker(point) // 这个可以清除
      map.addOverlay(marker)
      var marker2 = new customOverlay(point) // 这个清除不了?
      map.addOverlay(marker2)

      map.addEventListener('click', function(e) {
        map.clearOverlays()
      })
  </script>
</body>
</html>
4621 次点击
所在节点    程序员
8 条回复
opengps
2017-10-13 10:04:36 +08:00
两个点干嘛要重叠在一起?
yantianqi
2017-10-13 10:08:14 +08:00
@opengps 没有重新写一个 point,请问,为什么自定义的删除不了?哪里写错了?
ie88
2017-10-13 10:31:09 +08:00
customOverlay'用 removeOverlay()可以清除
yantianqi
2017-10-13 10:31:45 +08:00
@ie88 不可以用 clearOverlays()清除吗?
ie88
2017-10-13 10:32:55 +08:00
另外,初始化 marker 时,增加 enableMassClear(),该方法 允许覆盖物在 map.clearOverlays 方法中被清除
cnbdas
2017-10-13 10:35:12 +08:00
@yantianqi customOverlay.prototype.initialize = function() {
var div = this.div = document.createElement('div')
div.className = 'circle-marker'
map.getPanes().labelPane.appendChild(div)
return div
}
少了 return
yantianqi
2017-10-13 11:14:36 +08:00
@cnbdas 谢谢大神,正解
ioth
2017-10-13 12:05:53 +08:00
web 地图 js,要细心,没办法跟踪的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/397265

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX