2009-12-03 57 views
7

我有许多表单域跨越页面折叠。当按下“tab”键来遍历每个输入/选择字段时,它位于页面底部的下一个字段。焦点或标签键上的输入按下,移动到屏幕中心

我的一些领域有工具提示,验证响应和自动建议框出现在字段下方。当切换到该字段时,您无法在页面折叠下看到这些元素。

是否有一个javascript或jQuery脚本,可以垂直居中焦点输入/ textarea/select/button字段而不是对齐到底部的屏幕?

+2

我不知道别人一样,但是屏幕位置的变化我每次更改焦点时会让我发疯* *。我希望只有当所需元素之一不完全位于视口内时才会滚动偏移量。 – 2009-12-03 13:45:00

+0

我的答案也适合你吗?如果/为什么不能满足你的问题,请提供一个评论 – jitter 2009-12-04 19:21:01

+0

@Pekka我同意这是一个奇特的行为,并会谨慎使用,因为它会很烦人。试图想出一个合适的解决方案 - 也许只有当“标签”不在焦点上或者可以使幻灯片动画化时,才将焦点放在中间。否则,还有哪些其他方法可以保持从页面折叠填充的焦点输入? – 2009-12-07 03:19:38

回答

14

您可以绑定到焦点事件,然后计算字段的偏移量并将其居中在屏幕上。

$(':input').focus(function(){ 
    var center = $(window).height()/2; 
    var top = $(this).offset().top ; 
    if (top > center){ 
     $(window).scrollTop(top-center); 
    } 
}); 
+0

我认为这是对我的问题最简单的解决方案,但正如所评论的那样,该操作不是标准操作,并且在大多数情况下可能是令人讨厌的操作 - 需要稍微重新定义该问题才能对此解决方案有实际的使用。 – 2009-12-07 00:54:36

+0

做了一些检查,它得到的值正确,但窗口或文档scrollTop()不想玩球...我已经改变了这个div id(#div).scrollTop几乎这样做,但不是'这与我所期望的身体或窗户一致。 – 2009-12-07 03:17:18

+0

Firefox和/或Chrome有时会出现问题。你可以试试'$('html,body')。animate({scrollTop:top - center},300);'这对我有用 – schemar 2015-04-10 14:43:08

1

最简单的事情将是包括jQuery ScrollTo pluginjQuery Viewport插件。

然后将每个输入+相关的其他元素(验证响应,....)包装在一个div中。

重点检查div是否完全可见,如果不使用scrollTo。完成。

当然这有点膨胀,但如果你可以忍受2个更多的依赖和一个额外的〜4kb这应该工作,而不需要自己做计算。

1

从上面平滑滚动效果

$(':input').focus(function() { 
     var center = $(window).height()/2; 
     var top = $(this).offset().top; 
     if (top > center) { 
      $('html, body').animate({ scrollTop: top - center }, 'fast');    
     } 
    }); 
+1

太棒了!多谢,伙计。 – 2017-04-06 00:31:17

相关问题