Puoi rendere i segnaposto più accessibili attivando la gestione degli eventi di clic, aggiungendo testo descrittivo per gli screen reader e regolando la scala dei segnaposto.
- Quando un segnaposto è cliccabile, può rispondere all'input da tastiera e mouse.
- Il testo specificato nell'opzione del titolo è leggibile dagli screen reader e viene visualizzato quando un utente tiene il puntatore del mouse sopra l'indicatore.
- L'aumento delle dimensioni dei segnaposto riduce la precisione necessaria per interagire con essi su tutti i dispositivi, in particolare sui dispositivi touchscreen, e migliora l'accessibilità. I segnaposto predefiniti soddisfano lo standard di dimensioni minime WCAG AA ma per gli sviluppatori che mirano a rispettare lo standard di dimensioni target WCAG AAA le dimensioni dei segnaposto devono essere aumentate.
Consulta la personalizzazione di base degli indicatori per scoprire come modificare la scala degli indicatori, aggiungere testo del titolo e altro ancora.
L'esempio seguente mostra una mappa con cinque indicatori cliccabili e selezionabili che includono il testo del titolo e sono stati impostati su una scala di 1,5x:
JavaScript
async function initMap() { const { Map3DElement, Marker3DInteractiveElement, PopoverElement } = await google.maps.importLibrary('maps3d'); const { PinElement } = await google.maps.importLibrary('marker'); const map = new Map3DElement({ center: { lat: 34.8405, lng: -111.7909, altitude: 1322.7 }, range: 13279.5, tilt: 67.44, heading: 0.01, mode: 'SATELLITE', gestureHandling: 'COOPERATIVE', }); // Set LatLng and title text for the markers. The first marker (Boynton Pass) // receives the initial focus when tab is pressed. Use arrow keys to move // between markers; press tab again to cycle through the map controls. const tourStops = [ { position: { lat: 34.8791806, lng: -111.8265049 }, title: 'Boynton Pass', }, { position: { lat: 34.8559195, lng: -111.7988186 }, title: 'Airport Mesa', }, { position: { lat: 34.832149, lng: -111.7695277 }, title: 'Chapel of the Holy Cross', }, { position: { lat: 34.823736, lng: -111.8001857 }, title: 'Red Rock Crossing', }, { position: { lat: 34.800326, lng: -111.7665047 }, title: 'Bell Rock', }, ]; tourStops.forEach(({ position, title }, i) => { const pin = new PinElement({ glyphText: `${i + 1}`, scale: 1.5, glyphColor: '#FFFFFF', }); const popover = new PopoverElement(); const content = `${i + 1}. ${title}`; const header = document.createElement('span'); // Include the label for screen readers. header.ariaLabel = `This is marker ${i + 1}. ${title}`; header.slot = 'header'; popover.append(header); popover.append(content); const interactiveMarker = new Marker3DInteractiveElement({ // Include a title, used for accessibility text for use by screen readers. title, position, gmpPopoverTargetElement: popover, }); interactiveMarker.append(pin); map.append(interactiveMarker); map.append(popover); }); document.body.append(map); } initMap();
CSS
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ html, map { height: 100%; } body { height: 100%; margin: 0; padding: 0; }
HTML
<html>
<head>
<title>Map</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
</head>
<body>
<div id="map"></div>
<!-- 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", internalUsageAttributionIds: "gmp_git_jsapisamples_v1_3d-accessibility" });</script>
</body>
</html>Prova campione
Per navigare tra i segnaposto utilizzando la tastiera:
- Utilizza il tasto Tab per mettere a fuoco il primo segnaposto. Se sulla stessa mappa sono presenti più segnaposto, utilizza i tasti freccia per scorrere i segnaposto.
- Se l'indicatore è cliccabile, premi il tasto Invio per "fare clic". Se un segnaposto ha una finestra informativa, puoi aprirla facendo clic o premendo il tasto Invio o la barra spaziatrice. Quando la finestra informativa si chiude, il focus torna al segnaposto associato.
- Premi di nuovo il tasto Tab per continuare a spostarti tra gli altri controlli della mappa.
Per migliorare l'accessibilità:
- Imposta il testo descrittivo per un indicatore utilizzando l'opzione
Marker3DInteractiveElement.title. - Aggiungi contenuti allo slot
headerdiPopoverElement. - Aumenta la scala dei segnaposto utilizzando la proprietà
PinElement.scale.