1、当页面结构复杂,具体原因不知道,主要会导致pac-container 搜索列表容器跑到body,不会显示在input下,解决方案有一个:手动强制修改
html
<div class="map_container" style="height:100%;">
<div class="input_box">
<input id="searchInput" ref="searchInput" v-model="searchKey" type="text" />
</div>
<div id="gmap" ref="gmap" style="height:100%;"></div>
<div id="infowindow-content">
<span id="place-name" class="title"></span><br />
<span id="place-address"></span>
</div>
</div>
javascript
mounted () {
var addressInputElement = document.querySelector('#searchInput');
addressInputElement.addEventListener('focus', function () {
var pacContainer = document.querySelector('.pac-container');
addressInputElement.parentNode.appendChild(pacContainer);
});
}
css
//scss语法
::v-deep .pac-container {
z-index: 9999999 !important;
top: 30px !important;
left: 0 !important;
}
以下是谷歌地图的搜索功能的js代码
javascript
const mapDiv = document.getElementById('gmap');
const map = new google.maps.Map(mapDiv, option);
let options = {
fields: ['ALL'],//搜索类型 :"formatted_address", "geometry", "name"
strictBounds: false,//严格模式
};
const input = document.getElementById('searchInput');
console.log(input, 'this.optioninputinput');
const autocomplete = new google.maps.places.Autocomplete(input, options);
console.log(autocomplete, ' this.autocomplete');
autocomplete.bindTo("bounds", map);
//设置搜索地址功能
const infowindow = new google.maps.InfoWindow();
const infowindowContent = document.getElementById('infowindow-content');
infowindow.setContent(infowindowContent);
const marker = new google.maps.Marker({
map: map,
anchorPoint: new google.maps.Point(0, -29),
});
autocomplete.addListener("place_changed", () => {
infowindow.close();
marker.setVisible(false);
const place = autocomplete.getPlace();
console.log('触发搜索组件', place);
if (!place.geometry || !place.geometry.location) {
window.alert("No details available for input: '" + place.name + "'");
return;
}
if (place.geometry.viewport) {
map.fitBounds(place.geometry.viewport);
} else {
map.setCenter(place.geometry.location);
map.setZoom(17);
}
marker.setPosition(place.geometry.location);
marker.setVisible(true);
infowindowContent.children["place-name"].textContent = place.name;
infowindowContent.children["place-address"].textContent = place.formatted_address;
infowindow.open(map, marker);
});