3

私のフィドルでわかるように。または、次のコードで、イベントを発生させようとしています。ボックスの上にカーソルを置いてスペース バーをクリックすると、確認ウィンドウが表示されます。はいをクリックすると、ボックスが削除されます。

バグ/問題は、ボックスを削除してスペースバーをもう一度クリックすると、同じプロンプトが表示されることです。でリスニングをオフにすることでこれを解決したと思いましたrTwo.setListening(false); layer.drawHit();

とにかく、助けていただければ幸いです。ありがとう。

コード:

var stage = new Kinetic.Stage({
    container: 'container',
    width: 850,
    height: 400
});
var layer = new Kinetic.Layer();
var rTwo = new Kinetic.Rect({
    x: 0,
    y: 0,
    width: 100,
    height: 50,
    fill: 'blue',
    draggable: true,
});
layer.add(rTwo);
rTwo.on('mouseover', function() {
    document.onkeypress = function(e) {
        e = e || window.event;
        var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
        if (charCode == 32) {
            var b1 = confirm("Would you like to delete router 2?");
            if (b1 == true) {
                rTwo.hide();
                rLayer.draw();
                rTwo.setListening(false);
                rlayer.drawHit();
            } else if (b1 == false) {
                rLayer.draw();
            }
        }
    };
});
stage.add(layer);
4

1 に答える 1

1

http://jsfiddle.net/gSEeb/4/

ロジックは次のとおりです。マウスオーバー時に onkeypress 関数を登録します。これはキーの押下をチェックし、そのキーがスペースバーの場合はプロンプトを表示します。

マウスオーバー -> 登録機能

機能 -> キーの押下を確認 -> スペースバーですか? -> プロンプトを表示

これを見ると、マウスオーバーは機能を登録しているだけなので、マウスオーバーかどうかにかかわらずスペースバーをチェックします。基本的に、マウスが長方形内にあるかどうかを再確認する必要があります。

 rTwo.on('mouseover mousemove', function(){
      document.onkeypress = function(e) { 
           e = e || window.event;
           var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
           if (charCode == 32 && rTwo.intersects(stage.getUserPosition())) {
                var b1 = confirm("Would you like to delete router 2?");
                if (b1 == true){
                     rTwo.hide();
                     layer.drawHit();  // or whichever layer rTwo is in
                     layer.draw();
                     rTwo.setListening(false);
                }
                else if (b1 == false){
                     layer.draw();  // you don't really need to redraw this here as nothing is changed
                }
           }
      };
 });
于 2013-01-15T14:51:01.140 に答える