2012-10-29 376 views
1

我對jquery很陌生,正在尋找處理鼠標事件的事件。在現在我已經找到並使用類似:jquery鼠標事件

$("#canva").live('mousedown mousemove mouseup', function(e){ .... 

,但它觸發function(e)即使鼠標在canvas元素(包括被點擊左鍵或沒有)。

我期待的事件會發生在#canva元素上面的每個座標變化上,並且當我的鼠標按鈕被點擊時。釋放鼠標左鍵應該會導致此事件結束。要做到這一點

回答

1

一種方法是創建一個全局變量,當用戶點擊過的元素,例如,以修改它的值:

var mouseIsDown = false; 

$('#mycanvas').on('mousedown', function() {mouseIsDown = true}); 
$('#mycanvas').on('mouseup', function() {mouseIsDown = false}); 

現在,所有你需要做的是綁定「鼠標移動」到你想要觸發的函數,並簡單地將一個條件附加到函數的主體上,檢查左鍵單擊的狀態並在必要時轉義。現在

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); 

,如果用戶在元素內單擊,然後釋放前拖動鼠標的元素外,你會發現,「鼠標鬆開」永遠不會觸發變量mouseIsDown將永遠不會被改回假。爲了繞開這個問題,你可以綁定「鼠標移出」到復位mouseIsDown或綁定「鼠標鬆開」全球作爲這樣的功能:

$('#mycanvas').on('mouseout', function() {mouseIsDown = false}); 

OR

$(document).on('mouseup', function() {mouseIsDown = false}); 

下面是一個例子:http://jsfiddle.net/pikappa/HVTWb/