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 or view this example full screen.
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); }
<div id="map"></div>
/* 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,.3); cursor: pointer; float: left; margin-bottom: 22px; text-align: center; } #goCenterText, #setCenterText { color: rgb(25,25,25); font-family: Roboto,Arial,sans-serif; font-size: 15px; line-height: 25px; padding-left: 5px; padding-right: 5px; } #setCenterUI { margin-left: 12px; }
<!-- Replace the value of the key parameter with your own API key. --> <script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap"> </script>
Попробуйте сделать это сами
Наведите указатель мыши на верхнюю правую часть блока кода, чтобы скопировать код или открыть его в JSFiddle.
<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <title>Adding state to controls</title> <style> /* 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,.3); cursor: pointer; float: left; margin-bottom: 22px; text-align: center; } #goCenterText, #setCenterText { color: rgb(25,25,25); font-family: Roboto,Arial,sans-serif; font-size: 15px; line-height: 25px; padding-left: 5px; padding-right: 5px; } #setCenterUI { margin-left: 12px; } </style> </head> <body> <div id="map"></div> <script> 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); } </script> <script async defer src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"> </script> </body> </html>