«عنصر جزئیات مکان» و «عنصر فشرده جزئیات مکان» عناصر HTML هستند که جزئیات مکان را پرداز میکنند:
-
این
PlaceDetailsElementاز همه دادههای «مکان» دیداریشدنی پشتیبانی میکند و ممکن است شامل چندین عکس باشد. -
این
PlaceDetailsCompactElementطراحی شده است تا حداقل فضا را مصرف کند و مجموعه مختصری از اطلاعات درباره مکان، ازجمله نام، نشانی، ردهبندی، و غیره را نمایش دهد. همچنین ممکن است شامل یک عکس باشد.
از ابزار سفارشیسازی برای دیداریسازی کردن اینکه چگونه مجموعههای مختلف داراییها بر ظاهر عنصر «جزئیات مکانها» تأثیر میگذارند و دسترسی به کد در HTML/CSS، Kotlin/XML، و Swift استفاده کنید.
عنصر جزئیات جا
روی نشانگر در نقشه کلیک کنید تا جزئیات مکان آن را در عنصر «جزئیات مکان» ببینید.
این
PlaceDetailsElement
از طیف گستردهای از عناصر محتوا پشتیبانی میکند، ازجمله ساعات کاری کامل،
وبسایت، شماره تلفن،
خلاصه با پشتیبانی هوش مصنوعی
با خلاصه تحریری بهعنوان جایگزین، نکات برجسته خاص نوع، مرورها،
خلاصه مرور با پشتیبانی هوش مصنوعی، کد پلاس، و فهرست ویژگیها.
برای نمایش جزئیات مکان در نقشه، عنصر
gmp-place-details را به عنصر gmp-map
در صفحه HTML اضافه کنید. عنصر فرزندی،
gmp-place-details-place-request، را برای انتخاب مکان اضافه کنید. این میتواند
شیء مکان،
شناسه مکان، یا نام منبع مکان باشد:
<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>پیکربندی محتوا
بااستفاده از عنصر تودرتوی
gmp-place-content-config
میتوانید مکان خاصی را که عنصر gmp-place-details نمایش میدهد کنترل کنید. برای این کار، جزئیات مکان را انتخاب و پیکربندی کنید، همانطور که در این
مثال نشان داده شده است:
<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>
خود عنصر gmp-place-content-config حاوی تعدادی عنصر محتوای فرزند است و هرکدام جزئیات مکان مربوطه را برای نمایش انتخاب میکند:
gmp-place-address
نشانی مکان را انتخاب میکند،
gmp-place-price
سطح قیمت مکان را انتخاب میکند، و غیره. عناصر
gmp-place-summary
و
gmp-place-review-summary
بهترتیب خلاصه
با بهرهگیری از هوش مصنوعی
از مکان و مرورهای آن ارائه میدهند. ترتیب عناصر کودک
نامربوط است، زیرا جزئیات انتخابشده همیشه در
ترتیب ازپیشتعیینشده ثابتی ارائه میشود.
برخیاز این عناصر را میتوان بااستفاده از مشخصههای مختص محتوا بیشتر پیکربندی کرد:
-
از عنصر
gmp-place-mediaبرای نمایش یک عکس استفاده میشود و شاملlightbox-preferredویژگیای است که وقتی روی آن کلیک میشود، عکس را در میز نور باز میکند. «جعبه نور» بهطور پیشفرض غیرفعال است. -
از عنصر
gmp-place-attributionبرای نمایش منبع عکس استفاده میشود. ازlight-scheme-colorوdark-scheme-colorمشخصهها برای تنظیم رنگ نوشتار اسنادی در حالت روشن و تاریک استفاده میشود.
برای اطلاعات بیشتر درباره همه عناصر محتوای پشتیبانیشده، به
PlaceContentConfigElement
اسناد مرجع مراجعه کنید.
برای سادهتر شدن، عنصر
gmp-place-content-config
را میتوان با
gmp-place-all-content
جایگزین کرد تا همه جزئیات موجود در عنصر «جزئیات مکان» را نشان دهد، یا با
gmp-place-standard-content
جایگزین کرد تا پیکربندی استاندارد را نمایش دهد.
پیکربندی ظاهر
محدوده عرض توصیهشده برای عنصر gmp-place-details
۲۵۰ تا ۴۰۰ پیکسل است. عرضهای کمتر از ۲۵۰ پیکسل ممکن است بهدرستی نمایش داده نشوند. ارتفاع را
متناسب با برنامهتان تنظیم کنید. عنصر «جزئیات مکان» بهگونهای طراحی شده است که
درصورت نیاز در فضای اختصاصدادهشده پیمایش کند.
عنصر gmp-place-details همچنین از انواع
خصوصیات سفارشی CSS برای پیکربندی رنگها و قلمهای عنصر پشتیبانی میکند. برای جزئیات بیشتر،
سبکدهی سفارشی «کیت واسط کاربر مکانها»
را ببینید.
دیدن نمونه کد کامل
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 init() { // 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?.location) { map.innerMap.panTo(placeDetails.place.location); map.innerMap.setZoom(16); // Set zoom after panning if needed marker.position = placeDetails.place.location; marker.collisionBehavior = 'REQUIRED_AND_HIDES_OPTIONAL'; marker.style.display = 'block'; } }; // Set up map once widget is loaded. placeDetails.addEventListener('gmp-load', () => { updateMapAndMarker(); }); // Add an event listener to handle clicks. map.innerMap.addListener('click', (event) => { marker.position = null; event.stop(); if ('placeId' in event && 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'; } }); } void init();
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"></script>
<script>
// prettier-ignore
(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: "GOOGLE_MAPS_API_KEY"
});
</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>عنصر فشرده جزئیات جا
روی نشانی در نقشه کلیک کنید تا جزئیات مکان آن را در «عنصر فشرده جزئیات مکان» ببینید.
این
PlaceDetailsCompactElement
جزئیات مکان انتخابشده را بااستفاده از حداقل فضا ارائه میکند. این ممکن است در پنجره اطلاعاتی که مکانی را در نقشه برجسته میکند، در تجربه رسانههای اجتماعی مثل همرسانی مکان در گپ، بهعنوان پیشنهادی برای انتخاب مکان فعلی شما، یا در مقاله رسانهای برای ارجاع دادن به مکان در Google Maps مفید باشد. PlaceDetailsCompactElement میتواند
نام نمایشی، نشانی، ردهبندی، نوع، قیمت، نماد دسترسپذیری، وضعیت
باز بودن، و یک عکس را نمایش دهد. میتواند بهصورت افقی یا
عمودی، همانطور که توسط ویژگی orientation انتخاب شده است، نمایش داده شود.
در گزیده زیر، gmp-place-details-compact با orientation تنظیمشده روی horizontal پیکربندی شده است.
مشخصه اضافی، truncation-preferred،
محتوای خاصی را کوتاه میکند تا بهجای شکستن در چند خط، در یک خط جا شود. عنصر
gmp-place-details-compact حاوی عنصر فرزندی به نام
gmp-place-details-place-request برای انتخاب مکان است. این میتواند
شیء مکان،
شناسه مکان، یا نام منبع «مکان» باشد.
<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>پیکربندی محتوا
بااستفاده از عنصر
gmp-place-details-compact تودرتو میتوانید مکان خاصی را که محتوای آن نمایش داده میشود کنترل کنید.
عنصر
gmp-place-content-config
را برای انتخاب و پیکربندی جزئیات مکان، همانطور که در این
گزیده نشان داده شده است، استفاده کنید:
<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-content-config خود حاوی تعدادی عنصر محتوای فرزند است و هریک جزئیات مکان مربوطه را برای نمایش انتخاب میکند. ترتیب عناصر فرزند نامربوط است، زیرا جزئیات انتخابشده همیشه در ترتیب ازپیشتعیینشده ثابتی ارائه میشود. برخیاز این عناصر را میتوان بااستفاده از مشخصههای مختص محتوا بیشتر پیکربندی کرد.
برای اطلاعات بیشتر درباره همه عناصر محتوای پشتیبانیشده، به
PlaceContentConfigElement
اسناد مرجع مراجعه کنید.
برای سادهتر شدن، عنصر
gmp-place-content-config
را میتوان با
gmp-place-all-content
جایگزین کرد تا همه جزئیات موجود در عنصر «فشرده جزئیات مکان» نشان داده شود، یا
با
gmp-place-standard-content
جایگزین کرد تا پیکربندی استاندارد نمایش داده شود.
پیکربندی ظاهر
محدوده عرض توصیهشده برای عنصر
gmp-place-details-compact در جهت عمودی
۱۸۰ تا ۳۰۰ پیکسل است. عرضهای کمتر از ۱۶۰ پیکسل ممکن است بهدرستی نمایش داده نشوند. ارتفاع ثابت تنظیم نکنید.
محدوده عرض توصیهشده برای عنصر
gmp-place-details-compact در جهت افقی
۱۸۰ تا ۵۰۰ پیکسل است. عرضهای کمتر از ۱۶۰ پیکسل ممکن است بهدرستی نمایش داده نشوند. در
عرضهای کمتر از ۳۵۰ پیکسل، تصویر ریزعکس نشان داده نخواهد شد. ارتفاع ثابت تنظیم نکنید.
عنصر gmp-place-details-compact همچنین از انواع مختلفی از
خصوصیات CSS سفارشی برای پیکربندی رنگها و قلمهای عنصر پشتیبانی میکند. برای جزئیات بیشتر،
سبکدهی سفارشی «کیت واسط کاربر مکانها»
را ببینید.
توجه داشته باشید که اگر عنصر «فشرده جزئیات مکان» به پنجره اطلاعات اضافه شود،
سبکبندی سفارشی باید مستقیماً روی عنصر
gmp-place-details-compact اعمال شود. دلیل این امر این است که پنجره اطلاعات بخشی از DOM سایه نقشه است، بنابراین سبکهای CSS خارجی اعمال نخواهند شد.
<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>دیدن نمونه کد کامل
این مثال افزودن
PlaceDetailsCompactElement
به نقشه را بهصورت برنامهنویسی بااستفاده از
InfoWindow
و
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 init() { // Request needed libraries. void 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 = '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', () => { // 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 && placeDetails.place?.location) { map.center = marker.position = placeDetails.place.location; showInfoWindow(); } }); // Add an event listener to handle clicks. map.innerMap.addListener('click', (event) => { event.stop(); if ('placeId' in event) { // 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.'); } }); } void init();
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"></script>
<script>
// prettier-ignore
(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: "GOOGLE_MAPS_API_KEY"
});
</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>