2014-04-27 2 views
16

Ich habe einen iframe mit einem geerbten pointer-events: none;, aber wenn ich eine <div> in den Iframe mit einem pointer-events: auto; eingefügt haben reagiert das Div nicht auf Klicks oder Maus Hover-Ereignisse.Wie können Sie einen iframe haben Zeiger-Ereignisse: keine; aber nicht auf einer div in das?

Der Grund dafür ist, dass die iframe in einem <div style="position:fixed;"> ist, so ist es ein bisschen wie ein kleines Menü. aber ich möchte, dass der Benutzer durch die iframe klicken, aber nicht über die Links und divs im iframe.

Und ja, es muss unbedingt ein Iframe bleiben.

Wie könnte ich das umgehen? Kann ich das sogar umgehen?

Hier ist ein einfaches Beispiel: jsfiddle.net/MarcGuiselin/yLo119sw/2

+0

Können Sie eine Demo auf https://jsfiddle.net/ erstellen, die das Problem zeigt? – N3dst4

+0

hier gehen Sie: https://jsfiddle.net/MarcGuiselin/yLo119sw/1/ Verzeihen Sie meinen schwachen Versuch, Humor –

+0

Hallo @ Marc-Guiselin, ich habe das genaue gleiche Problem. Ich kämpfe um einen Weg, aber kein Glück. Ich würde es schätzen, wenn Sie mir Ihre Workaround sagen könnten, wenn Sie irgendwelche gefunden haben ... Danke. – hosjay

Antwort

2

Sie mit position:absolute arbeiten, gemäß dem Beispiel, das Sie auf jsfiddle hochgeladen haben ... eine z-index auf die „Hinzufügen können Sie auf mich nicht, weil ich bin hinter dem iframe "-Button erlaubt es mir, darauf zu klicken.

Z-Index

EDIT: Wenn Sie eine pointer-events: none; überall, außer in einer div tun möchten, können Sie die pointer-events in jedem element anstelle des iframe hinzuzufügen. Nach Ihrem Beispiel in der Geige, wenn Sie das Nicholas Cage speichern möchten, aber die anderen Ereignisse blockieren, können Sie etwas tun:

switchbutton.onclick=function(){ 
    this.innerHTML="reload to reset"; 
    //iframe.style.pointerEvents="none"; 
    cantclick.innerHTML="You can click me now! :)"; 
    iframe.contentDocument.body.innerHTML="<button>You can't click me now because my parent iframe is click-through! :(</button><br>or save this gorgeous image of your favorite actor which may or may not be relavant to the problem.<br><img id='nicholasCage' src='http://media2.popsugar-assets.com/files/2014/01/06/008/n/1922283/131b4126c7b8738f_thumb_temp_image333458751389045360.jpg.xxxlarge/i/Best-Nicolas-Cage-Memes.jpg'/>"; 

    var iframeBody = iframe.contentDocument, 
     elements = iframeBody.querySelectorAll("*"), 
     i, 
     len = elements.length; 

    for(i=0;i<len;i++){ 
     elements[i].style.pointerEvents="none"; 
    } 

    iframeBody.getElementById("nicholasCage").style.pointerEvents="all"; 
} 

Wenn Sie jQuery verwenden, können Sie es schneller mit nur tun können $("iframe *").css("pointer-events","none");

+1

offensichtlich. Das Ziel ist nicht, auf den Button über dem iframe zu klicken, sondern herauszufinden, wie man Mausevents durch den iframe dringen lassen kann, wenn sich das Mausevent nicht auf etwas im iframe befindet –

+0

Entschuldigung, ich denke ich bekomme es nicht (meine Schuld, weil mein Englisch ein bisschen saugt ...). Ok, jetzt habe ich dein Spiel gründlich überprüft, wenn NCage erscheint, willst du auf den Button klicken "Du kannst nicht auf mich klicken ..."? Sie können es mit Javascript tun, fragen Sie? (Entschuldigung nochmal) – Kamae

+0

OK, also wollen Sie alle Dinge innerhalb des Iframes außer dem Beispiel von NCage deaktivieren. Können Sie jQuery oder nur Javascript verwenden? – Kamae

-1

Haben Sie das versucht?

pointer-events: inherit; 

Ich weiß, dass Sie bereits Ihre Antwort erhalten haben, aber ich dachte, das könnte auch funktionieren.

0

Geben Sie nicht den ganzen iframe pointer-events: none. Nur innerhalb der iframe setzen Sie eine CSS-Regel body * { pointer-events: none;}

Auf diese Weise blockiert der Iframe keine Ereignisse, aber Elemente innerhalb des Iframe sind nicht anklickbar.

+0

Das Ziel besteht darin, herauszufinden, wie Klicks durch den Iframe gelangen können, wenn der Klick nicht auf etwas im Iframe erfolgt. Sie möchten in der Lage sein, auf Dinge im iframe zu klicken, da dies sonst den Zweck ruiniert. –

Verwandte Themen