It's the 15th anniversary of Google Maps Platform - Check out the latest news and announcements

Adding State to Controls

This example demonstrates adding controls that store state. It shows a map with two buttons, "Set Center" and "Center Map". The "Set Center" button can be used to store the center of the map. Pressing the "Center Map" button will pan the map to the previously stored center.

Read the documentation.

JavaScript

var map;
var chicago = { lat: 41.85, lng: -87.65 };

/**
 * The CenterControl adds a control to the map that recenters the map on
 * Chicago.
 * @constructor
 * @param {!Element} controlDiv
 * @param {!google.maps.Map} map
 * @param {?google.maps.LatLng} center
 */
function CenterControl(controlDiv, map, center) {
  // We set up a variable for this since we're adding event listeners
  // later.
  var control = this;

  // Set the center property upon construction
  control.center_ = center;
  controlDiv.style.clear = "both";

  // Set CSS for the control border
  var goCenterUI = document.createElement("div");
  goCenterUI.id = "goCenterUI";
  goCenterUI.title = "Click to recenter the map";
  controlDiv.appendChild(goCenterUI);

  // Set CSS for the control interior
  var goCenterText = document.createElement("div");
  goCenterText.id = "goCenterText";
  goCenterText.innerHTML = "Center Map";
  goCenterUI.appendChild(goCenterText);

  // Set CSS for the setCenter control border
  var setCenterUI = document.createElement("div");
  setCenterUI.id = "setCenterUI";
  setCenterUI.title = "Click to change the center of the map";
  controlDiv.appendChild(setCenterUI);

  // Set CSS for the control interior
  var setCenterText = document.createElement("div");
  setCenterText.id = "setCenterText";
  setCenterText.innerHTML = "Set Center";
  setCenterUI.appendChild(setCenterText);

  // Set up the click event listener for 'Center Map': Set the center of
  // the map
  // to the current center of the control.
  goCenterUI.addEventListener("click", function() {
    var currentCenter = control.getCenter();
    map.setCenter(currentCenter);
  });

  // Set up the click event listener for 'Set Center': Set the center of
  // the control to the current center of the map.
  setCenterUI.addEventListener("click", function() {
    var newCenter = map.getCenter();
    control.setCenter(newCenter);
  });
}

/**
 * Define a property to hold the center state.
 * @private
 */
CenterControl.prototype.center_ = null;

/**
 * Gets the map center.
 * @return {?google.maps.LatLng}
 */
CenterControl.prototype.getCenter = function() {
  return this.center_;
};

/**
 * Sets the map center.
 * @param {?google.maps.LatLng} center
 */
CenterControl.prototype.setCenter = function(center) {
  this.center_ = center;
};

function initMap() {
  map = new google.maps.Map(document.getElementById("map"), {
    zoom: 12,
    center: chicago
  });

  // Create the DIV to hold the control and call the CenterControl()
  // constructor
  // passing in this DIV.
  var centerControlDiv = document.createElement("div");
  var centerControl = new CenterControl(centerControlDiv, map, chicago);

  centerControlDiv.index = 1;
  centerControlDiv.style["padding-top"] = "10px";
  map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);
}

CSS

/* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
#map {
  height: 100%;
}

/* Optional: Makes the sample page fill the window. */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

#goCenterUI,
#setCenterUI {
  background-color: #fff;
  border: 2px solid #fff;
  border-radius: 3px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
  cursor: pointer;
  float: left;
  margin-bottom: 22px;
  text-align: center;
}

#goCenterText,
#setCenterText {
  color: #191919;
  font-family: Roboto, Arial, sans-serif;
  font-size: 15px;
  line-height: 25px;
  padding-left: 5px;
  padding-right: 5px;
}

#setCenterUI {
  margin-left: 12px;
}

HTML

<!DOCTYPE html>
<html>
  <head>
    <title>Adding State to Controls</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
    <script
      src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=&v=weekly"
      defer
    ></script>
    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script src="./app.js"></script>
  </head>
  <body>
    <div id="map"></div>
  </body>
