我在数据库表中插入了一些坐标和一些关于它们的数据。我想在列表中显示信息,并在地图上将位置显示为标记。
如何将列表项与地图上的相应标记相关联。就像当我将鼠标悬停在列表中的某一行上时,显示该项目在地图上的位置的标记会反弹或改变颜色,反之亦然;我的意思是将鼠标悬停在标记上,突出显示描述该标记的行。
我有类似Homestay搜索结果的内容
目前我正在使用syncfusion地图和转发器来生成列表,但如果你可以建议我一个更好的选择,我可以改变它
答案 0 :(得分:0)
我不熟悉syncfusion,但从概念上讲,我认为您要做的是在标记和列表项之间建立关系。
这是一个非常通用的解决方案,您可以(希望)修改以适应您正在做的事情:
const locations = Array.from(document.querySelectorAll('.map-location'));
/**
* Gets the location ID from the DOM element's data-location-id
* this is how we have chosen to associate markers with details
*/
function getElemLocationID(elem) {
return elem.getAttribute('data-location-id');
}
/**
* Returns an array containing a marker and details element,
* based on their shared locationID
*/
function getLocationElementsFromID(locationID, locations) {
const linkedLocationElements = locations.filter((location) => {
let compareID = getElemLocationID(location);
return compareID === locationID;
});
return linkedLocationElements;
}
function handleMouseOver(elements) {
elements.map((elem) => elem.classList.add('highlighted'));
}
function handleMouseOut(elements) {
elements.map((elem) => elem.classList.remove('highlighted'));
}
/**
* Sets up the mouse events on the map-location elements
*/
function linkListToMarkers(locations) {
locations.map((location) => {
location.addEventListener('mouseover', (e) => {
const locationID = getElemLocationID(e.currentTarget);
const locationElements = getLocationElementsFromID(locationID, locations);
handleMouseOver(locationElements);
});
location.addEventListener('mouseout', (e) => {
const locationID = getElemLocationID(e.currentTarget);
const locationElements = getLocationElementsFromID(locationID, locations);
handleMouseOut(locationElements);
});
});
}
linkListToMarkers(locations);

.marker {
display: inline-block;
border: 3px solid #cccccc;
}
.marker.highlighted {
border: 3px solid magenta;
}
.details {
cursor: pointer;
margin: 0 0 8px;
}
.details.highlighted {
color: magenta;
}

<img src="http://i.stack.imgur.com/rU427.png" data-location-id="location-1" class="map-location marker" />
<img src="http://i.stack.imgur.com/rU427.png" data-location-id="location-2" class="map-location marker" />
<img src="http://i.stack.imgur.com/rU427.png" data-location-id="location-3" class="map-location marker" />
<img src="http://i.stack.imgur.com/rU427.png" data-location-id="location-4" class="map-location marker" />
<ul>
<li data-location-id="location-1" class="map-location details">Location 1</li>
<li data-location-id="location-2" class="map-location details">Location 2</li>
<li data-location-id="location-3" class="map-location details">Location 3</li>
<li data-location-id="location-4" class="map-location details">Location 4</li>
</ul>
&#13;