(任意のグラフィックスを描画するために)Webページの上部に要素をオーバーレイしようとしていますが、すべての上に要素の内部にスタックできるようになりましたが、これによりユーザーがクリックできなくなりますリンク/ボタン/など。そのコンテンツをすべての上に浮かせる方法はありますか(半透明なので、背後にあるものを見ることができます)、ユーザーにその下のレイヤーと対話させることができますか?
DOMイベントモデルに関する多くの情報を見つけましたが、そもそもボタンやその他の「ネイティブ」コントロールがクリックを取得できないという問題に対処するものはありません。
私がやった愚かなハックは、要素の高さをゼロに設定することでしたが、overflow:visible;これをpointer-events:noneと組み合わせます。すべての基盤をカバーしているようです。
.overlay {
height:0px;
overflow:visible;
pointer-events:none;
background:none !important;
}
pointer-events: none;
をオーバーレイに追加します。
元の答え:私の提案は、クリックイベントをオーバーレイでキャプチャし、オーバーレイを非表示にし、クリックイベントを再起動してから、もう一度オーバーレイを表示することです。ただし、フリッカー効果が得られるかどうかはわかりません。
[更新]まさにこの問題と私の解決策がまさにこの投稿に登場しました: " Forwarding Mouse Events Through Layers "。私はおそらくOPでは少し遅れていることを知っていますが、将来この問題を抱えている人のために、私はそれを含めるつもりです。
記録のための代替アプローチは、クリック可能なレイヤーをオーバーレイにすることです。それを半透明にし、「オーバーレイ」画像を配置しますbehind it(やや直感に反して、「オーバーレイ」画像は不透明である)。実行しようとしている内容によっては、クリック可能性の問題を回避しながら(画像とクリック可能なレイヤーを半透明に重ねた)まったく同じ視覚効果を得ることができます(「オーバーレイ実際にはバックグラウンドにあります)。
他の誰かが同じ問題に直面している場合、私が満足していると感じる唯一の解決策は、キャンバスですべてを覆い、すべてのクリック可能な要素のZ-indexを上げることでした。あなたはそれらを描くことはできませんが、少なくともクリック可能です...
私のチームはこの問題に遭遇し、非常にうまく解決しました。
これにより、「。element-overlay」のイベントが「.passthrough」にバブルアップするため、問題が解決するはずです。それでもまだ問題がある場合(これまでのところ表示されていません)、バインディングをいじることができます。
これは、@ jvenemaのソリューションの拡張機能です。
これのいいところは
問題がある場合は、詳しく教えてください。
背面のボタン/アンカーを表示したままにするために、不透明度が設定されたオーバーレイを使用できますが、そのオーバーレイを要素の上に配置すると、クリックできなくなります。
一般的に、これは素晴らしいアイデアではありません。シナリオを考えて、悪意がある場合は、「オーバーレイ」の下にすべてを隠すことができます。次に、ユーザーがbankofamerica.comに移動するリンクをクリックすると、代わりにmyevilsite.comに移動する非表示のリンクがトリガーされます。
とはいえ、イベントバブリングは機能し、アプリケーション内にある場合、大したことではありません。次のコードは一例です。アラートが赤いエリアに設定されていても、青いエリアをクリックするとアラートがポップアップします。イベントはPARENT要素を介して伝播するため、オレンジ色の領域は機能しないことに注意してください。したがって、オーバーレイはinsideクリックを監視している要素である必要があります。あなたのシナリオでは、あなたは運が悪いかもしれません。
<html>
<head>
</head>
<body>
<div id="outer" style="position:absolute;height:50px;width:60px;z-index:1;background-color:red;top:5px;left:5px;" onclick="alert('outer')">
<div id="nested" style="position:absolute;height:50px;width:60px;z-index:2;background-color:blue;top:15px;left:15px;">
</div>
</div>
<div id="separate" style="position:absolute;height:50px;width:60px;z-index:3;background-color:orange;top:25px;left:25px;">
</div>
</body>
</html>
IEではこれはどうですか?:
onmousedown:イベントをオーバーレイする可能性のあるすべての要素を非表示にします。 display:none visibility:hiddenは実際には機能しないため、固定されたピクセル数でオーバーレイdivを画面から押し出します。しばらくしてから、同じピクセル数でオーバーレイするdivを押し戻します。
onmouseup:一方、これはあなたが発射したいイベントです。
//script
var allclickthrough=[];
function hidedivover(){
if(allclickthrough.length==0){
allclickthrough=getElementsByClassName(document.body,"clickthrough");// if so .parentNode
}
for(var i=0;i<allclickthrough.length;i++){
allclickthrough[i].style.left=parseInt(allclickthrough[i].style.left)+2000+"px";
}
setTimeout(function(){showdivover()},1000);
}
function showdivover(){
for(var i=0;i<allclickthrough.length;i++){
allclickthrough[i].style.left=parseInt(allclickthrough[i].style.left)-2000+"px";
}
}
//html
<span onmouseup="Dreck_he_got_me()">Click me if you can.</span>
<div onmousedown="hidedivover()" style="position:absolute" class="clickthrough">You'll don't get through!</div>