Google地球API:鼠标悬停事件似乎在mousedown时被mousemove阻止

时间:2013-09-28 12:33:34

标签: javascript-events google-earth google-earth-plugin

我正在制作一个页面,在Google地球的某个区域上放置一个白色方形多边形网格。当您单击一个时,它会将颜色更改为棕色,再次单击会将其更改为白色。当你mousedown和mousemove时,我试图得到它,无论你鼠标悬停的多边形是什么。以下是我设置事件监听器的方法:

google.earth.addEventListener(ge.getGlobe(), 'mousedown', function(event) {

        var placemark = event.getTarget();

        if (placemark.getType() == 'KmlPlacemark' &&
                placemark.getGeometry().getType() == 'KmlPolygon') {
                event.preventDefault();
                event.stopPropagation();
                mbutton = true;
                console.log(mbutton);

                var lcolor = placemark.getStyleSelector().getLineStyle().getColor();
                var pcolor = placemark.getStyleSelector().getPolyStyle().getColor();

                if ( lcolor.get() == "ffffffff") {
                        lcolor.set('ff00008B');
                        pcolor.set('ff00008B');
                } else {
                        lcolor.set('ffffffff');
                        pcolor.set('ffffffff');
                }
        } 
});

for ( var i = 0; i < placemarks.length; i++ ) {
        google.earth.addEventListener(placemarks[i], 'mouseover', function(event) {
                if (mbutton) {
                        console.log('over' + event.getTarget().getId());

                        $(placemarks[i]).trigger('mousedown');
                } else {console.log('not: ' + event.getTarget().getId())}
        });
}

google.earth.addEventListener(ge.getGlobe(), 'mousemove', function(event) {
        if (mbutton) {
                console.log(event.getTarget().getId() + ' : ' + event.getTarget().getType());
                event.preventDefault();
                event.stopPropagation();

        }
});

google.earth.addEventListener(ge.getGlobe(), 'mouseup', function(event) {
        if (mbutton) {
                mbutton = false;
                console.log(mbutton);
        }
});

问题在于它看起来像用户mousedowns将成为mousemove将看到的唯一多边形的任何多边形,并且鼠标悬停根本不会触发,除非用户鼠标悬停在多边形上,就好像在鼠标的瞬间按钮没有下来鼠标悬停有机会开火。以下是Chrome中事件监听器的调试信息输出:

1: true createRaster.js:307
2: 1 : KmlPlacemark createRaster.js:338
3: 1 : KmlPlacemark createRaster.js:338
4: [truncated for brevity]
5: 1 : KmlPlacemark createRaster.js:338
6: over2 createRaster.js:329
7: false 

这是来自第一个多边形(第1行)的mousedown和moseovering到第二个(第2-6行)和mousupping(第7行)。鼠标移动的整个时间都停留在用户最初点击的目标上。当鼠标按下鼠标时,在mouseup事件触发mouseover事件之前的瞬间。

鼠标停止事件是否应该触发鼠标按钮是否已关闭?我的代码中是否存在阻止此事件触发的内容?

1 个答案:

答案 0 :(得分:0)

这样的事情:

var clicking = $(window).on("mousedown", function (e) {
    return true;
    e.preventDefault();
});

$(target).on("mouseover", function () {
    while (clicking == true) {
        doTheThing();
    }
});