【发布时间】:2012-10-07 19:41:45
【问题描述】:
我目前在一些严格的限制下工作,以限制我可以使用 JavaScript 做什么(例如,没有像 jQuery 这样的框架,并且在 Firefox 2.0 之后没有任何东西)。
这是我的问题;我在页面顶部浮动了一个持久标题。我的输入元素分散在各处(我们正在精确复制纸质表格,包括背景图像)。页面底部附近有一个字段被标记出来(使用键盘选项卡按钮)并将焦点放在页面顶部的字段上。 Firefox 将自动滚动“进入视图”字段。然而,虽然浏览器认为该字段在视图中,但它实际上隐藏在持久标头之下。
http://imageshack.us/a/img546/5561/scrollintoviewproblem.png
通过从页面上的另一个位置点击“标签”来访问上面的蓝色字段。浏览器认为该字段已滚动到视图中,但实际上它隐藏在在浮动持久标头之下。
我正在寻找关于如何检测该字段位于此标题下方并相应地滚动整个页面的想法。
我尝试了一些边距和填充的变体(请参阅http://code.stephenmorley.org/javascript/detachable-navigation/#considerations 的其他注意事项),但没有运气。每次我们关注一个字段时,我也尝试调用 JavaScript 函数“scrollIntoView(element)”,但考虑到表单上的字段数量(以及我们正在对齐它们以匹配论文的背景图像的事实准确的形式),这会导致一些非常严重的“跳跃”行为,当在彼此靠近但高度略有不同的字段中切换时。
我可以更改持久标头的完成方式,只要它不需要太多努力。不幸的是,框架是不可能的,因为我们需要与持久标题中的页面内容进行交互。
理想情况下,解决方案是 CSS,但如果 JavaScript 能解决我的问题,我愿意接受。
另外注意,我们要求输入元素具有背景颜色,这意味着向它们添加填充会使背景颜色拉伸,从而隐藏部分背景图像。但是,输入元素在一个 div 中,所以我们可以利用它来发挥我们的优势。
【问题讨论】:
-
我好像你可能需要为标题设置一个偏移量。这里有一些建议如何使用
scollIntoView函数进行偏移:forums.devshed.com/javascript-development-115/… -
this demo 是否很好地代表了您的问题?
-
@Kraz:那个演示实际上正好显示了我的问题。 @Axel:我会给那些 scrollIntoView 偏移建议一个机会,然后回复你。
-
onfocus 事件与 scrollTo 相结合(我无法让 scrollBy 工作:/)似乎是 work nicely (code)。
-
另一种解决方案可能是在页面顶部附近有一个无用的隐藏输入,您将专注于该输入,然后将焦点重定向到您的第一个表单元素。
标签: javascript css header persistent