これを行う 1 つの方法は、グローバル変数を作成し、ユーザーが要素をクリックしたときにその値を変更することです。
var mouseIsDown = false;
$('#mycanvas').on('mousedown', function () {mouseIsDown = true});
$('#mycanvas').on('mouseup', function () {mouseIsDown = false});
あとは、起動したい関数に「mousemove」をバインドし、左クリックの状態をチェックして必要に応じてエスケープする条件を関数の本体に追加するだけです。
function fireThis(e) {
// if the user doesn't have the mouse down, then do nothing
if (mouseIsDown === false)
return;
// if the user does have the mouse down, do the following
// enter code here
// ....
// ....
}
// bind mousemove to function
$('#mycanvas').on('mousemove', fireThis);
ここで、ユーザーが要素内をクリックし、マウスを離す前に要素の外にドラッグした場合、「mouseup」がトリガーされず、変数 mouseIsDown が false に戻されないことがわかります。これを回避するには、「mouseout」を mouseIsDown をリセットする関数にバインドするか、「mouseup」をグローバルにバインドします。
$('#mycanvas').on('mouseout', function () {mouseIsDown = false});
また
$(document).on('mouseup', function () {mouseIsDown = false});
例を次に示します: http://jsfiddle.net/pikappa/HVTWb/