如何将鼠标悬停事件添加到 Google 地图 v3 中的路线?

发布于 2025-01-08 18:28:37 字数 83 浏览 2 评论 0原文

我有一个谷歌地图,其中有几条路线是用 DirectionsRenderer 绘制的。我想通过鼠标悬停事件更改路线样式,但我不知道如何操作,可能吗? 谢谢

I have a Google maps with several routes painted with DirectionsRenderer. I want change the route style with the mouseover event, but I don't find how, is posible?
Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

莫言歌 2025-01-15 18:28:37

据我所知,没有办法将事件直接附加到由 DirectionsRenderer 绘制的折线。要实现此目的,您需要在顶部绘制自己的折线(因此是 zIndex),然后将 mouseover/mouseout 事件附加到该折线。

下面是一个示例,说明如何完成此操作,假设您只有一条路线:

var polylineOptions = new google.maps.Polyline({
    strokeColor: '#000000',
    strokeOpacity: 1.0,
    strokeWeight: 2
});

var polylineOptionsMouseOver = new google.maps.Polyline({
    strokeColor: '#ffffff',
    strokeOpacity: 1.0,
    strokeWeight: 10
});

google.maps.event.addListener(dirRenderer, 'directions_changed', function(event) {

    var path = dirRenderer.getDirections().routes[0].overview_path;
    var eventLine = new google.maps.Polyline({
        path: path,
        visible: true,
        strokeOpacity: 0,
        zIndex: 1000
    }); 
    eventLine.setMap(map);

    google.maps.event.addListener(eventLine, 'mouseover', function(event) {
        dirRenderer.setOptions({
            'polylineOptions':polylineOptionsMouseOver, 
            'preserveViewport': true
        });
        dirRenderer.setMap(map);
    });

    google.maps.event.addListener(eventLine, 'mouseout', function(event) {
        dirRenderer.setOptions({
            'polylineOptions':polylineOptions,
            'preserveViewport': true
        });
        dirRenderer.setMap(map);
    });

});

既然您说您有多个路线,那么您可能需要循环遍历 routes[] 数组并为每个路线执行一些操作。另外,我认为您无法设置特定路线的样式,因此您可能需要将每条路线保留在单独的 DirectionsRenderer 中。

As far as I know there's no way to attach events directly to the polyline drawn by the DirectionsRenderer. To accomplish this you'll instead need to draw your own polyline on top (hence the zIndex) and then attach mouseover/mouseout events to that.

Here's an example of how it's done, assuming you only have one route:

var polylineOptions = new google.maps.Polyline({
    strokeColor: '#000000',
    strokeOpacity: 1.0,
    strokeWeight: 2
});

var polylineOptionsMouseOver = new google.maps.Polyline({
    strokeColor: '#ffffff',
    strokeOpacity: 1.0,
    strokeWeight: 10
});

google.maps.event.addListener(dirRenderer, 'directions_changed', function(event) {

    var path = dirRenderer.getDirections().routes[0].overview_path;
    var eventLine = new google.maps.Polyline({
        path: path,
        visible: true,
        strokeOpacity: 0,
        zIndex: 1000
    }); 
    eventLine.setMap(map);

    google.maps.event.addListener(eventLine, 'mouseover', function(event) {
        dirRenderer.setOptions({
            'polylineOptions':polylineOptionsMouseOver, 
            'preserveViewport': true
        });
        dirRenderer.setMap(map);
    });

    google.maps.event.addListener(eventLine, 'mouseout', function(event) {
        dirRenderer.setOptions({
            'polylineOptions':polylineOptions,
            'preserveViewport': true
        });
        dirRenderer.setMap(map);
    });

});

Since you say you have multiple routes, you may need to loop through the routes[] array and do something for each route. Also, I don't think you can style a specific route, so you may need to keep each route in a separate DirectionsRenderer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文