2015-12-22 17 views
5

TLDR;Come rilevare il browser è andato a schermo intero

Sono in grado di rilevare se il browser è andato a schermo intero tramite l'API a schermo intero ma non riesco a rilevare che il browser è andato a schermo intero tramite f11 o il menu del browser (in particolare Chrome).

originale:

Attualmente sto usando screenfull di andare a schermo intero e rilevare che il browser è a schermo intero. Il problema è che non voglio visualizzare il mio pulsante di attivazione a schermo intero quando il browser è andato a schermo intero attraverso una funzione del browser (ad esempio f11 o schermo intero attraverso i menu del browser). Questo perché l'API di javascript a schermo intero non sembra in grado di rilevare che si è a schermo intero o si esce dallo schermo intero quando ci si è diretti attraverso una funzione del browser. Potrei solo rilevare se f11 è stato colpito, ma questo non funziona su Mac o quando è stato avviato a schermo intero attraverso i menu del browser.

Qualche idea su come rilevare se lo schermo intero è stato avviato tramite una funzione del browser? Sto solo prendendo di mira i browser compatibili con Webgl in modo da ridurre molti trucchi.

+4

Eventuali duplicati di [Il rilevamento se un browser è in modalità a schermo intero] (http://stackoverflow.com/questions/1047319/detecting- if-a-browser-is-in-full-screen-mode) – thanksd

+0

http://stackoverflow.com/questions/5617963/how-to-detect-if-user-has-enabled-full-screen-in-browser –

+0

Sono in grado di rilevare se il browser è andato a schermo intero dall'API a schermo intero, ma non riesco a rilevare se il browser è andato a schermo intero da f11 o dai menu della barra degli strumenti – Tbonebrad

risposta

5

Non ho provato questo per l'affidabilità, ma questa è la mia opinione.

//without jQuery 
window.addEventListener('resize', function(){ 
    if(screen.width === window.innerWidth){ 
    // this is full screen 
    } 
}); 


    //with jQuery 
$(document).ready(function() { 
    $(window).on('resize', function(){ 
    if(screen.width === window.innerWidth){ 
     // this is full screen 
    } 
    }); 
}); 

Questo sembra funzionare quando si preme il tasto F11 e altri metodi, quindi dovrebbe catturare i casi limite che l'API a schermo intero non lo fa. Anche se non sono sicuro che il confronto tra screen.width vs. window.innerWidth sia un modo affidabile per controllare a schermo intero. Forse qualcun altro può aggiungere/criticare questo.

+2

Non è sufficiente confrontare la larghezza, è lo stesso quando la finestra è ingrandita. Devi confrontare anche le altezze ma il divertimento inizia qui. In Chromium a schermo intero, l'altezza dello schermo e l'altezza della finestra sono gli stessi, in IE, non è a causa della barra di stato.Non ho provato in Firefox ma la barra di stato può essere aggiunta con un'estensione. A schermo intero, l'altezza della finestra deve essere inferiore al x% più piccola delle dimensioni dello schermo. – Shanoor

+0

@ShanShan Vedo il tuo punto, anche se ho una domanda. OP cercava casi limite in cui è stato raggiunto lo schermo intero premendo "F11" o una funzione del browser. Se non sbaglio, non viene compressa la barra di stato quando si arriva a schermo intero in questo modo? –

+0

IE mostra sempre la barra di stato anche a schermo intero (ho provato pochi minuti fa) a meno che non la disabiliti completamente. E ho provato anche in Firefox, c'è una differenza di pixel. Questa soluzione è comunque un buon inizio, richiede solo alcuni ritocchi e test. – Shanoor

3

Utilizzare l'evento fullscreenchange per rilevare un evento di modifica a schermo intero o se non si desidera gestire i prefissi del fornitore di quello che si può anche ascoltare l'evento resize (l'evento di ridimensionamento della finestra che si attiva anche quando si entra o esce a schermo intero) e quindi verificare se document.fullscreenElement non è nullo per determinare se la modalità a schermo intero è attiva. Avrai bisogno di prefisso fornitore fullscreenElement di conseguenza. Vorrei usare qualcosa di simile:

var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || 
document.webkitFullscreenElement || document.msFullscreenElement; 

https://msdn.microsoft.com/en-us/library/dn312066(v=vs.85).aspx ha un buon esempio per questo che cito qui di seguito. Hanno usato l'evento fullscreenChange, ma si potrebbe intercettare l'evento "resize"

document.addEventListener("fullscreenChange", function() { 
      if (fullscreenElement != null) { 
       console.info("Went full screen"); 
      } else { 
       console.info("Exited full screen");    
      } 
     }); 
+2

Questo in realtà non funziona, come il 'fullscreenChange' l'evento si attiva solo se chiami l'API JavaScript a schermo intero HTML5. Se un utente preme F11, quell'evento non viene attivato e 'document.fullscreenElement' (e le versioni del prefisso del venditore) rimane' null'. – mc10

Problemi correlati