5

我絕對定位畫布元素阻止所有的鼠標事件,這樣沒有它們下面可以點擊IE9轉發的鼠標事件,同樣的問題提到herehere通過光罩canvas元素

我有需要在多個帆布層具體的z-index的,所以我需要通過畫布轉發鼠標事件。 pointer-events: none;作品在好的瀏覽器,但我IE9的JavaScript需要做到這一點,這是我目前的解決方案,

var evts = [ 'click', 'mousedown', 'mouseup', 'dblclick'], 
       canvases = $('canvas'); 

      $.each(evts, function(_, event){ 
       canvases.bind(event, function(evt){ 
        var target, 
         pEvent; 
        $(this).hide(); 
        target = document.elementFromPoint(evt.clientX, evt.clientY); 
        $(this).show(); 
        pEvent = $.Event(event); 
        pEvent.target = target; 
        pEvent.data = evt.data; 
        pEvent.currentTarget = target; 
        pEvent.pageX = evt.pageX; 
        pEvent.pageY = evt.pageY; 
        pEvent.result = evt.result; 
        pEvent.timeStamp = evt.timeStamp; 
        pEvent.which = evt.which; 
        $(target).trigger(event, pEvent); 
       }); 
      }); 

工作示例, jsFiddle

問題;

1.我正在創建新事件並傳遞相關數據,是否可以安全地將evt var與target和currentTarget進行修改?

2.如何傳播完成右鍵點擊?

或者有沒有人有更好的方式來做到這一點?其他相關問題相當老舊。

回答

3

有傳事件的跨瀏覽器沒有乾淨方式。您可以傳遞(修改)的事件,但您無法保證它可以自然運行,特別是跨瀏覽器。

對於使用您的代碼右鍵單擊只是這樣做:http://jsfiddle.net/6WMXh/20/

(您使用的一半jQuery的額外的信息的一部分,但從來沒有與它的任何東西)

+0

我正在試圖通過畫布發送事件,不進入畫布。在IE9中,畫布下的任何元素都不會獲取傳入其中的點擊事件。你可以在IE9中看到我的意思[這裏](http://jsfiddle.net/VvPPW/1/)。 – Andrew

+0

Oh derp,我沒有注意到下面的元素是非畫布!我已經編輯了我的答案,但可悲的是,仍然沒有辦法做到這一點。 –

+0

另外,我加了一個解決方案,您的鼠標右鍵單擊位 –