是否有窗口获取焦点的浏览器事件?

Rod*_*Rod 45 javascript jquery

有没有办法,当我点击我的浏览器,并让它集中注意力,运行一次方法?然后当浏览器失去焦点然后重新获得焦点时再次运行该方法一次.

Dan*_*uis 70

您可以在对象上附加focusblur事件处理程序,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 " + nCounter; 
    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);
Run Code Online (Sandbox Code Playgroud)

  • 它与浏览器的兼容性如何? (6认同)

Bre*_*ber 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); 
}
Run Code Online (Sandbox Code Playgroud)

  • jQuery中有一个'one'方法,它非常方便:https://api.jquery.com/one/ (17认同)
  • 请包括对downvote的评论,因为这至少对我来说是对这个问题的可接受的补充. (3认同)
  • Mt]y 答案是可以接受的,并且是正确的答案。它对每个事件应用一个时间事件。显然,经验中的情况会增加代码的要求,但是 one() 作为函数是捕获相关事件的方法 (2认同)
  • 没见过的人可能只是认为这是一个错字.你的答案很棒,但前提是如果你不希望这种情况发生,如果用户离开并重新聚焦窗口而不通过一个电话链重新绑定. (2认同)

Pyl*_*nux 7

如果你的目标浏览器比IE9更新,你应该使用"页面可见性API"javascript浏览器api:https: //developer.mozilla.org/en-US/docs/Web/Guide/User_experience/Using_the_Page_Visibility_API

  • 这对浏览器窗口仍然可见但不在焦点时的情况没有帮助. (6认同)