Gli elementi Place Details e Place Details Compact sono elementi HTML che visualizzano i dettagli di un luogo:
-
PlaceDetailsElementsupporta tutti i dati dei luoghi visualizzabili e può includere più foto. -
Il
PlaceDetailsCompactElementè progettato per occupare uno spazio minimo e mostrare un insieme conciso di informazioni su un luogo, tra cui nome, indirizzo, valutazione e così via. Può includere anche una singola foto.
Elemento Place Details
Fai clic su un indicatore sulla mappa per visualizzare i dettagli del luogo in un elemento Dettagli del luogo.
Il
PlaceDetailsElement
supporta un'ampia gamma di elementi di contenuti, tra cui orari di apertura completi,
sito web, numero di telefono,
riepilogo basato sull'AI
con fallback al riepilogo editoriale, punti salienti specifici per tipo, recensioni,
riepilogo delle recensioni basato sull'AI, oltre a elenchi di codici e funzionalità.
Per visualizzare i dettagli del luogo su una mappa, aggiungi un elemento gmp-place-details all'elemento gmp-map nella pagina HTML. Includi un elemento secondario,
gmp-place-details-place-request, per selezionare il luogo. Può essere un oggetto Place, un ID luogo o il nome della risorsa di un luogo:
<gmp-map center="47.759737, -122.250632" zoom="16" map-id="DEMO_MAP_ID">
<div class="widget-container" slot="control-inline-start-block-start">
<gmp-place-details>
<gmp-place-details-place-request place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
<gmp-place-all-content></gmp-place-all-content>
</gmp-place-details>
</div>
<gmp-advanced-marker></gmp-advanced-marker>
</gmp-map>Configurare i contenuti
Puoi controllare i contenuti di un luogo specifico visualizzati dall'elemento
gmp-place-details utilizzando un elemento
gmp-place-content-config
nidificato per selezionare e configurare i dettagli del luogo, come mostrato in questo
esempio:
<gmp-place-details>
<gmp-place-details-place-request
place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
<gmp-place-content-config>
<gmp-place-address></gmp-place-address>
<gmp-place-rating></gmp-place-rating>
<gmp-place-type></gmp-place-type>
<gmp-place-price></gmp-place-price>
<gmp-place-accessible-entrance-icon></gmp-place-accessible-entrance-icon>
<gmp-place-opening-hours></gmp-place-opening-hours>
<gmp-place-website></gmp-place-website>
<gmp-place-phone-number></gmp-place-phone-number>
<gmp-place-summary></gmp-place-summary>
<gmp-place-type-specific-highlights></gmp-place-type-specific-highlights>
<gmp-place-review-summary></gmp-place-review-summary>
<gmp-place-reviews></gmp-place-reviews>
<gmp-place-feature-list></gmp-place-feature-list>
</gmp-place-content-config>
</gmp-place-details>
L'elemento gmp-place-content-config stesso contiene una serie di elementi di contenuti secondari e ognuno seleziona un dettaglio del luogo corrispondente da visualizzare:
gmp-place-address
seleziona l'indirizzo del luogo,
gmp-place-price
seleziona il livello di prezzo del luogo e così via. Gli elementi
gmp-place-summary
e
gmp-place-review-summary
forniscono un
riepilogo basato sull'AI
del luogo e delle relative recensioni, rispettivamente. L'ordine degli elementi
secondari è irrilevante, in quanto i dettagli selezionati vengono sempre visualizzati in un
ordine predefinito fisso.
Alcuni di questi elementi possono essere ulteriormente configurati utilizzando attributi specifici per i contenuti:
-
L'elemento
gmp-place-mediaviene utilizzato per visualizzare una singola foto e include un attributolightbox-preferredche apre la foto in una lightbox quando viene selezionata. La lightbox è disattivata per impostazione predefinita. -
L'elemento
gmp-place-attributionviene utilizzato per visualizzare l'origine della foto. Gli attributilight-scheme-coloredark-scheme-colorvengono utilizzati per impostare il colore del testo di attribuzione in modalità chiara e scura.
Per ulteriori informazioni su tutti gli elementi di contenuti supportati, consulta la documentazione di riferimento di
PlaceContentConfigElement.
Per semplicità, l'elemento
gmp-place-content-config
può essere sostituito con
gmp-place-all-content
per mostrare tutti i dettagli disponibili nell'elemento Dettagli luogo o con
gmp-place-standard-content
per visualizzare una configurazione standard.
Configurare l'aspetto
L'intervallo di larghezza consigliato per l'elemento gmp-place-details
è 250-400 px. Le larghezze inferiori a 250 px potrebbero non essere visualizzate correttamente. Imposta l'altezza
in base alla tua applicazione. L'elemento Places Details è progettato per
scorrere all'interno dello spazio assegnato in base alle esigenze.
L'elemento gmp-place-details supporta anche una serie di
proprietà CSS personalizzate per configurare i colori e i caratteri dell'elemento. Per maggiori dettagli, consulta
Stili personalizzati di Places UI Kit.
Visualizza l'esempio di codice completo
JavaScript
// Use querySelector to select elements for interaction. const map = document.querySelector('gmp-map'); const placeDetails = document.querySelector('gmp-place-details'); const placeDetailsRequest = document.querySelector('gmp-place-details-place-request'); const marker = document.querySelector('gmp-advanced-marker'); async function initMap() { // Request needed libraries. await Promise.all([ google.maps.importLibrary('maps'), google.maps.importLibrary('marker'), google.maps.importLibrary('places'), ]); // Hide the map type control. map.innerMap.setOptions({ mapTypeControl: false }); // Function to update map and marker based on place details const updateMapAndMarker = () => { if (placeDetails.place && placeDetails.place.location) { map.innerMap.panTo(placeDetails.place.location); map.innerMap.setZoom(16); // Set zoom after panning if needed marker.position = placeDetails.place.location; marker.collisionBehavior = google.maps.CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL; marker.style.display = 'block'; } }; // Set up map once widget is loaded. placeDetails.addEventListener('gmp-load', (event) => { updateMapAndMarker(); }); // Add an event listener to handle clicks. map.innerMap.addListener('click', async (event) => { marker.position = null; event.stop(); if (event.placeId) { // Fire when the user clicks a POI. placeDetailsRequest.place = event.placeId; updateMapAndMarker(); } else { // Fire when the user clicks the map (not on a POI). console.log('No place was selected.'); marker.style.display = 'none'; } }); } initMap();
CSS
/* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } .container { display: flex; height: 100vh; width: 100%; } gmp-map { flex-grow: 1; } .ui-panel { width: 400px; margin-left: 20px; margin-top: 10px; } gmp-place-details { width: 100%; margin: 0; border: none; }
HTML
<!doctype html>
<html>
<head>
<title>Place Details with Google Maps</title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="module" src="./index.js" defer></script>
<!-- prettier-ignore -->
<script>
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
({key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "weekly"});
</script>
</head>
<body>
<div class="container">
<!-- map-id is required to use advanced markers. See https://developers.google.com/maps/documentation/javascript/map-ids/mapid-over. -->
<gmp-map zoom="17" map-id="DEMO_MAP_ID">
<gmp-advanced-marker></gmp-advanced-marker>
</gmp-map>
<div class="ui-panel">
<gmp-place-details>
<gmp-place-details-place-request
place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
<gmp-place-content-config>
<gmp-place-address></gmp-place-address>
<gmp-place-rating></gmp-place-rating>
<gmp-place-type></gmp-place-type>
<gmp-place-price></gmp-place-price>
<gmp-place-accessible-entrance-icon></gmp-place-accessible-entrance-icon>
<gmp-place-opening-hours></gmp-place-opening-hours>
<gmp-place-website></gmp-place-website>
<gmp-place-phone-number></gmp-place-phone-number>
<gmp-place-summary></gmp-place-summary>
<gmp-place-type-specific-highlights></gmp-place-type-specific-highlights>
<gmp-place-review-summary></gmp-place-review-summary>
<gmp-place-reviews></gmp-place-reviews>
<gmp-place-feature-list></gmp-place-feature-list>
</gmp-place-content-config>
</gmp-place-details>
</div>
</div>
</body>
</html>Prova campione
Elemento compatto Place Details
Fai clic su un indicatore sulla mappa per visualizzare i dettagli del luogo in un elemento compatto Dettagli del luogo.
Il
PlaceDetailsCompactElement
mostra i dettagli di un luogo selezionato utilizzando uno spazio minimo. Questo può essere
utile in una finestra informativa che mette in evidenza un luogo su una mappa, in un'esperienza
sui social media come la condivisione di una posizione in una chat, come suggerimento per
selezionare la tua posizione attuale o all'interno di un articolo multimediale per fare riferimento
al luogo su Google Maps. Il PlaceDetailsCompactElement può
mostrare nome visualizzato, indirizzo, valutazione, tipo, prezzo, icona di accessibilità, stato
di apertura e una singola foto. Può essere visualizzato orizzontalmente o
verticalmente, come selezionato dall'attributo orientation.
Nel seguente snippet, gmp-place-details-compact è
configurato con orientation impostato su horizontal.
Un attributo aggiuntivo, truncation-preferred, tronca
determinati contenuti per adattarli a una riga anziché andare a capo. L'elemento
gmp-place-details-compact contiene un elemento secondario,
gmp-place-details-place-request, per selezionare il luogo. Può essere un oggetto Place, un ID luogo o il nome della risorsa di un luogo.
<gmp-place-details-compact orientation = "horizontal" truncation-preferred >
<gmp-place-details-place-request place = "ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
<gmp-place-all-content></gmp-place-all-content>
</gmp-place-details-compact>Configurare i contenuti
Puoi controllare i contenuti di un luogo specifico visualizzati dall'elemento
gmp-place-details-compact utilizzando un elemento
gmp-place-content-config
nidificato per selezionare e configurare i dettagli del luogo, come mostrato in questo snippet:
<gmp-place-content-config>
<gmp-place-media lightbox-preferred></gmp-place-media>
<gmp-place-rating></gmp-place-rating>
<gmp-place-type></gmp-place-type>
<gmp-place-price></gmp-place-price>
<gmp-place-accessible-entrance-icon></gmp-place-accessible-entrance-icon>
<gmp-place-open-now-status></gmp-place-open-now-status>
<gmp-place-attribution
light-scheme-color="gray"
dark-scheme-color="white"></gmp-place-attribution>
</gmp-place-content-config>L'elemento
gmp-place-content-config stesso contiene una serie di
elementi di contenuti secondari e ognuno seleziona un dettaglio del luogo corrispondente da
visualizzare. L'ordine degli elementi secondari è irrilevante, in quanto i dettagli
selezionati vengono sempre visualizzati in un ordine predefinito fisso. Alcuni di questi
elementi possono essere configurati ulteriormente utilizzando attributi specifici per i contenuti.
Per ulteriori informazioni su tutti gli elementi di contenuti supportati, consulta la documentazione di riferimento di
PlaceContentConfigElement.
Per semplicità, l'elemento
gmp-place-content-config
può essere sostituito con
gmp-place-all-content
per mostrare tutti i dettagli disponibili nell'elemento Dettagli luogo compatti oppure con
gmp-place-standard-content
per visualizzare una configurazione standard.
Configurare l'aspetto
L'intervallo di larghezza consigliato per l'elemento
gmp-place-details-compact in orientamento verticale è
180-300 px. Le larghezze inferiori a 160 px potrebbero non essere visualizzate correttamente. Non impostare
un'altezza fissa.
L'intervallo di larghezza consigliato per l'elemento
gmp-place-details-compact in orientamento orizzontale
è 180-500 px. Le larghezze inferiori a 160 px potrebbero non essere visualizzate correttamente. Con
larghezze inferiori a 350 px, l'immagine in miniatura non verrà mostrata. Non impostare
un'altezza fissa.
L'elemento gmp-place-details-compact supporta anche una serie
di proprietà CSS personalizzate per configurare i colori e i caratteri dell'elemento. Per maggiori dettagli, consulta
Stili personalizzati di Places UI Kit.
Tieni presente che se l'elemento Place Details Compact viene aggiunto a una finestra informativa, lo stile personalizzato deve
essere applicato direttamente all'elemento gmp-place-details-compact. Questo perché
la finestra informativa fa parte del DOM ombra della mappa, quindi gli stili CSS esterni non verranno applicati.
<gmp-place-details-compact
orientation="horizontal"
truncation-preferred
style="
width: 400px;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
color-scheme: light;
">
<gmp-place-details-place-request
place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>Visualizza un esempio di codice completo
Questo esempio mostra l'aggiunta di un
PlaceDetailsCompactElement
a una mappa in modo programmatico utilizzando un
InfoWindow e un
AdvancedMarkerElement.
JavaScript
// Use querySelector to select elements for interaction. const map = document.querySelector('gmp-map'); const placeDetails = document.querySelector('gmp-place-details-compact'); const placeDetailsRequest = document.querySelector('gmp-place-details-place-request'); const marker = document.querySelector('gmp-advanced-marker'); async function initMap() { // Request needed libraries. Promise.all([ google.maps.importLibrary('marker'), google.maps.importLibrary('places'), ]); const { InfoWindow } = (await google.maps.importLibrary('maps')); await window.customElements.whenDefined('gmp-map'); // Set the inner map options. map.innerMap.setOptions({ mapTypeControl: false, streetViewControl: false, }); await window.customElements.whenDefined('gmp-advanced-marker'); marker.collisionBehavior = google.maps.CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL; const infoWindow = new InfoWindow(); infoWindow.addListener('close', () => { marker.position = null; }); const showInfoWindow = () => { if (infoWindow.isOpen) return; infoWindow.setContent(placeDetails); infoWindow.open({ anchor: marker }); }; placeDetails.addEventListener('gmp-load', (event) => { // For the initial load case, with no user click, we fall back to the place's location, and ensure the map has a center set and the InfoWindow is show. // (The clicked POI LatLng will be a more natural marker position, when available.) if (!map.center) { map.center = marker.position = placeDetails.place.location; showInfoWindow(); } }); // Add an event listener to handle clicks. map.innerMap.addListener('click', async (event) => { event.stop(); if (event.placeId) { // When the user clicks a POI. marker.position = event.latLng; placeDetailsRequest.place = event.placeId; showInfoWindow(); } else { // When the user clicks the map (not on a POI). marker.position = null; placeDetailsRequest.place = null; console.log('No place was selected.'); } }); } initMap();
CSS
/* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } .container { display: flex; height: 100vh; width: 100%; } gmp-map { flex-grow: 1; }
HTML
<!doctype html>
<html>
<head>
<title>Place Details Compact with Google Maps</title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="module" src="./index.js" defer></script>
<!-- prettier-ignore -->
<script>
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
({key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "weekly"});
</script>
</head>
<body>
<div class="container">
<!-- map-id is required to use Advanced Markers. See https://developers.google.com/maps/documentation/javascript/map-ids/mapid-over. -->
<gmp-map zoom="17" map-id="DEMO_MAP_ID">
<gmp-advanced-marker></gmp-advanced-marker>
</gmp-map>
</div>
<!--
The gmp-place-details-compact element is styled inline because it is
conditionally rendered and moved into the info window, which is
part of the map's shadow DOM.
-->
<gmp-place-details-compact
orientation="horizontal"
truncation-preferred
style="
width: 400px;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
color-scheme: light;
">
<gmp-place-details-place-request
place="ChIJC8HakaIRkFQRiOgkgdHmqkk"></gmp-place-details-place-request>
<gmp-place-content-config>
<gmp-place-media lightbox-preferred></gmp-place-media>
<gmp-place-rating></gmp-place-rating>
<gmp-place-type></gmp-place-type>
<gmp-place-price></gmp-place-price>
<gmp-place-accessible-entrance-icon></gmp-place-accessible-entrance-icon>
<gmp-place-open-now-status></gmp-place-open-now-status>
<gmp-place-attribution
light-scheme-color="gray"
dark-scheme-color="white"></gmp-place-attribution>
</gmp-place-content-config>
</gmp-place-details-compact>
</body>
</html>