Corresponda elementos de dados a eventos mousemove e click e use-os para mudar a aparência de um elemento com base na interação do usuário.
Ativar eventos da camada do conjunto de dados
Siga estas etapas para ativar eventos em uma camada de conjunto de dados:
Registre uma camada de conjunto de dados para notificações de evento chamando a função
addListener()na camada para cada evento que você quer registrar. Neste exemplo, o mapa também recebe um listener.TypeScript
datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = applyStyle; datasetLayer.addListener('click', handleClick); datasetLayer.addListener('mousemove', handleMouseMove); // Map event listener. innerMap.addListener('mousemove', () => { // If the map gets a mousemove, that means there are no feature layers // with listeners registered under the mouse, so we clear the last // interacted feature ids. if (lastInteractedFeatureIds?.length) { lastInteractedFeatureIds = []; datasetLayer.style = applyStyle; } });
JavaScript
datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = applyStyle; datasetLayer.addListener('click', handleClick); datasetLayer.addListener('mousemove', handleMouseMove); // Map event listener. innerMap.addListener('mousemove', () => { // If the map gets a mousemove, that means there are no feature layers // with listeners registered under the mouse, so we clear the last // interacted feature ids. if (lastInteractedFeatureIds?.length) { lastInteractedFeatureIds = []; datasetLayer.style = applyStyle; } });
Adicione o código do manipulador de eventos para estilizar o elemento selecionado com base no tipo de interação.
TypeScript
// Note, 'globalid' is an attribute in this Dataset. function handleClick(event: google.maps.FeatureMouseEvent) { if (event.features) { lastClickedFeatureIds = event.features.map( (f) => (f as google.maps.DatasetFeature).datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } function handleMouseMove(event: google.maps.FeatureMouseEvent) { if (event.features) { lastInteractedFeatureIds = event.features.map( (f) => (f as google.maps.DatasetFeature).datasetAttributes.globalid ); } datasetLayer.style = applyStyle; }
JavaScript
// Note, 'globalid' is an attribute in this Dataset. function handleClick(event) { if (event.features) { lastClickedFeatureIds = event.features.map( (f) => f.datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } function handleMouseMove(event) { if (event.features) { lastInteractedFeatureIds = event.features.map( (f) => f.datasetAttributes.globalid ); } datasetLayer.style = applyStyle; }
Use uma função de estilo de elemento para aplicar estilos. A função de estilo de elemento mostrado aqui aplica condicionalmente o estilo com base no tipo de interação. Neste exemplo, são definidos três estilos: um para aplicar o negrito na borda em
mousemove, outro para mudar o plano de fundo emclicke um estilo padrão.TypeScript
const styleDefault = { strokeColor: 'green', strokeWeight: 2.0, strokeOpacity: 1.0, fillColor: 'green', fillOpacity: 0.3, }; const styleClicked = { ...styleDefault, strokeColor: 'blue', fillColor: 'blue', fillOpacity: 0.5, }; const styleMouseMove = { ...styleDefault, strokeWeight: 4.0, }; function applyStyle(params: google.maps.FeatureStyleFunctionOptions) { const datasetFeature = params.feature; // Note, 'globalid' is an attribute in this dataset. if ( lastClickedFeatureIds.includes( (datasetFeature as google.maps.DatasetFeature).datasetAttributes .globalid ) ) { return styleClicked; } if ( lastInteractedFeatureIds.includes( (datasetFeature as google.maps.DatasetFeature).datasetAttributes .globalid ) ) { return styleMouseMove; } return styleDefault; }
JavaScript
const styleDefault = { strokeColor: 'green', strokeWeight: 2.0, strokeOpacity: 1.0, fillColor: 'green', fillOpacity: 0.3, }; const styleClicked = { ...styleDefault, strokeColor: 'blue', fillColor: 'blue', fillOpacity: 0.5, }; const styleMouseMove = { ...styleDefault, strokeWeight: 4.0, }; function applyStyle(params) { const datasetFeature = params.feature; // Note, 'globalid' is an attribute in this dataset. if ( lastClickedFeatureIds.includes( datasetFeature.datasetAttributes.globalid ) ) { return styleClicked; } if ( lastInteractedFeatureIds.includes( datasetFeature.datasetAttributes.globalid ) ) { return styleMouseMove; } return styleDefault; }
Exemplo de código completo
TypeScript
const mapElement = document.querySelector('gmp-map')!; let innerMap: google.maps.Map; let lastInteractedFeatureIds: string[] = []; let lastClickedFeatureIds: string[] = []; let datasetLayer: google.maps.FeatureLayer; // Note, 'globalid' is an attribute in this Dataset. function handleClick(event: google.maps.FeatureMouseEvent) { if (event.features) { lastClickedFeatureIds = event.features.map( (f) => (f as google.maps.DatasetFeature).datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } function handleMouseMove(event: google.maps.FeatureMouseEvent) { if (event.features) { lastInteractedFeatureIds = event.features.map( (f) => (f as google.maps.DatasetFeature).datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } async function init() { // Request needed libraries. await google.maps.importLibrary('maps'); // Get the inner map. innerMap = mapElement.innerMap; // Dataset ID for NYC park data. const datasetId = 'a75dd002-ad20-4fe6-af60-27cd2ed636b4'; datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = applyStyle; datasetLayer.addListener('click', handleClick); datasetLayer.addListener('mousemove', handleMouseMove); // Map event listener. innerMap.addListener('mousemove', () => { // If the map gets a mousemove, that means there are no feature layers // with listeners registered under the mouse, so we clear the last // interacted feature ids. if (lastInteractedFeatureIds?.length) { lastInteractedFeatureIds = []; datasetLayer.style = applyStyle; } }); } const styleDefault = { strokeColor: 'green', strokeWeight: 2.0, strokeOpacity: 1.0, fillColor: 'green', fillOpacity: 0.3, }; const styleClicked = { ...styleDefault, strokeColor: 'blue', fillColor: 'blue', fillOpacity: 0.5, }; const styleMouseMove = { ...styleDefault, strokeWeight: 4.0, }; function applyStyle(params: google.maps.FeatureStyleFunctionOptions) { const datasetFeature = params.feature; // Note, 'globalid' is an attribute in this dataset. if ( lastClickedFeatureIds.includes( (datasetFeature as google.maps.DatasetFeature).datasetAttributes .globalid ) ) { return styleClicked; } if ( lastInteractedFeatureIds.includes( (datasetFeature as google.maps.DatasetFeature).datasetAttributes .globalid ) ) { return styleMouseMove; } return styleDefault; } void init();
JavaScript
const mapElement = document.querySelector('gmp-map'); let innerMap; let lastInteractedFeatureIds = []; let lastClickedFeatureIds = []; let datasetLayer; // Note, 'globalid' is an attribute in this Dataset. function handleClick(event) { if (event.features) { lastClickedFeatureIds = event.features.map( (f) => f.datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } function handleMouseMove(event) { if (event.features) { lastInteractedFeatureIds = event.features.map( (f) => f.datasetAttributes.globalid ); } datasetLayer.style = applyStyle; } async function init() { // Request needed libraries. await google.maps.importLibrary('maps'); // Get the inner map. innerMap = mapElement.innerMap; // Dataset ID for NYC park data. const datasetId = 'a75dd002-ad20-4fe6-af60-27cd2ed636b4'; datasetLayer = innerMap.getDatasetFeatureLayer(datasetId); datasetLayer.style = applyStyle; datasetLayer.addListener('click', handleClick); datasetLayer.addListener('mousemove', handleMouseMove); // Map event listener. innerMap.addListener('mousemove', () => { // If the map gets a mousemove, that means there are no feature layers // with listeners registered under the mouse, so we clear the last // interacted feature ids. if (lastInteractedFeatureIds?.length) { lastInteractedFeatureIds = []; datasetLayer.style = applyStyle; } }); } const styleDefault = { strokeColor: 'green', strokeWeight: 2.0, strokeOpacity: 1.0, fillColor: 'green', fillOpacity: 0.3, }; const styleClicked = { ...styleDefault, strokeColor: 'blue', fillColor: 'blue', fillOpacity: 0.5, }; const styleMouseMove = { ...styleDefault, strokeWeight: 4.0, }; function applyStyle(params) { const datasetFeature = params.feature; // Note, 'globalid' is an attribute in this dataset. if ( lastClickedFeatureIds.includes( datasetFeature.datasetAttributes.globalid ) ) { return styleClicked; } if ( lastInteractedFeatureIds.includes( datasetFeature.datasetAttributes.globalid ) ) { return styleMouseMove; } return styleDefault; } void init();