2011-11-09 15 views
6

Una domanda strana sarà, ma ecco qui. Ho una pagina in cui mostro una foto in un grande formato, come un lightbox. Quando si preme ESC chiudo la pagina e tornare l'utente alla pagina dove è venuto, che mostra le foto in un formato normale:Come rilevare il tasto di fuga premuto quando si è in un video Youtube?

$(document).keyup(function(e) { 
if (e.keyCode == 27) { 
    var closeURL = $('.close').attr('href'); 
     window.location = closeURL; 
} 
}); 

Tuttavia, sulla stessa pagina lightbox è anche un pannello laterale che può contenere video di Youtube incorporati. È possibile per gli utenti ingrandire il video a schermo intero usando i controlli video standard del player Youtube. Se l'utente preme ESC in questo scenario, si chiuderà il video a schermo intero e tornare alla pagina lightbox (comportamento standard player incorporato, che è quello che voglio), tuttavia, l'evento chiave ESC poi anche innesca il mio codice keyup che si chiude la Lightbox, indesiderabile in questo specifico scenario.

ho trovato questo gocciolando verso il basso per essere lì in Chrome, ma non in Firefox. Essenzialmente quello che voglio è che il mio codice ESC non venga attivato quando si preme ESC per chiudere il player di Youtube, ma per farlo innescare solo quando gli utenti colpiscono ESC mentre guardano la foto (e non il video).

stavo cercando in event.target di distinguere tra questi scenari, ma senza fortuna ancora. Qualche idea?

Aggiornamento: Per ora accetterò questo bug solo per Chrome. Comunque aperto a soluzioni.

+0

Potrebbe inviare il codice HTML per il pannello tenendo il player di YouTube –

+0

Questa è una strana uno come Chrome sembra proprio comportarsi molto strano con pressione di un tasto. –

+0

@JohnHartsock I miei pensieri esattamente :) Non mi aspettavo che il tasto ESC innescasse il mio evento, come pensavo fosse successo in un iframe. Ora sono confuso su quale sarebbe il comportamento corretto, tutto quello che so è che non voglio che l'evento bolla da Youtube alla mia pagina. – Ferdy

risposta

1

Non credo che questo sta per essere possibile. Il player Flash acquisisce l'input quando è focalizzato, ad esempio, se fai clic su riproduci in un video di YouTube, quindi premi Ctrl-W per chiudere la scheda, non si chiuderà finché non fai clic sulla pagina all'esterno del video, riportando l'attenzione su il browser.

Il controllo di input viene effettivamente passato a un altro processo (il lettore Flash) mentre è focalizzato, quindi non sarà in grado di catturare o agire su input finché l'utente non restituisce esplicitamente il controllo al browser.

+0

Grazie, penso che lo spieghi, anche se è un peccato che diversi browser lo gestiscano diversamente. – Ferdy

1

Forse qualcosa di simile che avrebbe funzionato:

$(document).not("iframe").keyup(... 
+0

Grazie per aver riflettuto. Provato, ma con quel codice sembra non attivare più nulla. – Ferdy

1

Proprio imbattuti in questo .. So che questo è un po 'vecchio, ma c'è una possibile soluzione (richiederà più lavoro) ...

Si potrebbe avvolgere il player di YouTube nel proprio Flash Player (utilizzando il API o semplicemente un contenitore) e rilevare la pressione del tasto all'interno del flash. È quindi possibile chiamare la stessa funzione JavaScript direttamente dalla propria applicazione flash in modo che, indipendentemente dal fatto che la pagina o l'app flash sia attiva, verrà sempre eseguito lo script che si desidera eseguire.

0

Si può fare questo rilevando lo stato di gioco per un video e poi messa a fuoco di nuovo alla finestra.

Il Flash player per Youtube API è ora sconsigliato - così si dovrebbe essere utilizzando IFrame API.

È possibile utilizzare l'evento onStateChange per rilevare uno stato di 1 (playing) e poi basta chiamare:

`$(window).focus()` (jQuery syntax) 

Questo sarà quindi permetterà di utilizzare keyup evento. Assicurarsi di utilizzare window e non document per la chiamata focus().

Ecco la sezione degli eventi della documentazione.

https://developers.google.com/youtube/iframe_api_reference#Events

Problemi correlati