6

是否可以在 Google Map API 中挂钩鼠标滚轮事件?无需详细说明,我需要鼠标滚轮像在 Google 地图中通常那样进行缩放,但我还需要附加到鼠标滚轮事件以用于其他目的。

但是,每当我在 MapOptions 中将滚轮设置为 true 时,Google Map API 都会占用所有鼠标滚轮事件并拒绝共享它们(您不觉得非常以自我为中心吗?)!

听像 zoom_changed 这样的谷歌地图事件是行不通的,因为如果地图处于最小或最大缩放级别,它们不会触发,这是我需要的。更具体地说,我需要知道用户是否在已经处于最大缩放级别时尝试拉近。

这“感觉”是可以解决的,但我的直觉并不总是正确的:-)

有任何想法吗?

4

1 回答 1

8

您可以通过使用普通的 DOM 事件侦听器来做到这一点。唯一的技巧是您必须使用捕获事件侦听器,以便在 Maps API 之前看到事件。这是因为 Maps API 似乎在调用event.stopPropagation(),所以普通的事件侦听器不会看到该事件。通过使用捕获侦听器,您首先会看到它。

这是一个示例,假设您有一个#map_canvas用于地图的#logDIV 和一个用于事件日志的 DIV:

function initialize() {
    var $map = $('#map_canvas');
    var latLng = new google.maps.LatLng( 40.708762, -74.006731 );

    var map = new google.maps.Map( $map[0], {
        zoom: 15,
        center: latLng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    function wheelEvent( event ) {
        $('#log').append( '<div>wheel!</div>' );
    }

    $map[0].addEventListener( 'mousewheel', wheelEvent, true );
    $map[0].addEventListener( 'DOMMouseScroll', wheelEvent, true );
};

$( initialize );

请注意,该代码同时侦听DOMMouseScrollFirefox 的mousewheel事件和其他浏览器的事件。您需要注意event这两个事件的对象差异。

这是小提琴

于 2013-09-17T22:37:19.333 回答