使用1按钮切换显示/隐藏Google圈子

时间:2018-06-04 03:16:42

标签: javascript google-maps-api-3

我在Google地图中创建了围绕所述位置中心的圆圈。我想用一个按钮切换它来显示或隐藏我在互联网上查找的参考文献中找不到的圆/半径。

参考文献: https://developers.google.com/maps/documentation/javascript/shapes Hide Markers on Click with Google Maps API show/hide circle on google maps javascript api

代码:

<button class="button-red pure-button" onclick="toggleRadius()">

var map;

function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
      zoom: 12,
      center: {lat: 1.3420894594991328, lng: 103.83490918886719},
    });

    var ntuc = {lat: 1.32805676, lng: 103.9216584};

    var ntucCircle = new google.maps.Circle({
        strokeColor: '#FF0000',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.35,
        map: map,
        center: ntuc,
        radius: 5000, // in metres
        visible: false
      });

      ntucCircle.bindTo('center', marker, 'position');

  }

我尝试了三种方法来切换Google圈子但无济于事。

第一种方法:

  function toggleRadius() {
    ntucCircle.set('opacity', ntucCircle.get('opacity') ? null : 0.35);
  }

第二种方法:

  function toggleRadius() {
    ntucCircle.setMap(ntucCircle.getMap() ? null : map);
  }

第三种方法:

  function toggleRadius() {
    if (ntucCircle.getMap() != null) {
        ntucCircle.setMap(null);
    } else {
        ntucCircle.setMap(map);
    }
  }

我不确定出了什么问题。我感谢任何形式的帮助,希望能够回答我的问题 - 使用1个按钮切换Google圈。

2 个答案:

答案 0 :(得分:0)

使用您的代码:

function toggleRadius() {
  ntucCircle.setMap(ntucCircle.getMap() ? null : map);
}

我收到一个javascript错误:Uncaught TypeError: Cannot read property 'setMap' of undefined因为ntucCircleinitMap函数的本地,而不是全局上下文(需要HTML点击处理函数)。

proof of concept fiddle

代码段

// global variables
var map;
var ntucCircle;
var markers = [];

function toggleRadius() {
  ntucCircle.setMap(ntucCircle.getMap() ? null : map);
}

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 12,
    center: {
      lat: 1.3420894594991328,
      lng: 103.83490918886719
    },
  });

  var ntuc = {
    lat: 1.32805676,
    lng: 103.9216584
  };

  // initialize the global variable
  ntucCircle = new google.maps.Circle({
    strokeColor: '#FF0000',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: '#FF0000',
    fillOpacity: 0.35,
    map: map,
    center: ntuc,
    radius: 5000, // in metres
  });
}
google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<button class="button-red pure-button" onclick="toggleRadius()">toggle</button>
<div id="map"></div>

答案 1 :(得分:0)

我已经解决了我自己的问题,这是解决方案。

<button class="button-red pure-button" onclick="toggleRadius()">

var map;

function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
      zoom: 12,
      center: {lat: 1.3420894594991328, lng: 103.83490918886719},
});

var ntuc = {lat: 1.32805676, lng: 103.9216584};

var ntucCircle = new google.maps.Circle({
    strokeColor: '#FF0000',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: '#FF0000',
    fillOpacity: 0.35,
    map: map,
    center: ntuc,
    radius: 5000, // in metres
  });

  ntucCircle.setMap(null);


  function toggleRadius() {
    ntucCircle.setMap(ntucCircle.getMap() ? null : map);
  }