</html>

All

<!DOCTYPE html>
<html>
  <head>
    <title>Adding State to Controls</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
    <script
      src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=&v=weekly"
      defer
    ></script>
    <style type="text/css">
      /* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
      #map {
        height: 100%;
      }

      /* Optional: Makes the sample page fill the window. */
      html,
      body {
        height: 100%;
        margin: 0;
        padding: 0;
      }

      #goCenterUI,
      #setCenterUI {
        background-color: #fff;
        border: 2px solid #fff;
        border-radius: 3px;
        box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
        cursor: pointer;
        float: left;
        margin-bottom: 22px;
        text-align: center;
      }

      #goCenterText,
      #setCenterText {
        color: #191919;
        font-family: Roboto, Arial, sans-serif;
        font-size: 15px;
        line-height: 25px;
        padding-left: 5px;
        padding-right: 5px;
      }

      #setCenterUI {
        margin-left: 12px;
      }
    </style>
    <script>
      (function(exports) {
        "use strict";

        var chicago = {
          lat: 41.85,
          lng: -87.65
        };
        /**
         * The CenterControl adds a control to the map that recenters the map on
         * Chicago.
         * @constructor
         * @param {!Element} controlDiv
         * @param {!google.maps.Map} map
         * @param {?google.maps.LatLng} center
         */

        function CenterControl(controlDiv, map, center) {
          // We set up a variable for this since we're adding event listeners
          // later.
          var control = this; // Set the center property upon construction

          control.center_ = center;
          controlDiv.style.clear = "both"; // Set CSS for the control border

          var goCenterUI = document.createElement("div");
          goCenterUI.id = "goCenterUI";
          goCenterUI.title = "Click to recenter the map";
          controlDiv.appendChild(goCenterUI); // Set CSS for the control interior

          var goCenterText = document.createElement("div");
          goCenterText.id = "goCenterText";
          goCenterText.innerHTML = "Center Map";
          goCenterUI.appendChild(goCenterText); // Set CSS for the setCenter control border

          var setCenterUI = document.createElement("div");
          setCenterUI.id = "setCenterUI";
          setCenterUI.title = "Click to change the center of the map";
          controlDiv.appendChild(setCenterUI); // Set CSS for the control interior

          var setCenterText = document.createElement("div");
          setCenterText.id = "setCenterText";
          setCenterText.innerHTML = "Set Center";
          setCenterUI.appendChild(setCenterText); // Set up the click event listener for 'Center Map': Set the center of
          // the map
          // to the current center of the control.

          goCenterUI.addEventListener("click", function() {
            var currentCenter = control.getCenter();
            map.setCenter(currentCenter);
          }); // Set up the click event listener for 'Set Center': Set the center of
          // the control to the current center of the map.

          setCenterUI.addEventListener("click", function() {
            var newCenter = map.getCenter();
            control.setCenter(newCenter);
          });
        }
        /**
         * Define a property to hold the center state.
         * @private
         */

        CenterControl.prototype.center_ = null;
        /**
         * Gets the map center.
         * @return {?google.maps.LatLng}
         */

        CenterControl.prototype.getCenter = function() {
          return this.center_;
        };
        /**
         * Sets the map center.
         * @param {?google.maps.LatLng} center
         */

        CenterControl.prototype.setCenter = function(center) {
          this.center_ = center;
        };

        function initMap() {
          exports.map = new google.maps.Map(document.getElementById("map"), {
            zoom: 12,
            center: chicago
          }); // Create the DIV to hold the control and call the CenterControl()
          // constructor
          // passing in this DIV.

          var centerControlDiv = document.createElement("div");
          var centerControl = new CenterControl(
            centerControlDiv,
            exports.map,
            chicago
          );
          centerControlDiv.index = 1;
          centerControlDiv.style["padding-top"] = "10px";
          exports.map.controls[google.maps.ControlPosition.TOP_CENTER].push(
            centerControlDiv
          );
        }

        exports.CenterControl = CenterControl;
        exports.chicago = chicago;
        exports.initMap = initMap;
      })((this.window = this.window || {}));
    </script>
  </head>
  <body>
    <div id="map"></div>
  </body>
