我正在为iPad编写一个Web应用程序(不是常规App Store应用程序 - 它是使用HTML,CSS和JavaScript编写的).由于键盘填满了屏幕的大部分,因此在显示键盘时更改应用程序的布局以适应剩余空间是有意义的.但是,我发现无法检测键盘何时或是否显示.
我的第一个想法是假设当文本字段具有焦点时键盘可见.但是,当外接键盘连接到iPad时,当文本字段获得焦点时,虚拟键盘不会显示.
在我的实验中,键盘也没有影响任何DOM元素的高度或滚动高度,我没有发现任何专有事件或属性来指示键盘是否可见.
当我在手机上的 Chrome 中查看此页面时:
<!DOCTYPE html>
<html lang="en-au">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
</head>
<body>
<div style="position:fixed;bottom:0;right:0;background:#f00;width:50px;height:50px">
</div>
<div id="output">
</div>
<script>
setInterval(() => document.getElementById("output").innerHTML = `windowHeight: ${window.innerHeight}`, 37);
</script>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
第一次加载时,它看起来像这样:
在页面(任何地方)点击一次后,它会更改为:
从红框中可以看到,这也会影响position:fixed页面上元素的定位。这是我调查的开始,我已经缩减了页面以达到这一点,但无法弄清楚我做错了什么!
这种情况只发生在我的手机上的 Chrome (Android) 上。我还在桌面浏览器的响应式视图中进行了测试,但我无法让它发生。我的手机运行的是 Chrome 版本 111.0.5563.116,手机是华为 Y9 Prime 2019。
它也只发生在新标签上。如果加载页面,点击一次,然后重新加载页面,页面将在重新加载时保持右侧window.innerHeight。
我列出了所有这些详细信息,因为我担心这可能是一些奇怪的浏览器错误。这是一个错误吗?有解决方法吗?或者我做错了什么?
如何通过 CSS/JavaScript 告诉元素采用 100% 可见高度 = 100vh - 键盘高度?
嗨,我正在开发iphone应用程序,并希望在iphone中处理键盘事件.在Mac中,有一个NSEvent类可以处理键盘和鼠标事件,而在ios(iphone/ipad)中,NSEvent的对应物是UIEvent,它只处理触摸事件.我知道ios API不提供此功能,但我如何处理iphone中的关键事件?任何好的教程或者......开始......