2012-04-12 6 views
4

私は、イベントを処理するためのjQueryの1.7を使用します。mousemove()イベントハンドラでどのマウスキーが押されていますか?

function objToStr(obj) { 
    return ...string representation of the object 
} 
$slider.mousedown(function(e) { 
    console.log("$slider.mousedown:\n" + objToStr(e)); 
}); 

$slider.mousemove(function(e) { 
    console.log("$slider.mousemove:\n" + objToStr(e)); 
}); 

、ここでの結果である:

$slider.mousedown: 
altKey = false 
attrChange = undefined 
attrName = undefined 
bubbles = true 
button = 0 
buttons = undefined 
cancelable = true 
clientX = 319 
clientY = 13 
ctrlKey = false 
currentTarget = object 
data = null 
delegateTarget = object 
eventPhase = 3 
fromElement = undefined 
handleObj = object 
isDefaultPrevented = (function) 
isImmediatePropagationStopped = (function) 
isPropagationStopped = (function) 
jQuery17209754494933906718 = true 
metaKey = false 
offsetX = undefined 
offsetY = undefined 
originalEvent = object 
pageX = 319 
pageY = 13 
preventDefault = (function) 
relatedNode = undefined 
relatedTarget = null 
screenX = 2876 
screenY = 223 
shiftKey = false 
srcElement = undefined 
stopImmediatePropagation = (function) 
stopPropagation = (function) 
target = object 
timeStamp = 869699957 
toElement = undefined 
type = "mousedown" 
view = object 
which = 1 


$slider.mousemove: 
currentTarget = object 
data = null 
delegateTarget = object 
exclusive = undefined 
handleObj = object 
isDefaultPrevented = (function) 
isImmediatePropagationStopped = (function) 
isPropagationStopped = (function) 
isTrigger = true 
jQuery17209754494933906718 = true 
namespace = "" 
namespace_re = null 
preventDefault = (function) 
result = undefined 
stopImmediatePropagation = (function) 
stopPropagation = (function) 
target = object 
timeStamp = 1334151903323 
type = "mousemove" 

私はmousemoveためe.whichにアクセスする必要がありますが、どうやらそれは、イベントハンドラに渡されていませんか?

私はフラグのアルゴリズムをjQuery: Detecting pressed mouse button during mousemove eventで提案して使いたくありません。ユーザーがブラウザウィンドウの外にマウスボタンをドラッグしてそこにリリースすると、マウスがブラウザウィンドウに戻っても、それはまだ押されていると考えられます。その後、マウスがウィンドウを離れるときにハンドラーを追加する必要があります。それはあまりにも多くのことです。 mousemove()のイベントハンドラでどのマウスボタンが押されたかを簡単に知る方法はありますか?

+0

私はMouseMoveイベントのoriginalEventプロパティを欠けているために複数の変数を追加する必要がありますか?あなたはそれを検査しようとしましたか?実際に、それは私が探している 'e.originalEvent.which'パラメータが含まれていますが、それは常に' 1ですhttp://api.jquery.com/category/events/event-object/: – Bergi

+0

originalEventは、イベント固有のデータが含まれています'どのマウスボタンを押しても問題ありません!かなり変だ。ユーザーがスライダーの内側をクリックすると、その外側でマウスをドラッグし、そこにボタンを離すと – AlexStack

答えて

3

イベントが非常に頻繁に発生するので、そのムーブイベントは、その時点でどのキーが押されていたかを調べるのが最も重要であるとは考えられませんでした。だから、mouseupmousedownのためのイベントを持っている必要があります。

var leftMButtonDown = false; 

$slider.mousedown(function(e) { 
    if(e.which === 1) leftMButtonDown = true; 
}); 

$(document).mouseup(function(e) { 
    if(leftMButtonDown && e.which === 1) leftMButtonDown = false; 
}); 

$slider.mousemove(function(e) { 
    if(leftMButtonDown == true) { 
     console.log('Left mouse button was down on mousemove event'); 
    } 
}); 

そして、あなたは、マウスの右ボタンなど

+3

は、$のslider.mouseupは()まで発生しません。それが私にこの質問をここで聞かせた主な問題です。 – AlexStack

+1

ああ[OK]を、あなたは(編集済み)その文書にmouseUpイベントを添付する必要があります –

1
<body> 
<div id="div" style=" height: 100px; border:1px solid red"></div> 

<script> 
    document.mouseState=-1; //global check mouse state 

    document.onmousedown=function(e){ 
    document.mouseState=e.button; 
    } 
    document.onmouseup=function(e){ 
    document.mouseState=-1; 
    } 

    var d=document.getElementById('div'); 
    d.onmousemove= function(e){ 
    d.innerHTML+='; '+document.mouseState; 

    } 

</script> 
</body> 
+0

は、同様に内容を説明考えてみましょう。 –

+1

document.mouseState = -1; // < - 文書、document.onmousedownとdocument.onmouseup-チェックマウスの状態をオブジェクトとプロパティdocument.mouseStateをリフレッシュするために追加して、最初のプロパティ。現在、関数obiect.onmousemoveではこの情報を使用しています。 – ZPKSoft

関連する問題