</html>
(function(exports) { "use strict"; var chicago = { lat: 41.85, lng: -87.65 }; /** * The CenterControl adds a control to the map that recenters the map on * Chicago. * @constructor * @param {!Element} controlDiv * @param {!google.maps.Map} map * @param {?google.maps.LatLng} center */ function CenterControl(controlDiv, map, center) { // We set up a variable for this since we're adding event listeners // later. var control = this; // Set the center property upon construction control.center_ = center; controlDiv.style.clear = "both"; // Set CSS for the control border var goCenterUI = document.createElement("div"); goCenterUI.id = "goCenterUI"; goCenterUI.title = "Click to recenter the map"; controlDiv.appendChild(goCenterUI); // Set CSS for the control interior var goCenterText = document.createElement("div"); goCenterText.id = "goCenterText"; goCenterText.innerHTML = "Center Map"; goCenterUI.appendChild(goCenterText); // Set CSS for the setCenter control border var setCenterUI = document.createElement("div"); setCenterUI.id = "setCenterUI"; setCenterUI.title = "Click to change the center of the map"; controlDiv.appendChild(setCenterUI); // Set CSS for the control interior var setCenterText = document.createElement("div"); setCenterText.id = "setCenterText"; setCenterText.innerHTML = "Set Center"; setCenterUI.appendChild(setCenterText); // Set up the click event listener for 'Center Map': Set the center of // the map // to the current center of the control. goCenterUI.addEventListener("click", function() { var currentCenter = control.getCenter(); map.setCenter(currentCenter); }); // Set up the click event listener for 'Set Center': Set the center of // the control to the current center of the map. setCenterUI.addEventListener("click", function() { var newCenter = map.getCenter(); control.setCenter(newCenter); }); } /** * Define a property to hold the center state. * @private */ CenterControl.prototype.center_ = null; /** * Gets the map center. * @return {?google.maps.LatLng} */ CenterControl.prototype.getCenter = function() { return this.center_; }; /** * Sets the map center. * @param {?google.maps.LatLng} center */ CenterControl.prototype.setCenter = function(center) { this.center_ = center; }; function initMap() { exports.map = new google.maps.Map(document.getElementById("map"), { zoom: 12, center: chicago }); // Create the DIV to hold the control and call the CenterControl() // constructor // passing in this DIV. var centerControlDiv = document.createElement("div"); var centerControl = new CenterControl( centerControlDiv, exports.map, chicago ); centerControlDiv.index = 1; centerControlDiv.style["padding-top"] = "10px"; exports.map.controls[google.maps.ControlPosition.TOP_CENTER].push( centerControlDiv ); } exports.CenterControl = CenterControl; exports.chicago = chicago; exports.initMap = initMap; })((this.window = this.window || {}));
/* Always set the map height explicitly to define the size of the div * element that contains the map. */ #map { height: 100%; } /* Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } #goCenterUI, #setCenterUI { background-color: #fff; border: 2px solid #fff; border-radius: 3px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); cursor: pointer; float: left; margin-bottom: 22px; text-align: center; } #goCenterText, #setCenterText { color: #191919; font-family: Roboto, Arial, sans-serif; font-size: 15px; line-height: 25px; padding-left: 5px; padding-right: 5px; } #setCenterUI { margin-left: 12px; }
<!DOCTYPE html> <html> <head> <title>Adding State to Controls</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <script src="https://maps.googleapis.com/maps/api/js?key=&callback=initMap&libraries=&v=weekly" defer ></script> <!-- jsFiddle will insert css and js --> </head> <body> <div id="map"></div> </body> </html>