2016-12-12 7 views
1

を働いていない:間隔が、私はそうのように設定された間隔使って50ミリ秒ごとに実行します機能持ってクリア/ clientXません&/またはclientYプロパティは、私がdat.gui</p> <p>を使用して、簡単な描画プログラムを作っています

window.addEventListener("mousedown", function() { 
    let run = setInterval(function() { 
     // function here 
    }, 50) 
}) 
window.addEventListener("mouseup", function() { 
    clearInterval(run) 
}) 

だから何が問題なのですか?私はclientXとclientYにも問題があります。私が持っているもの

はこれです:

window.addEventListener("mousedown", function() { 
    let run = setInterval(function(event) { 
     let x = event.clientX, 
      y = event.clientY; 
    }, 50) 
}) 

私は、パラメータとしてイベントなしでそれを使用してみましたが、それはまだ動作しません。奇妙なことは、次のようなインスタンスで動作するということです。

window.addEventListener("mousemove", function() { 
    let x = event.clientX, 
     y = event.clientY; 
} 

何か不足していますか?私はこれを見てみたが、何も見つけられていない。事前に

http://codepen.io/TheAndersMan/pen/pNZwrN?editors=0011

ありがとう:私もここに完全なものを持っています!

+0

ヒント:変数のスコープ... – nnnnnn

+0

をあなたが何を意味する@nnnnnn? – TheAndersMan

+0

'run'変数が2番目のスコープにないことを意味します。つまり、他の関数のローカル変数として宣言されています。 – nnnnnn

答えて

1
window.addEventListener("mousedown", function() { 
    let run = setInterval(function() { 
     // function here 
    }, 50) 
}) 
window.addEventListener("mouseup", function() { 
    clearInterval(run) 
}) 

あなたは間隔にevent変数を渡すことができます。

setInterval(function(){}, 50, event); 
+1

変数を 'setInterval'に渡すのが良い点です。それはかなりきれいになります。 – gyre

+0

したがって、setIntervalのイベントはパラメータを置き換えますか? – TheAndersMan

+0

@TheAndersManはい –

1

コールバック関数では、渡されたパラメータevent(イベントオブジェクト)がありません。また、run変数もリスナのスコープ外で宣言する必要があります。

編集:マウスの位置を追跡するためには、mousemoveイベントにイベントリスナーを添付する必要があるので、私はmousedownに装着されているこのイベントハンドラとして機能するように別の関数を追加する必要がありましたし、 mouseupで切り離されました。彼らは他のスコープで定義されていたので、あなたは、mouseupリスナー内run変数を使用することはできません

let run, 
 
    x, y 
 

 
window.addEventListener('mousedown', function (event) { 
 
    run = setInterval(function() { 
 
     console.log(x, y) 
 
    }, 50) 
 
    trackMouse(event) 
 
    this.addEventListener('mousemove', trackMouse) 
 
}) 
 

 
window.addEventListener("mouseup", function() { 
 
    clearInterval(run) 
 
    this.removeEventListener('mousemove', trackMouse) 
 
}) 
 

 
function trackMouse (event) { 
 
    x = event.clientX 
 
    y = event.clientY 
 
}

+0

これは問題ではありません。その例では、パラメータがなければうまく動作します。マウスの中では動作しません。 – TheAndersMan

+0

パラメータがなければ、従来の 'window.event'オブジェクトが存在するためにのみ動作します。それはそれを行うための推奨された方法ではありません。私は自分の答えを更新し、 'run'のスコープをどのように表示するかを示しました。 – gyre

+0

大丈夫なので、あなたが別のものを修正するまでこれが問題であったことに気付かなかった。私はこれを聞いていませんでしたが、クライアントXとYをマウスダウンさせ続ける方法がありますか?私が意味することは、マウスを下に動かすと、それを持ち上げるまで同じ座標を与えることができます。 – TheAndersMan

関連する問題