Jak sprawdzić, czy przeglądarka ma fokus?
javascript
jquery
events
Pręt
źródło
źródło
document.hasFocus()
, która zwraca wartość logiczną. Jest wbudowany w specyfikację, więc można to zrobić bez jQuery.Odpowiedzi:
Nie testowałem tego w innych przeglądarkach, ale wydaje się, że działa w Webkit. Pozwolę ci wypróbować IE. : o)
Wypróbuj: http://jsfiddle.net/ScKbk/
Po kliknięciu, aby rozpocząć interwał, zmień fokus okna przeglądarki, aby zobaczyć zmianę wyniku. Ponownie przetestowany tylko w Webkicie.
var window_focus; $(window).focus(function() { window_focus = true; }).blur(function() { window_focus = false; }); $(document).one('click', function() { setInterval(function() { $('body').append('has focus? ' + window_focus + '<br>'); }, 1000); });
źródło
window
obiekt, więc jeśli miałbyś używać ramek, prawdopodobnie musiałbyś po prostu dołączyć skrypt do każdej z nich.window.top
do sprawdzania najwyższego okna.użyj metody hasFocus dokumentu. Szczegółowy opis i przykład można znaleźć tutaj: metoda hasFocus
EDYCJA: Dodano skrzypce http://jsfiddle.net/Msjyv/3/
HTML
Currently <b id="status">without</b> focus...
JS
function check() { if(document.hasFocus() == lastFocusStatus) return; lastFocusStatus = !lastFocusStatus; statusEl.innerText = lastFocusStatus ? 'with' : 'without'; } window.statusEl = document.getElementById('status'); window.lastFocusStatus = document.hasFocus(); check(); setInterval(check, 200);
źródło
if(typeof document.hasFocus === 'undefined') { document.hasFocus = function () { return document.visibilityState == 'visible'; } }
Prosty fragment kodu JavaScript
Na podstawie wydarzenia:
function focuschange(fclass) { var elems=['textOut','textFocus']; for (var i=0;i<elems.length;i++) { document.getElementById(elems[i]). setAttribute('class',fclass); } } window.addEventListener("blur",function(){focuschange('havnt')}); window.addEventListener("focus",function(){focuschange('have')}); focuschange('havnt');
.have { background:#CFC; } #textOut.have:after { content:''; } .havnt { background:#FCC; } #textOut.havnt:after { content:' not'; }
<span id='textOut'>Have</span><span id='textFocus'> focus</span>
Na podstawie puli interwałowej:
setInterval(function() { var fclass='havnt'; if (document.hasFocus()) { fclass='have'; }; var elems=['textOut','textFocus']; for (var i=0;i<elems.length;i++) { document.getElementById(elems[i]). setAttribute('class',fclass); } },100);
#textOut.have:after { content:''; } #textOut.havnt:after { content:' not'; } .have { background:#CFC; } .havnt { background:#FCC; }
<span id='textOut'>Have</span><span id='textFocus'> focus</span>
źródło
HTML:
<button id="clear">clear log</button> <div id="event"></div>
JavaScript:
$(function(){ $hasFocus = false; $('#clear').bind('click', function() { $('#event').empty(); }); $(window) .bind('focus', function(ev){ $hasFocus = true; $('#event').append('<div>'+(new Date()).getTime()+' focus</div>'); }) .bind('blur', function(ev){ $hasFocus = false; $('#event').append('<div>'+(new Date()).getTime()+' blur</div>'); }) .trigger('focus'); setInterval(function() { $('#event').append('<div>'+(new Date()).getTime()+' has focus '+($hasFocus ? 'yes' : 'no')+'</div>'); }, 1000); });
test
AKTUALIZACJA:
Naprawię to, ale IE nie działa zbyt dobrze
aktualizacja testowa
źródło