ユーザーがクリックして要素を保持したときに特定のアクションが発生するWebアプリケーションにいくつかの機能が必要です。それはAndroidの長いプレスのように考えてください。JavaScriptはsetTimeoutを使用して要素をクリックして保持する
私はdiv要素を持っている:
<div id="myDiv"
onmousedown="press()"
onmouseup="cancel()"
onmouseout="cancel()"
onmousemove="cancel()">Long Click Me</div>
と私のjavascript:
var down = false;
function press()
{
down = true;
setTimeout(function() { action(); }, 1500);
}
function cancel()
{
down = false; // this doesn't happen when user moves off div while holding mouse down!
}
function action()
{
if (!down)
return; // if the flag is FALSE then do nothing.
alert("Success!");
down = false;
}
これは限り私はすべてがプレスされ、要素の上に保持するように動作します。私は、キャンセル()を呼び出すためにonmouseout
とonmousemove
イベントを持っています。私は、アクションを開始する前に、ユーザーが気を付けてマウスを要素から離してしまうようにしたいからです。
残念ながら、私のコードはこれをしないようです。 実際、使用が一瞬クリックされた場合、マウスをdivから離してを解放してからの1.5秒後に、action()は期待どおりに取り崩されません。
編集:あなたの入力皆のおかげで、それは私が特別少しだけだが判明したと私は私れるonmouseoutで、私のHTMLでの大文字を忘れてしまったことがわかりませんでした。上記のサンプルコードは、期待どおりに動作するはずです。
これはすべてのブラウザで起こっているのでしょうか?他の人にテストさせるために[jsfiddle](http://jsfiddle.net/)を作ってみませんか?また、boolを使用せず、単に 'var'を使用すると、JavaScriptは動的に型付けされます。 –
私はこのコードをvarに入れました。この例を書いたときに私は誤ってboolを書きました。 – Ozzah
みんな、答えを止める。私は間違った質問をしました、残念です。問題はそのアクション()が始まっていない - 私はテストがある:if(!down)return;それは問題ではありません。問題は、ユーザーがマウスボタンを押したままdivからマウスを離した場合、cancel()が呼び出されていないことです。これは私の問題を説明するための単なるおもちゃの例です。私は実際には*必要がある*あなたが1.5秒前にdivから離れるときに呼び出されるcancel()を持っている必要があります。そうでなければ短いクリックは後で動作しません。 – Ozzah