¿Cómo puedo personalizar los botones de zoom api (v3 javascript) de google maps en mi propia imagen?Botones de zoom personalizados Google Map API V3
Respuesta
Esto no es posible. Puede modificar un poco su apariencia mediante un conjunto de parámetros de opciones predefinidos o puede implementar su control de mapa personalizado que proporciona la misma funcionalidad que el control de zoom. Para obtener más información, consulte this page.
ACTUALIZADO: Enlace fijo. ¡Gracias por la respuesta!
Después de horas buscando Encontré la solución ¡Solo asegúrese de reemplazar su ID de API! ¡Disfrútalo!
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map-canvas { height: 60%; width:60%; margin:20px auto; border:1px solid; padding-left:100px; }
</style>
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?key=YOUR-MAP_API-ID&sensor=false®ion=AU">
</script>
<script type="text/javascript">
function HomeControl(controlDiv, map) {
google.maps.event.addDomListener(zoomout, 'click', function() {
var currentZoomLevel = map.getZoom();
if(currentZoomLevel != 0){
map.setZoom(currentZoomLevel - 1);}
});
google.maps.event.addDomListener(zoomin, 'click', function() {
var currentZoomLevel = map.getZoom();
if(currentZoomLevel != 21){
map.setZoom(currentZoomLevel + 1);}
});
}
var map;
var markersArray = [];
function initialize() {
var mapDiv = document.getElementById('map-canvas');
var myLatlng = new google.maps.LatLng(-33.90224, 151.20215);
var mapOptions = {
zoom: 15,
center: myLatlng,
Marker: true,
panControl: false,
zoomControl: false,
streetViewControl: false,
overviewMapControl: false,
mapTypeControl: false,
mapTypeControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(mapDiv, mapOptions);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title:"Hello World!"
});
// Create the DIV to hold the control and
// call the HomeControl() constructor passing
// in this DIV.
var homeControlDiv = document.createElement('div');
var homeControl = new HomeControl(homeControlDiv, map);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
<div id="zoomout" style="border:1px solid; width:150px; cursor:pointer; margin-bottom:20px;">ZOOM ME OUT</div>
<div id="zoomin" style="border:1px solid; width:150px; cursor:pointer; ">ZOOM ME IN</div>
</body>
</html>
¿es posible agregar un botón personalizado de Pegman? – Anuket
@Antonio Almeida Gracias –
lo hice en la forma en CSS:
#map-container .gm-style > .gmnoprint > .gmnoprint { background: url(/images/map-zoom-controls.png) no-repeat center center !important; width: 42px !important; height: 68px !important; }
#map-container .gm-style > .gmnoprint > .gmnoprint > div > img { display: none !important; }
#map-container .gm-style > .gmnoprint > .gmnoprint div[title="Zoom in"] { top: 2px !important; left: 2px !important; width: 38px !important; height: 31px !important; }
#map-container .gm-style > .gmnoprint > .gmnoprint div[title="Zoom out"] { top: 35px !important; left: 2px !important; width: 38px !important; height: 30px !important; }
Ésta es una imagen que tiene: Ancho: 42px; altura: 68px;
Haga sus propios ajustes.
ATENCIÓN
Esto se aplica sólo si está utilizando la versión Inglés debido a los atributos de título.
¡Muy bien! ¡Funciona perfectamente bien para mí! – SquareCat
Esto funcionará siempre que la estructura proporcionada por la interfaz de usuario de Google Maps siga siendo la misma, nunca se debe confiar en reglas codificadas para lograr su objetivo. – torresomar
Llego tarde a la fiesta, pero aquí está mi granito de arena.
Usted tiene básicamente dos opciones:
Opción 1: Usted bien crear los controles utilizando HTML/CSS a sí mismo, que luego se puede colocar sobre el mapa en la posición correcta utilizando la posición absoluta o medios similares. Aunque esto funciona en producción, no me gusta esto, porque tu HTML/CSS para el elemento no se carga al mismo tiempo que se muestra el mapa. También está separando su código HTML/CSS de los controles, por lo que es más difícil volver a utilizar el mismo mapa en diferentes páginas. p.ej. "¿Olvidé agregar los controles?"
Opción 2: Se creaa custom control que se ve y se siente los controladores de zoom que te gusta. A continuación hay un código sobre esto en la práctica.
En resumen, es necesario desactivar primero los controladores de interfaz de usuario normales llamando:
var mapOptions = {
zoom: 12,
center: chicago,
/* Disabling default UI widgets */
disableDefaultUI: true // <-- see this line
}
Y entonces acaba de crear el controlador y lo utiliza.
HTML:
...
<div id="map-canvas"></div>
...
CSS:
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px;
}
JavaScript:
var map;
var chicago = new google.maps.LatLng(41.850033, -87.6500523);
/**
* The ZoomControl adds +/- button for the map
*
*/
function ZoomControl(controlDiv, map) {
// Creating divs & styles for custom zoom control
controlDiv.style.padding = '5px';
// Set CSS for the control wrapper
var controlWrapper = document.createElement('div');
controlWrapper.style.backgroundColor = 'white';
controlWrapper.style.borderStyle = 'solid';
controlWrapper.style.borderColor = 'gray';
controlWrapper.style.borderWidth = '1px';
controlWrapper.style.cursor = 'pointer';
controlWrapper.style.textAlign = 'center';
controlWrapper.style.width = '32px';
controlWrapper.style.height = '64px';
controlDiv.appendChild(controlWrapper);
// Set CSS for the zoomIn
var zoomInButton = document.createElement('div');
zoomInButton.style.width = '32px';
zoomInButton.style.height = '32px';
/* Change this to be the .png image you want to use */
zoomInButton.style.backgroundImage = 'url("http://placehold.it/32/00ff00")';
controlWrapper.appendChild(zoomInButton);
// Set CSS for the zoomOut
var zoomOutButton = document.createElement('div');
zoomOutButton.style.width = '32px';
zoomOutButton.style.height = '32px';
/* Change this to be the .png image you want to use */
zoomOutButton.style.backgroundImage = 'url("http://placehold.it/32/0000ff")';
controlWrapper.appendChild(zoomOutButton);
// Setup the click event listener - zoomIn
google.maps.event.addDomListener(zoomInButton, 'click', function() {
map.setZoom(map.getZoom() + 1);
});
// Setup the click event listener - zoomOut
google.maps.event.addDomListener(zoomOutButton, 'click', function() {
map.setZoom(map.getZoom() - 1);
});
}
function initialize() {
var mapDiv = document.getElementById('map-canvas');
var mapOptions = {
zoom: 12,
center: chicago,
/* Disabling default UI widgets */
disableDefaultUI: true
}
map = new google.maps.Map(mapDiv, mapOptions);
// Create the DIV to hold the control and call the ZoomControl() constructor
// passing in this DIV.
var zoomControlDiv = document.createElement('div');
var zoomControl = new ZoomControl(zoomControlDiv, map);
zoomControlDiv.index = 1;
map.controls[google.maps.ControlPosition.TOP_LEFT].push(zoomControlDiv);
}
initialize();
Nota: Este código no contiene ninguna fanc y íconos y similares, solo marcadores de posición. Por lo tanto, es posible que deba ajustarlo para satisfacer sus necesidades. Por otra parte, recuerde agregar etiquetas HTML5 normales y script para google maps api v3 javascript. Agregué solo <div id="map-canvas"></div>
porque la necesidad de descansar del cuerpo es bastante obvia.
verlo en directo: Here is working jsfiddle example
Saludos.
Eso es increíble. –
Muchas gracias por esto. –
¡Esto funciona genial, gracias! Una pequeña mejora podría ser darle a los controles de zoom nombres de clase como 'controlWrapper.setAttribute (" clase "," custom-zoom-wrapper ");' etc. Esto significa que los estilos se pueden agregar en CSS en lugar de js, lo que lleva a un código más limpio y permite consultas de medios, es decir, botones más pequeños en pantallas más pequeñas. – Davey
- 1. Google Map API V3: cómo agregar datos personalizados a marcadores
- 2. google map api v3 color de fondo
- 3. Google Maps API v3 Punto de interés con iconos personalizados
- 4. maximizar infowindow con google map api v3
- 5. Obtener dirección de google map api v3 en inglés
- 6. Google Map API v3 - establecer límites y centro
- 7. Google Map Marker Manager V3
- 8. Marker off-set en Google Map API v3
- 9. Mostrar cierta ventana de información en Google Map API V3
- 10. Agregar varios puntos a Google Map con Javascript v3 API
- 11. Google Map Api v3 evento de arrastre en el mapa
- 12. Google Map API v3 ~ Simplemente cierre una ventana de información?
- 13. Límites de país usando Google Map API v3
- 14. google map zoom after directions
- 15. Google maps API V3 método fitBounds()
- 16. Google Maps API V3 desactivar el zoom suave
- 17. Google Maps api V3 marcador de actualización
- 18. Animar una ruta con google map js api v3
- 19. Ocultar sombra en infowindow en Google Map API V3
- 20. Google map API v3 marcadores que se superponen
- 21. Google Maps API v3 BrowserIsCompatible
- 22. El mapa no se muestra Google Maps API V3
- 23. Distancia de píxeles en Google Map (API V3) para evitar la superposición de etiquetas/superposiciones
- 24. Quitar marcador en Google Maps Api v3
- 25. iPhone google maps v3 sartenes después de pellizcar zoom
- 26. ¿La API v3 de Google Maps permite valores de zoom mayores?
- 27. Zoom para centrar en un mapa en Google Maps API V3
- 28. Google Maps API v3 - Diferentes marcadores/etiquetas en diferentes niveles de zoom
- 29. Google API v3 MAPA: Centro y zoom sobre los marcadores que aparecen
- 30. map.addOverlay en Google API v3
¿Has resuelto esto? – fledgling