在Windows 8应用程序中调用应用栏会导致滚动的子div跳转到顶部

时间:2013-04-18 18:37:41

标签: windows-8 winjs

我在使用WinJS,javascript和HTML构建的Windows8应用程序中遇到了奇怪的行为。在我正在实现的特定页面中,有几个div具有这样的CSS规则:

.col {
  border: 1px solid none;
  overflow-x: hidden;
  overflow-y: auto;
  height: 100%;
  margin: 0px;
  width: 100%;
}

问题是当我通过右键单击调用主应用栏时,div中的滚动内容会捕捉到div的顶部。换句话说,div的滚动位置丢失了。我已经尝试了很多方法来修复,但什么都没有出现。如何在调用App Bar时阻止滚动内容跳转。

谢谢!

2 个答案:

答案 0 :(得分:0)

建议为页面使用-ms-grid。在这种情况下,应用栏将与div重叠,这是正常的行为,您也可以在其他应用中看到这种行为。

HTML:

<div class="test5 fragment">
    <header aria-label="Header content" role="banner">
        <button class="win-backbutton" aria-label="Back" disabled type="button"></button>
        <h1 class="titlearea win-type-ellipsis">
            <span class="pagetitle">test page</span>
        </h1>
    </header>
    <section class="content" aria-label="Main content" role="main">
        <div class="test-content">
            Text here.
        </div>
    </section>
</div>
<div id="appbar" data-win-control="WinJS.UI.AppBar">
    <button data-win-control="WinJS.UI.AppBarCommand" data-win-options="{id:'cmd', label:'Command', icon:'placeholder'}" type="button"></button>
</div> 

的CSS:

.test5.fragment section[role=main] {
    display: -ms-grid;
    -ms-grid-rows: 1fr;
    -ms-grid-columns: 1fr;
}

答案 1 :(得分:0)

@Sushil是对的。 AppBar是一个叠加控件,所以你应该将它放在片段div旁边,而不是放在它里面。 @ Sushil的代码显示了如何做到这一点。

在片段中放置一个appbar会产生性能损失,因为每次用户导航到该页面时都需要渲染它。另一个不良副作用是appbar的所有输入都将传播到片段。这是你面临的问题。

理论上,您可以收听各种输入事件,包括鼠标,键盘,触摸和调用preventDefault。但不建议这样做。