旧版Google Maps标记点鼠标悬停改色无效,如何设置标记颜色?
旧版Google Maps自定义标记点鼠标悬停改色无效的解决方案
问题出在你直接给marker设置fillColor——这个属性属于marker的icon配置对象,并非marker本身的顶层属性,所以marker.set("fillColor", ...)不会生效。
要正确修改自定义路径标记的填充色,需要先复制当前的icon配置对象,修改其中的fillColor属性,再通过setIcon()方法重新赋值给marker。以下是修正后的完整代码:
var marker = createMarker(marker_id, point, course_name, phone, holes, ninefee, eightteenfee, ninefee_weekend, eightteenfee_weekend, ninefee_cart, eightteenfee_cart, teetimes, notes, map); function createMarker(marker_id, point, course_name, phone, holes, ninefee, eightteenfee, ninefee_weekend, eightteenfee_weekend, ninefee_cart, eightteenfee_cart, teetimes, notes, map) { var marker = new google.maps.Marker({ id: marker_id, position: point, map: map, icon: { path: "M128 0L416 128 175.5 234.9c.4 1.6 .5 3.3 .5 5.1v84.8c25.2-3.1 52.1-4.8 80-4.8c141.4 0 256 43 256 96s-114.6 96-256 96S0 469 0 416c0-35.5 51.5-66.6 128-83.2V256 240 0zm96 448c35.3 0 64-14.3 64-32s-28.7-32-64-32s-64 14.3-64 32s28.7 32 64 32z", scale: 0.05, strokeWeight: 0.2, strokeColor: '#000000', strokeOpacity: 1, fillColor: '#08755F', fillOpacity: 1 } }); // 缓存原始填充色,用于鼠标移出时恢复 var originalFillColor = marker.icon.fillColor; // 鼠标悬停修改颜色 google.maps.event.addListener(marker, "mouseover", function() { // 浅拷贝当前icon配置,避免直接修改原对象 var updatedIcon = Object.assign({}, marker.icon); updatedIcon.fillColor = "#000000"; marker.setIcon(updatedIcon); }); // 可选:鼠标移出恢复原颜色 google.maps.event.addListener(marker, "mouseout", function() { var updatedIcon = Object.assign({}, marker.icon); updatedIcon.fillColor = originalFillColor; marker.setIcon(updatedIcon); }); return marker; }
关键说明:
- 必须通过
setIcon()方法更新marker的图标配置,不能直接修改marker.icon的属性(旧版Google Maps不会监听该对象的内部变化)。 - 使用
Object.assign({}, marker.icon)做浅拷贝是为了保留原图标其他属性(路径、缩放、描边等),只修改填充色。如果你的环境支持ES6扩展运算符,也可以用var updatedIcon = {...marker.icon}替代。
内容的提问来源于stack exchange,提问作者LauraNMS
相关产品推荐
相关产品推荐

