2011-04-08 64 views
2

我從How to get mouseup to fire once mousemove complete得到了這個腳本,它在jQuery(document)範圍內工作。flash對象沒有觸發的Mouseup事件

後來我在主體內添加了一個flash對象。當我點擊flash對象時,mousedown事件觸發,mousemove事件觸發,但不是mouseup事件,我想要解除鼠標移動。

但是,當我點擊非Flash區域,mousedown的作品,mousemove的作品,並且mouseup也適用。它的工作方式就像我想在Chrome中使用它,但不在Firefox中。

這裏是代碼,我在$(document).ready

handleMouseDown: function() { 
    jQuery(document).mouseup(function() { 
     Log("unbind."); 
     jQuery(document).unbind('mousemove'); 
    }); 

    jQuery(document).mousedown(function(e) { 
     Log('click'); 
     // You can record the starting position with 
     var start_x = e.pageX; 
     var start_y = e.pageY; 

     jQuery(document).mousemove(function(e) { 
      // And you can get the distance moved by 
      var offset_x = e.pageX - start_x; 
      var offset_y = e.pageY - start_y; 

      Log('moves') ; 
      return false; 
     }); 

     // Using return false prevents browser's default, 
     // often unwanted mousemove actions (drag & drop) 
     return false; 
    }); 
} 
//firebug method log calls 
function Log(str) { 
    if (typeof(console.log) == 'function') console.log(str); 
} 
+0

它就像我在Chrome它想。但不是在Firefox中。 – r4ccoon 2011-04-08 03:57:57

回答

0

稱爲handleMouseDown這是很難處理一點點。

首先關閉任何flash對象將捕獲所有輸入。這意味着任何鼠標或鍵盤事件都在Flash對象內!雖然鍵盤輸入僅在元素具有焦點時才被捕獲,但mouseUp仍會在「閃現」對象中「發生」。

其次,我能想到的唯一解決方案是,當mouveUp應該被觸發時,用前景不可見div覆蓋所有Flash對象。可能工作......可能不會,但理論上它應該。

+0

我也在考慮這樣做。將是我最後的手段 – r4ccoon 2011-04-08 03:59:40

0

當鼠標按鈕釋放到Flash對象上時,您可以將鼠標放在單獨的函數中,您可以從JavaScript處理程序調用並從Flash調用ExternalInterface調用。當然,這隻有在您可以編輯Flash源時纔有效。

0

我能解決這個問題是這樣的:

$('object').live('mousedown', function() { 
    alert('I was clicked'); 
}); 

只有.bind()沒有做的工作,可能是因爲對象通過swfobject的...

0

插入這是一個老問題,但沒有按似乎沒有一個可行的答案,所以我只是說我如何解決這個問題,因爲它今天仍然是一個問題。雖然mouseup事件似乎沒有通過flash對象觸發,但通用的'click'事件卻可以實現,如果你跟蹤你的'up'和'down'狀態,你應該可以使用它來獲得你想要的。超級簡單的例子:

$(document).on("mousedown", function() { 
    mouseButtonStatus = "down"; 
}); 

$(document).on("mouseup", function() { 
    mouseButtonStatus = "up"; 
}); 

// This little bodge gets around the issue with FireFox and the mouseup event 
$(document).on("click", function() { 
    if (mouseButtonStatus === "down"){ 
     mouseButtonStatus = "up"; 
    } 
}); 

不用多說範圍的變量適當等等......

0

另一種解決方案是使用MouseEvent.buttons屬性,這是火狐具體,因爲它是一個火狐怪癖。例如,該屬性不可用於Safari。這裏是檢測左鍵是否被按下,注意touchmove檢查,以避免觸發在觸摸設備上的代碼:

if (e.buttons != 'undefined' && e.type != 'touchmove' && !(e.buttons & 1)) 
bMouseDown = false;