2016-08-03 30 views
1

マウスの中ボタンを押すと、1秒後にコンソールで "1秒後"と表示されます。それは大丈夫です、私が必要とするものです。しかし、マウスの中ボタン(mouseup listener)を離した場合、1秒の遅延を止めたいと思っています。しかし今は 'wait'関数が 'mouseup'を実行している間にリスナーは 'delay'変数をfalseに変更しません(1秒後のみ)。しかし、MBは私がそれを行うことができる方法はありますか?更新getTimeで動作する割り込み/割り込み関数の実行

function wait(ms){ 
    var start = new Date().getTime(); 
    var end = start; 
    while((end < start + ms) && delay == true) { 
    end = new Date().getTime(); 
    } 
} 

var delay = false; 

document.addEventListener("mousedown", function(e) { 
    if (e.button == 1) { // 1 - middle mouse button 
     delay = true; 
     wait(1000); // delay 1 sec 
     console.log("after 1 sec"); 
    } 
}); 

document.addEventListener("mouseup", function(e) { 
    if (e.button == 1) { 
     delay = false; 
    } 
}); 

を(それがのmouseup真ん中のボタンではなく、1秒に0.5秒遅れたときなど、「待機」関数を停止する):私はdocument.execCommand("copy");console.log("after 1 sec");を交換するつもりです 、我々はにコピーを遅らせることができますクリップボードsetTimeout() FUNCを使ってChromeブラウザでの1秒間の最大が、それはsetTimeout()とFirefoxで動作しますが、Firefoxの(許可される999ミリ秒の最大値)のためのwait(999); document.execCommand('copy');作品ではないでしょう

答えて

1

あなたの問題は、マウスダウンのリスナー関数は、さらに実行をブロックすることですそれが終わるまで。あなたの待機関数は、いわゆる "ビジー待機"を実装しています。特定の時間の後に関数を非同期に実行できるようにするには、setTimeout()を使用する必要があります。 setTimeout()からハンドルを取得し、マウスボタンを離すとタイムアウトを中止することができます。詳細については、https://developer.mozilla.org/en/docs/Web/API/WindowTimers/setTimeoutを参照してください。

+0

私は本当にしたいことを言及していたはずです。私は、 'console.log(" after 1 sec ");を' document.execCommand( "copy"); 'に置き換えようとしています。' setTimeout() 'funcですが、' setTimeout() 'でFirefoxでは動作しませんが、' wait(999); document.execCommand( 'copy'); 'はFirefox(最大999ミリ秒)で動作します。 – user25

+0

setTimeout()からクリップボードをコピーできない場合は、解決策はありません。ビジー待機は常にマウスアップイベントをブロックします。 –