5

私の絶対配置されたキャンバス要素は、マウスイベントをすべてブロックするので、その下のものはクリックできません。hereおよびhereという同じ問題が発生します。IE9マスキングキャンバス要素を介したマウスイベントの転送

私は特定のzインデックスにある必要がある複数のキャンバスレイヤーを持っているので、マウスイベントをキャンバスに転送する必要があります。 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をターゲットとcurrentTargetに変更して渡すのは安全でしょうか?

2.私はどのように右クリックを伝えることができますか?

これを行うには誰かより良い方法がありますか?他の関連する質問はかなり古いです。

答えて

3

いいえクリーンイベントをクロスブラウザを渡す方法はありません。あなたは(変更された)イベントを渡すことができますが、それが当然のことながら動作することを保証することはできません。特にクロスブラウザです。あなたのコードを使用して、右クリックの場合

はちょうどこの操作を行います。http://jsfiddle.net/6WMXh/20/

を(あなたは半分jqueryの余分な情報部分を使用しますが、それを使って何をやったことはありません)

+0

私はキャンバスを通じてイベントを送信しようとしていますよ、キャンバスにではありません。 IE9では、キャンバスの下にある要素にはクリックイベントが渡されません。あなたはIE9で私が[ここ](http://jsfiddle.net/VvPPW/1/)を意味するものを見ることができます。 – Andrew

+0

Oh derp、私は以下の要素が非キャンバスであったことに気付かなかった!私は自分の答えを編集しましたが、ここで悲しい事実はそれを行うための金色の方法がまだないということです。 –

+0

また、あなたの右クリックビットの解決策を追加しました –

関連する問題