1

Google Earth の領域に白い正方形の多角形のグリッドを配置するページを作成しています。クリックすると色が茶色に変わり、もう一度クリックすると白に戻ります。私はそれを取得しようとしているので、マウスダウンとマウス移動すると、マウスオーバーしたポリゴンも茶色に変わります。イベントリスナーを設定する方法は次のとおりです。

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);
        }
});

問題は、ユーザーがマウスを押し下げたポリゴンが、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 行目) と 2 番目のポリゴンへの移動 (2 ~ 6 行目) とマウスアップ (7 行目) によるものです。mousemove が起動している間ずっと、ユーザーが最初にクリックしたターゲットにとどまります。ボタンがマウスアップされると、マウスアップ イベントが発生する数秒前にマウスオーバー イベントが発生します。

マウス ボタンが押されているかどうかに関係なく、mouseover イベントを発生させるべきではありませんか? コード内の何かがこのイベントの発生をブロックしていますか?

4

1 に答える 1

1

このようなもの:

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

$(target).on("mouseover", function () {
    while (clicking == true) {
        doTheThing();
    }
});
于 2013-09-28T16:41:02.490 に答える