Javascript 如何自动将焦点设置在a<;输入>;字段在滚动后何时到达视口?

Javascript 如何自动将焦点设置在a<;输入>;字段在滚动后何时到达视口?,javascript,html,browser,viewport,html-input,Javascript,Html,Browser,Viewport,Html Input,我知道autofocus属性: <input type="email" id="hello" placeholder="a@b.com" autofocus> 自动设置HTML输入的焦点 但是,当页面高度远高于浏览器高度时,是否有一种方法(使用特殊值自动聚焦?)仅当滚动后到达页面的视口/当前可见部分时,才自动将焦点设置为字段? 函数handleScroll(){ var el=document.getElementBy

我知道
autofocus
属性:

<input type="email" id="hello" placeholder="a@b.com" autofocus>

自动设置HTML输入的焦点

但是,当页面高度远高于浏览器高度时,是否有一种方法(使用特殊值
自动聚焦
?)仅当滚动后
到达页面的视口/当前可见部分时,才自动将焦点设置为字段?

函数handleScroll(){
var el=document.getElementById('hello')
var rect=el.getBoundingClientRect();
var elemTop=rect.top;
var elemBottom=矩形底部;
//只有完全可见的元素返回true:
变量isVisible=(elemTop>=0)和&(elemBottom=0;
如果(可见)el.focus();
}


确实是一个很好的解决方案!如果它不可见,也许我们可以
.blur()
它。例如:你用鼠标滚动,你看到输入,你用鼠标滚动到下面。然后你就不能再用键盘箭头滚动了(视口外的输入仍然有焦点)。另一件事@prime:假设输入在视口中。它有焦点。用户不感兴趣,所以他们在输入之外单击以退出焦点。然后每一次小的滚动(即使是1个像素!)都会使输入重新聚焦,这可能会让用户感到恼火!您对这种情况有什么想法吗?“如果输入之前已经在视口中,但现在没有焦点,可能是因为用户退出了焦点,所以我们不要再提供焦点。”。