有没有办法在我点击浏览器并给予关注时,运行一次方法?然后,当浏览器失去焦点然后重新获得焦点时,再次再次运行该方法。
答案 0 :(得分:61)
您可以在focus
对象上附加blur
和window
事件处理程序,以跟踪窗口是否获得焦点(请参阅http://jsfiddle.net/whQFz/以获取一个简单的示例)。 window
适用于当前浏览器上下文(因此可以是窗口,选项卡,框架等)。
注意:每次窗口获得焦点时,focus
事件都会触发,每次失去焦点时blur
事件都会触发。将焦点从窗口移开的一个例子是alert
窗口。如果您尝试在onfocus
事件处理程序中发出警报,您将获得无限循环警报!
// Set global counter variable to verify event instances
var nCounter = 0;
// Set up event handler to produce text for the window focus event
window.addEventListener("focus", function(event)
{
document.getElementById('message').innerHTML = "window has focus " + nIndex;
nCounter = nCounter + 1;
}, false);
// Example of the blur event as opposed to focus
// window.addEventListener("blur", function(event) {
// document.getElementById('message').innerHTML = "window lost focus"; },
// false);
答案 1 :(得分:16)
$(document).ready(function() { $(window).one("focus", SomeFocusMethod); } );
var SomeFocusMethod = function()
{
// do stuff
$(window).one("blur", SomeBlurMethod);
}
var SomeBlurMethod = function()
{
// do stuff
$(window).one("focus", SomeFocusMethod);
}
答案 2 :(得分:7)
如果您的目标浏览器比IE9更新,那么您应该使用" Page Visibility API" javascript浏览器api: https://developer.mozilla.org/en-US/docs/Web/Guide/User_experience/Using_the_Page_Visibility_API
答案 3 :(得分:0)
function blinkTab() {
const browserTitle = document.title;
const stopBlinking = () => {
document.title = browserTitle;
};
const startBlinking = () => {
document.title = 'My New Title';
};
function registerEvents() {
window.addEventListener("focus", function(event) {
stopBlinking();
}, false);
window.addEventListener("blur", function(event) {
setInterval(() => {
startBlinking();
}, 500);
}, false);
};
registerEvents();
};
blinkTab();