【问题标题】:WinJS: Scroll issues when soft-keyboard is displayedWinJS:显示软键盘时出现滚动问题
【发布时间】:2016-08-29 19:51:10
【问题描述】:

我有一个 Windows 商店应用程序,中间有一列可滚动的文本。在顶部和底部,我想要固定的小部件在滚动时不会移动。

我已经使用一些非常简单的 html 让它工作得很好

但是,当显示软键盘/触摸键盘时,窗口底部是隐藏的(我原以为它会调整大小)并且内容在滚动到最后之前是看不见的。我可以看到这对于某些应用程序来说可能工作得很好,但对我来说这是一场灾难。当我将中心文本列滚动到最后时,底部的小部件被键盘遮挡,顶部的小部件滚动到视图之外。

这是一个imgur gallery 的屏幕截图,说明了我的意思。两个小时后我放弃了尝试截屏。

这是我的演示应用程序的来源 https://dl.dropboxusercontent.com/u/568631/ninjaScroll2.zip

我可以检测到键盘何时显示或隐藏,但我似乎对此无能为力。我无法调整窗口大小(无法设置 window.height)。我可以将底部小部件移动到键盘位置的正上方,但窗口在到达最低点时仍会滚动,然后顶部小部件就消失了。

有人有解决这个问题的方法吗?有没有办法控制实际的窗口高度,或者停止这种奇怪的视口滚动效果?

【问题讨论】:

    标签: html css scroll windows-store-apps winjs


    【解决方案1】:

    一旦内容窗口滚动到最大 100%(隐藏在键盘下方),窗口本身就会开始向上滚动,隐藏左上角/顶部中心/右上角的 div

    我无法重现这种情况。在我身边,当滚动到 100% 时,触摸键盘也覆盖了窗口的底部,并且窗口本身并没有开始滚动。我的目标是 SDK 14393。

    我可以将底部小部件移动到键盘位置的正上方,但窗口在到达最低点时仍会滚动,然后顶部小部件就消失了。

    您的目标是正确的方向。触摸键盘打开时,会显示窗口滚动条,以便您在触摸键盘打开时滚动到底部。因此,当您将内容滚动到底部并继续滚动时,窗口将被“向上拉”。

    所以,解决方法是调整window.onscrolling中底部div的位置:

    default.js:

    var windowHeight = window.innerHeight;
    var inputPane = Windows.UI.ViewManagement.InputPane.getForCurrentView();
    ...
    window.onscroll = function (evt) {
        //change the position of bottom div
        var myDiv = document.getElementById("myDiv");
        myDiv.style.top = window.pageYOffset+"px";
    }
    
    inputPane.onshowing = function (eventArgs) {
        document.getElementById("myDiv").style.height = windowHeight-eventArgs.occludedRect.height+"px";
    }
    
    inputPane.onhiding = function (eventArgs) {
        document.getElementById("myDiv").style.height = windowHeight + "px";
    }
    

    default.html:

    <div id="myDiv" style="position:absolute;height:100%;width:100%;">
        <div style="position:absolute;top:2vh;left:2vw">top left</div>
        <div style="position:absolute;top:2vh;right:50vw">top center</div>
        <div style="position:absolute;right:2vw">top right</div>
    
        <div style="position:absolute;top:50vh;left:2vw">middle left</div>
        <div style="position:absolute;top:50vh;right:50vw">middle center</div>
        <div style="position:absolute;top:50vh;right:2vw">middle right</div>
    
        <div style="position:absolute;bottom:2vh;left:2vw">bottom left</div>
        <div style="position:absolute;bottom:2vh;right:50vw">bottom center</div>
        <div style="position:absolute;bottom:2vh;right:2vw">bottom right</div>
    </div>
    

    注意事项:为了简化问题,我使用了一个div来包装固定的内容。并通过改变div的高度来调整位置。

    这里是完整演示的链接:ninjaScroll2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      相关资源
      最近更新 更多