Denetimlere Genel Bakış
Maps JavaScript API aracılığıyla gösterilen haritalar, kullanıcının haritayla etkileşimde bulunmasına olanak tanıyan kullanıcı arayüzü öğeleri içerir. Bu öğeler kontroller olarak bilinir ve uygulamanıza bu kontrollerin varyasyonlarını ekleyebilirsiniz. Alternatif olarak, hiçbir şey yapmayıp tüm kontrol davranışlarını Maps JavaScript API'nin işlemesine izin verebilirsiniz.
Aşağıdaki haritada, Maps JavaScript API tarafından gösterilen varsayılan kontrol grubu gösterilmektedir:
Sol üstten başlayarak saat yönünde: Harita Türü, Tam Ekran, Kamera, Street View, Klavye kısayolları.
Aşağıda, haritalarınızda kullanabileceğiniz kontrollerin tam listesi verilmiştir:
- Harita Türü kontrolü, açılır liste veya yatay düğme çubuğu şeklinde kullanılabilir. Bu kontrol, kullanıcının bir harita türü (
ROADMAP,SATELLITE,HYBRIDveyaTERRAIN) seçmesine olanak tanır. Bu kontrol, varsayılan olarak haritanın sol üst köşesinde görünür. - Tam ekran kontrolü, haritayı tam ekran modunda açma seçeneği sunar. Bu kontrol, masaüstü ve mobil cihazlarda varsayılan olarak etkindir. Not: iOS, tam ekran özelliğini desteklemez. Bu nedenle, tam ekran kontrolü iOS cihazlarda görünmez.
- Kamera kontrolü özelliği hem yakınlaştırma hem de kaydırma kontrollerini içerir.
- Street View kontrolü, Street View'u etkinleştirmek için haritaya sürüklenebilen bir Pegman simgesi içerir. Bu denetim, varsayılan olarak haritanın sağ alt kısmına yakın bir yerde görünür.
- Döndürme kontrolü, 3D görüntü içeren haritalar için eğme ve döndürme seçeneklerinin bir kombinasyonunu sunar. Bu denetim, varsayılan olarak haritanın sağ alt kısmına yakın bir yerde görünür. Daha fazla bilgi için 3D'ye genel bakış başlıklı makaleyi inceleyin.
- Ölçek kontrolü, bir harita ölçeği öğesi gösterir. Bu denetim varsayılan olarak devre dışıdır.
- Klavye kısayolları kontrolü, haritayla etkileşim kurmak için kullanılan klavye kısayollarının listesini gösterir.
Bu harita kontrollerine doğrudan erişmez veya bunları doğrudan değiştirmezsiniz. Bunun yerine, haritanın MapOptions alanlarını değiştirerek kontrollerin görünürlüğünü ve sunumunu etkileyebilirsiniz. Haritanızı oluştururken kontrol sunumunu ayarlayabilir (uygun MapOptions ile) veya haritanın seçeneklerini değiştirmek için setOptions() çağırarak haritayı dinamik olarak değiştirebilirsiniz.
Bu kontrollerin tümü varsayılan olarak etkin değildir. Varsayılan kullanıcı arayüzü davranışı (ve bu tür davranışları nasıl değiştireceğiniz) hakkında bilgi edinmek için aşağıdaki Varsayılan Kullanıcı Arayüzü bölümüne bakın.
Varsayılan kullanıcı arayüzü
Varsayılan olarak, harita çok küçükse (200x200 piksel) tüm kontroller kaybolur. Kontrolü açıkça görünür olacak şekilde ayarlayarak bu davranışı geçersiz kılabilirsiniz. Haritaya Kontrol Ekleme başlıklı makaleyi inceleyin.
Tam ekran kontrolü hariç (Kontrol listesinde açıklanan davranışa bakın), kontrollerin davranışı ve görünümü mobil ve masaüstü cihazlarda aynıdır.
Ayrıca, klavye işleme özelliği tüm cihazlarda varsayılan olarak etkindir.
Varsayılan kullanıcı arayüzünü devre dışı bırakma
API'nin varsayılan kullanıcı arayüzü düğmelerini tamamen kapatmak isteyebilirsiniz. Bunu yapmak için haritanın disableDefaultUI özelliğini (MapOptions nesnesi içinde) true olarak ayarlayın. Bu özellik, Maps JavaScript API'deki tüm kullanıcı arayüzü kontrol düğmelerini devre dışı bırakır. Ancak bu ayar, sırasıyla gestureHandling ve keyboardShortcuts özellikleri tarafından kontrol edilen temel haritadaki fare hareketlerini veya klavye kısayollarını etkilemez.
Aşağıdaki kod, kullanıcı arayüzü düğmelerini devre dışı bırakır:
TypeScript
innerMap.setOptions({ // Disable the default UI. disableDefaultUI: true, });
JavaScript
innerMap.setOptions({ // Disable the default UI. disableDefaultUI: true, });
Örneği deneyin
Haritaya Kontroller Ekleme
Kullanıcı arayüzü davranışını veya kontrollerini kaldırarak, ekleyerek ya da değiştirerek arayüzünüzü özelleştirmek ve gelecekteki güncellemelerin bu davranışı değiştirmemesini sağlamak isteyebilirsiniz. Yalnızca mevcut davranışı eklemek veya değiştirmek istiyorsanız kontrolün uygulamanıza açıkça eklendiğinden emin olmanız gerekir.
Bazı kontroller varsayılan olarak haritada görünürken bazıları siz özellikle istemediğiniz sürece görünmez. Haritaya kontrol ekleme veya haritadan kontrol kaldırma işlemi, aşağıdaki MapOptions nesnesinin alanlarında belirtilir. Bu alanları true olarak ayarlayarak görünür hale getirebilir veya false olarak ayarlayarak gizleyebilirsiniz:
{ cameraControl: boolean, mapTypeControl: boolean, scaleControl: boolean, streetViewControl: boolean, rotateControl: boolean, fullscreenControl: boolean }
Varsayılan olarak, harita 200x200 pikselden küçükse tüm kontroller kaybolur.
Kontrolü açıkça görünür olacak şekilde ayarlayarak bu davranışı geçersiz kılabilirsiniz. Örneğin, aşağıdaki tabloda, harita boyutuna ve cameraControl alanının ayarına göre kamera kontrolünün görünür olup olmadığı gösterilmektedir:
| Harita boyutu | cameraControl |
Görünür mü? |
|---|---|---|
| Tümü | false |
Hayır |
| Tümü | true |
Evet |
| >= 200x200 piksel | undefined |
Evet |
| < 200x200 piksel | undefined |
Hayır |
Aşağıdaki örnekte, harita Kamera kontrolünü gizleyecek ve Ölçek kontrolünü gösterecek şekilde ayarlanmıştır. Varsayılan kullanıcı arayüzünü açıkça devre dışı bırakmadığımızı, bu nedenle bu değişikliklerin varsayılan kullanıcı arayüzü davranışına ek olarak yapıldığını unutmayın.
TypeScript
innerMap.setOptions({ cameraControl: false, scaleControl: true, });
JavaScript
innerMap.setOptions({ cameraControl: false, scaleControl: true, });
Örneği deneyin
Kontrol Seçenekleri
Çeşitli kontroller yapılandırılabilir. Bu sayede kontrollerin davranışını değiştirebilir veya görünümünü düzenleyebilirsiniz. Örneğin, harita türü kontrolü yatay çubuk veya açılır menü olarak görünebilir.
Bu denetimler, harita oluşturulduktan sonra MapOptions nesnesindeki uygun denetim seçenekleri alanları değiştirilerek düzenlenir.
Örneğin, Harita Türü kontrolünü değiştirme seçenekleri mapTypeControlOptions alanında belirtilir. Harita Türü kontrolü aşağıdaki style seçeneklerden birinde görünebilir:
google.maps.MapTypeControlStyle.HORIZONTAL_BAR, Google Haritalar'da gösterildiği gibi, kontrol dizisini yatay bir çubukta düğmeler halinde gösterir.google.maps.MapTypeControlStyle.DROPDOWN_MENU, açılır menüden harita türünü seçmenize olanak tanıyan tek bir düğme kontrolü gösterir.google.maps.MapTypeControlStyle.DEFAULT, ekran boyutuna bağlı olan ve API'nin gelecekteki sürümlerinde değişebilecek varsayılan davranışı gösterir.
Herhangi bir kontrol seçeneğini değiştirirseniz uygun MapOptions değerini true olarak ayarlayarak kontrolü de açıkça etkinleştirmeniz gerektiğini unutmayın. Örneğin, bir Harita Türü kontrolünü DROPDOWN_MENU stilini gösterecek şekilde ayarlamak için MapOptions nesnesinde aşağıdaki kodu kullanın:
... mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU } ...
Aşağıdaki örnekte, kontrollerin varsayılan konumunun ve stilinin nasıl değiştirileceği gösterilmektedir.
TypeScript
innerMap.setOptions({ mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU, mapTypeIds: [ google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.TERRAIN, ], position: google.maps.ControlPosition.TOP_CENTER, }, });
JavaScript
innerMap.setOptions({ mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU, mapTypeIds: [ google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.TERRAIN, ], position: google.maps.ControlPosition.TOP_CENTER, }, });
Örneği deneyin
Kontroller genellikle harita oluşturulurken yapılandırılır. Ancak, Map'nın setOptions() yöntemini çağırıp yeni kontrol seçenekleri ileterek kontrollerin sunumunu dinamik olarak değiştirebilirsiniz.
Kontrolleri değiştirme
Haritanızı oluştururken bir kontrolün sunumunu, haritanın MapOptions nesnesindeki alanlar aracılığıyla belirtirsiniz. Bu alanlar aşağıda belirtilmiştir:
cameraControl, kullanıcının haritayı yakınlaştırmasına ve kaydırmasına olanak tanıyan kamera kontrolünü etkinleştirir/devre dışı bırakır. Bu denetim, varsayılan olarak tüm haritalarda görünür.cameraControlOptionsalanı, bu denetim için kullanılacakCameraControlOptionsdeğerini de belirtir.mapTypeControl, kullanıcının harita türleri (ör. harita ve uydu) arasında geçiş yapmasına olanak tanıyan Harita Türü kontrolünü etkinleştirir/devre dışı bırakır. Bu kontrol varsayılan olarak görünür ve haritanın sol üst köşesinde yer alır.mapTypeControlOptionsalanı, bu denetim için kullanılacakMapTypeControlOptionsdeğerini de belirtir.streetViewControl, kullanıcının bir Street View panoramasını etkinleştirmesine olanak tanıyan Pegman kontrolünü etkinleştirir/devre dışı bırakır. Bu kontrol varsayılan olarak görünür ve haritanın sağ alt kısmına yakın bir yerde yer alır.streetViewControlOptionsalanı, bu denetim için kullanılacakStreetViewControlOptionsdeğerini de belirtir.rotateControl, 3D görüntülerin yönünü kontrol etmek için bir döndürme denetiminin görünümünü etkinleştirir/devre dışı bırakır. Varsayılan olarak, kontrolün varlığı, geçerli yakınlaştırma ve konumda verilen harita türü için 3D görüntülerin olup olmamasına göre belirlenir. KullanılacakRotateControlOptions'ı belirtmek için haritanınrotateControlOptionsayarını yaparak kontrolün davranışını değiştirebilirsiniz. Kontrol yalnızca 3D temel haritalarda görünür.scaleControl, harita ölçeği sağlayan ölçek kontrolünü etkinleştirir/devre dışı bırakır. Bu kontrol varsayılan olarak görünmez. Etkinleştirildiğinde her zaman haritanın sağ alt köşesinde görünür. Ayrıca,scaleControlOptionsbu denetim için kullanılacakScaleControlOptionsdeğerini de belirtir.fullscreenControl, haritayı tam ekran modunda açan kontrolü etkinleştirir/devre dışı bırakır. Bu kontrol, masaüstü ve Android cihazlarda varsayılan olarak etkindir. Etkinleştirildiğinde denetim, haritanın sağ üst kısmına yakın bir yerde görünür. Ayrıca,fullscreenControlOptionsbu denetim için kullanılacakFullscreenControlOptionsdeğerini de belirtir.
Başlangıçta devre dışı bıraktığınız kontroller için seçenekler belirleyebileceğinizi unutmayın.
Kontrol Konumlandırma
Kontrol seçeneklerinin çoğunda, kontrolün haritada nereye yerleştirileceğini belirten bir position özelliği (ControlPosition türünde) bulunur. Bu kontrollerin konumlandırılması mutlak değildir. Bunun yerine, API, kontrolleri mevcut harita öğelerinin veya diğer kontrollerin etrafına yerleştirerek belirli kısıtlamalar (ör. harita boyutu) dahilinde akıllıca düzenler.
İki tür kontrol konumu vardır: eski ve mantıksal. Hem soldan sağa (LTR) hem de sağdan sola (RTL) düzen bağlamlarını otomatik olarak destekleyebilmek için mantıksal değerlerin kullanılması önerilir. Referans kılavuzuna bakın.
Aşağıdaki tablolarda, soldan sağa ve sağdan sola bağlamlarda desteklenen kontrol konumları gösterilmektedir.
Soldan sağa konumlar
| Konum (soldan sağa bağlam) | Mantıksal Sabit (Önerilen) | Eski Sabit |
|---|---|---|
| Sol Üst | BLOCK_START_INLINE_START |
TOP_LEFT |
| Top Center | BLOCK_START_INLINE_CENTER |
TOP_CENTER |
| Sağ üst | BLOCK_START_INLINE_END |
TOP_RIGHT |
| Sol Üst | INLINE_START_BLOCK_START |
LEFT_TOP |
| Sol Orta (Left Center) | INLINE_START_BLOCK_CENTER |
LEFT_CENTER |
| Sol Alt | INLINE_START_BLOCK_END |
LEFT_BOTTOM |
| Sağ Üst | INLINE_END_BLOCK_START |
RIGHT_TOP |
| Sağ Orta (Right Center) | INLINE_END_BLOCK_CENTER |
RIGHT_CENTER |
| Sağ Alt | INLINE_END_BLOCK_END |
RIGHT_BOTTOM |
| Sol Alt | BLOCK_END_INLINE_START |
BOTTOM_LEFT |
| Bottom Center (Alt Orta) | BLOCK_END_INLINE_CENTER |
BOTTOM_CENTER |
| Sağ Alt | BLOCK_END_INLINE_END |
BOTTOM_RIGHT |
RTL konumları
| Konum (sağdan sola bağlam) | Mantıksal Sabit (Önerilen) | Eski Sabit |
|---|---|---|
| Sağ üst | BLOCK_START_INLINE_START |
TOP_RIGHT |
| Top Center | BLOCK_START_INLINE_CENTER |
TOP_CENTER |
| Sol Üst | BLOCK_START_INLINE_END |
TOP_LEFT |
| Sağ Üst | INLINE_START_BLOCK_START |
RIGHT_TOP |
| Sağ Orta (Right Center) | INLINE_START_BLOCK_CENTER |
RIGHT_CENTER |
| Sağ Alt | INLINE_START_BLOCK_END |
RIGHT_BOTTOM |
| Sol Üst | INLINE_END_BLOCK_START |
LEFT_TOP |
| Sol Orta (Left Center) | INLINE_END_BLOCK_CENTER |
LEFT_CENTER |
| Sol Alt | INLINE_END_BLOCK_END |
LEFT_BOTTOM |
| Sağ Alt | BLOCK_END_INLINE_START |
BOTTOM_RIGHT |
| Bottom Center (Alt Orta) | BLOCK_END_INLINE_CENTER |
BOTTOM_CENTER |
| Sol Alt | BLOCK_END_INLINE_END |
BOTTOM_LEFT |
Haritayı soldan sağa ve sağdan sola modları arasında değiştirmek için etiketleri tıklayın.
Bu konumların, yerleşimlerini değiştiremeyeceğiniz kullanıcı arayüzü öğelerinin (ör. telif hakları ve Google logosu) konumlarıyla çakışabileceğini unutmayın. Bu durumlarda kontroller, her konum için belirtilen mantığa göre yerleştirilir ve belirtilen konuma mümkün olduğunca yakın görünür. API, kontrolleri akıllıca düzenlemeye çalışsa da karmaşık düzenler nedeniyle kontrollerin çakışmayacağı garanti edilemez.
Aşağıdaki örnekte, tüm kontrollerin farklı konumlarda etkinleştirildiği temel bir harita gösterilmektedir.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 12, center: { lat: -28.643387, lng: 153.612224 }, mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.TOP_CENTER, }, zoomControl: true, zoomControlOptions: { position: google.maps.ControlPosition.LEFT_CENTER, }, scaleControl: true, streetViewControl: true, streetViewControlOptions: { position: google.maps.ControlPosition.LEFT_TOP, }, fullscreenControl: true, } ); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 12, center: { lat: -28.643387, lng: 153.612224 }, mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.TOP_CENTER, }, zoomControl: true, zoomControlOptions: { position: google.maps.ControlPosition.LEFT_CENTER, }, scaleControl: true, streetViewControl: true, streetViewControlOptions: { position: google.maps.ControlPosition.LEFT_TOP, }, fullscreenControl: true, }); } window.initMap = initMap;
Örneği deneyin
Özel kontroller
Mevcut API kontrollerinin stilini ve konumunu değiştirmenin yanı sıra kullanıcıyla etkileşimi yönetmek için kendi kontrollerinizi de oluşturabilirsiniz. Denetimler, temel haritayla birlikte hareket eden yer paylaşımlarının aksine, haritanın üzerinde mutlak konumlarda yüzen sabit widget'lardır. Daha
temel olarak kontrol, haritada mutlak bir konuma sahip olan, kullanıcıya bazı kullanıcı arayüzleri gösteren ve genellikle bir etkinlik işleyicisi aracılığıyla kullanıcı veya harita ile etkileşimi yöneten bir <div> öğesidir.
Kendi özel kontrolünüzü oluşturmak için birkaç kurala uymanız gerekir. Ancak aşağıdaki yönergeler en iyi uygulama olarak kabul edilebilir:
- Gösterilecek kontrol öğeleri için uygun CSS'yi tanımlayın.
- Kullanıcı veya haritayla etkileşimi, harita özelliği değişiklikleri ya da kullanıcı etkinlikleri (örneğin,
'click'etkinlikleri) için etkinlik işleyiciler aracılığıyla yönetin. - Denetimi tutacak bir
<div>öğesi oluşturun ve bu öğeyiMapöğesinincontrolsözelliğine ekleyin.
Bu endişelerin her biri aşağıda ele alınmıştır.
Özel Kontroller Çizme
Kontrolünüzü nasıl çizeceğiniz size bağlıdır. Genel olarak, kontrolünüzü tek bir birim olarak kullanabilmek için tüm kontrol sunumunuzu tek bir <div> öğesine yerleştirmenizi öneririz. Bu tasarım kalıbını, aşağıda gösterilen örneklerde kullanacağız.
Çekici kontroller tasarlamak için CSS ve DOM yapısı hakkında bilgi sahibi olmanız gerekir. Aşağıdaki kod örneklerinde hem bildirim temelli HTML hem de programatik yöntemler kullanılarak özel denetim ekleme gösterilmektedir.
Bildirimli CSS
Aşağıdaki CSS stilleri, varsayılan kontrollerle tutarlı bir görünüm sağlar. Bu stilleri aşağıdaki örneklerin her ikisinde de kullanın:
.streetview-toggle-button { align-items: center; background: white; border: none; border-radius: 2px; box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3); color: rgb(86, 86, 86); cursor: pointer; display: flex; font-family: Roboto, Arial, sans-serif; font-size: 18px; font-weight: 400; height: 40px; justify-content: center; margin: 10px 0; padding: 0 17px; } .streetview-toggle-button:hover { background: #f4f4f4; color: #000; }
Bildirimsel HTML
Bu kod snippet'lerinde, özel kontrolün bildirimli olarak nasıl oluşturulacağı gösterilmektedir.
HTML'de, kontrolü konumlandırmak için container kimliğine sahip bir DIV kullanılır. Bu, gmp-map öğesinin içine yerleştirilir ve düğme DIV'e eklenir. Kontrolü haritanın sol üst köşesine yerleştirmek için slot özelliği control-inline-start-block-start olarak ayarlanır.
<gmp-map
center="41.027748173921374, -92.41852445367961"
zoom="13"
map-id="DEMO_MAP_ID">
<div id="container" slot="control-inline-start-block-start">
<input type="button"
id="streetview-toggle-button"
class="button"
value="Click this button" />
</div>
</gmp-map>JavaScript'te DIV ve düğmeyi bulmak için getElementById() kullanılır, düğmeye bir etkinlik işleyici eklenir ve düğme DIV'ye eklenir.
// Create a DIV to attach the control UI to the Map. const container = document.getElementById("container"); // Get the control button from the HTML page. const controlButton = document.getElementById("streetview-toggle-button"); // Add a click event listener. controlButton.addEventListener("click", () => { window.alert("You clicked the button!"); }); // Add the control to the DIV. container.append(controlButton);
Programatik JavaScript
Bu kod snippet'i, programatik olarak düğme kontrolü oluşturmayı gösterir. CSS stilleri yukarıda tanımlanmıştır.
// Create a DIV to attach the control UI to the Map. const container = document.getElementById("container"); // Position the control in the top left corner of the map. container.slot = "control-block-start-inline-start"; // Create the control. const controlButton = document.createElement("button"); controlButton.classList.add("streetview-toggle-button"); controlButton.textContent = "Click this button"; controlButton.type = "button"; // Add a click event listener. controlButton.addEventListener("click", () => { window.alert("You clicked the button!"); }); // Add the control to the DIV. container.append(controlButton);
Özel kontrollerden gelen etkinlikleri işleme
Bir kontrolün faydalı olması için gerçekten bir işe yaraması gerekir. Kontrolün ne yapacağı size bağlıdır. Kontrol, kullanıcı girişine veya Map durumundaki değişikliklere yanıt verebilir.
Kullanıcı girişine yanıt vermek için desteklenen DOM etkinliklerini işleyen addEventListener() öğesini kullanın. Aşağıdaki kod snippet'i, tarayıcının 'click' etkinliği için bir işleyici ekler. Bu etkinliğin haritadan değil, DOM'dan alındığını unutmayın.
// Setup the click event listener: set the map to center on Chicago var chicago = {lat: 41.850, lng: -87.650}; controlButton.addEventListener('click', () => { map.setCenter(chicago); });
Özel Kontrolleri Erişilebilir Hale Getirme
Kontrollerin klavye etkinliklerini almasını ve ekran okuyuculara doğru şekilde görünmesini sağlamak için:
- Düğmeler, form öğeleri ve etiketler için her zaman yerel HTML öğelerini kullanın. Yalnızca yerel kontrolleri barındırmak için kapsayıcı olarak bir DIV öğesi kullanın. DIV'leri hiçbir zaman etkileşimli kullanıcı arayüzü öğesi olarak yeniden kullanmayın.
- Bir kullanıcı arayüzü öğesi hakkında bilgi sağlamak için uygun yerlerde
labelöğesini,titleözelliğini veyaaria-labelözelliğini kullanın.
Özel kontrolleri konumlandırma
Gerekli kontrol konumunu belirterek özel kontrolleri konumlandırmak için slot özelliğini kullanın.
Bu konumlar hakkında bilgi edinmek için yukarıdaki Kontrol Konumlandırma bölümüne bakın.
Her ControlPosition, o konumda gösterilen kontrollerin MVCArray değerini depolar. Sonuç olarak, konuma kontroller eklendiğinde veya kaldırıldığında API, kontrolleri buna göre günceller.
Aşağıdaki kod, yeni bir özel kontrol oluşturur (yapılandırıcı gösterilmez) ve bunu BLOCK_START_INLINE_END konumunda (LTR bağlamında sağ üst) haritaya ekler.
// Create a DIV to attach the control UI to the Map.
const centerControlDiv = document.createElement("div");
// Create the control. This code calls a function that
// creates a new instance of a button control.
const centerControl = createCenterControl(map);
// Append the control to the DIV.
centerControlDiv.appendChild(centerControl);
// Push the control to the BLOCK_START_INLINE_END position.
innerMap.controls[google.maps.ControlPosition.BLOCK_START_INLINE_END].push(centerControlDiv);Özel bir kontrolün konumunu bildirimli olarak ayarlamak için HTML'de slot özelliğini ayarlayın:
<gmp-map center="30.72851568848909, -81.54675994068873" zoom="12">
<div slot="control-block-start-inline-end">
<!-- Control HTML -->
</div>
</gmp-map>Özel denetim örneği
Aşağıdaki kontrol basittir (pek kullanışlı olmasa da) ve yukarıda gösterilen kalıpları birleştirir. Bu kontrol, haritayı belirli bir varsayılan konumda ortalayarak DOM 'click' etkinliklerine yanıt verir:
TypeScript
let map: google.maps.Map; const chicago = { lat: 41.85, lng: -87.65 }; /** * Creates a control that recenters the map on Chicago. */ function createCenterControl(map) { const controlButton = document.createElement('button'); // Set CSS for the control. controlButton.style.backgroundColor = '#fff'; controlButton.style.border = '2px solid #fff'; controlButton.style.borderRadius = '3px'; controlButton.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)'; controlButton.style.color = 'rgb(25,25,25)'; controlButton.style.cursor = 'pointer'; controlButton.style.fontFamily = 'Roboto,Arial,sans-serif'; controlButton.style.fontSize = '16px'; controlButton.style.lineHeight = '38px'; controlButton.style.margin = '8px 0 22px'; controlButton.style.padding = '0 5px'; controlButton.style.textAlign = 'center'; controlButton.textContent = 'Center Map'; controlButton.title = 'Click to recenter the map'; controlButton.type = 'button'; // Setup the click event listeners: simply set the map to Chicago. controlButton.addEventListener('click', () => { map.setCenter(chicago); }); return controlButton; } function initMap() { map = new google.maps.Map(document.getElementById('map') as HTMLElement, { zoom: 12, center: chicago, }); // Create the DIV to hold the control. const centerControlDiv = document.createElement('div'); // Create the control. const centerControl = createCenterControl(map); // Append the control to the DIV. centerControlDiv.appendChild(centerControl); map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
let map; const chicago = { lat: 41.85, lng: -87.65 }; /** * Creates a control that recenters the map on Chicago. */ function createCenterControl(map) { const controlButton = document.createElement("button"); // Set CSS for the control. controlButton.style.backgroundColor = "#fff"; controlButton.style.border = "2px solid #fff"; controlButton.style.borderRadius = "3px"; controlButton.style.boxShadow = "0 2px 6px rgba(0,0,0,.3)"; controlButton.style.color = "rgb(25,25,25)"; controlButton.style.cursor = "pointer"; controlButton.style.fontFamily = "Roboto,Arial,sans-serif"; controlButton.style.fontSize = "16px"; controlButton.style.lineHeight = "38px"; controlButton.style.margin = "8px 0 22px"; controlButton.style.padding = "0 5px"; controlButton.style.textAlign = "center"; controlButton.textContent = "Center Map"; controlButton.title = "Click to recenter the map"; controlButton.type = "button"; // Setup the click event listeners: simply set the map to Chicago. controlButton.addEventListener("click", () => { map.setCenter(chicago); }); return controlButton; } function initMap() { map = new google.maps.Map(document.getElementById("map"), { zoom: 12, center: chicago, }); // Create the DIV to hold the control. const centerControlDiv = document.createElement("div"); // Create the control. const centerControl = createCenterControl(map); // Append the control to the DIV. centerControlDiv.appendChild(centerControl); map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv); } window.initMap = initMap;
Örneği deneyin
Kontrollere Durum Ekleme
Kontroller durumu da saklayabilir. Aşağıdaki örnek, daha önce gösterilene benzer ancak kontrol, yeni bir ev konumu gösterecek şekilde ayarlanmasını sağlayan ek bir "Evi Ayarla" düğmesi içerir. Bu durumu depolamak ve bu durum için alıcılar ve ayarlayıcılar sağlamak üzere kontrol içinde bir home_ özelliği oluşturarak bunu yaparız.
TypeScript
let map: google.maps.Map; const chicago: google.maps.LatLngLiteral = { lat: 41.85, lng: -87.65 }; /** * The CenterControl adds a control to the map that recenters the map on * Chicago. */ class CenterControl { private map_: google.maps.Map; private center_: google.maps.LatLng; constructor( controlDiv: HTMLElement, map: google.maps.Map, center: google.maps.LatLngLiteral ) { this.map_ = map; // Set the center property upon construction this.center_ = new google.maps.LatLng(center); controlDiv.style.clear = "both"; // Set CSS for the control border const goCenterUI = document.createElement("button"); goCenterUI.id = "goCenterUI"; goCenterUI.title = "Click to recenter the map"; controlDiv.appendChild(goCenterUI); // Set CSS for the control interior const goCenterText = document.createElement("div"); goCenterText.id = "goCenterText"; goCenterText.innerHTML = "Center Map"; goCenterUI.appendChild(goCenterText); // Set CSS for the setCenter control border const setCenterUI = document.createElement("button"); setCenterUI.id = "setCenterUI"; setCenterUI.title = "Click to change the center of the map"; controlDiv.appendChild(setCenterUI); // Set CSS for the control interior const 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", () => { const currentCenter = this.center_; this.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", () => { const newCenter = this.map_.getCenter()!; if (newCenter) { this.center_ = newCenter; } }); } } function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { zoom: 12, center: chicago, }); // Create the DIV to hold the control and call the CenterControl() // constructor passing in this DIV. const centerControlDiv = document.createElement("div"); const control = new CenterControl(centerControlDiv, map, chicago); // @ts-ignore centerControlDiv.index = 1; centerControlDiv.style.paddingTop = "10px"; map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
let map; const chicago = { lat: 41.85, lng: -87.65 }; /** * The CenterControl adds a control to the map that recenters the map on * Chicago. */ class CenterControl { map_; center_; constructor(controlDiv, map, center) { this.map_ = map; // Set the center property upon construction this.center_ = new google.maps.LatLng(center); controlDiv.style.clear = "both"; // Set CSS for the control border const goCenterUI = document.createElement("button"); goCenterUI.id = "goCenterUI"; goCenterUI.title = "Click to recenter the map"; controlDiv.appendChild(goCenterUI); // Set CSS for the control interior const goCenterText = document.createElement("div"); goCenterText.id = "goCenterText"; goCenterText.innerHTML = "Center Map"; goCenterUI.appendChild(goCenterText); // Set CSS for the setCenter control border const setCenterUI = document.createElement("button"); setCenterUI.id = "setCenterUI"; setCenterUI.title = "Click to change the center of the map"; controlDiv.appendChild(setCenterUI); // Set CSS for the control interior const 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", () => { const currentCenter = this.center_; this.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", () => { const newCenter = this.map_.getCenter(); if (newCenter) { this.center_ = newCenter; } }); } } 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. const centerControlDiv = document.createElement("div"); const control = new CenterControl(centerControlDiv, map, chicago); // @ts-ignore centerControlDiv.index = 1; centerControlDiv.style.paddingTop = "10px"; map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv); } window.initMap = initMap;