You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

旧版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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:52:45