javascript - 如何检测Web中是否显示手机键盘?

标签 javascript android reactjs web keyboard

我一直在使用下面的代码,但是当键盘可见时什么也没有发生。 我已经检查过,window.screen.height 没有改变。

class TestPage extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      keyboardIsShown: false,
    };
  }

  componentDidMount() {
    this.initialScreenSize = window.screen.height;

    this.keyboard = setInterval(() => {
      if (this.initialScreenSize !== window.screen.height) {
        !this.state.keyboardIsShown && this.setState({ keyboardIsShown: true });
      } else {
        this.state.keyboardIsShown && this.setState({ keyboardIsShown: false });
      }
    }, 800);
  }

  componentWillUnmount() {
    clearInterval(this.keyboard);
  }

  ...
}

最佳答案

通过使用 window.innerHeight 解决了 Android 设备的问题。

class TestPage extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      keyboardIsShown: false,
    };
  }

  componentDidMount() {
    this.initialScreenSize = window.innerHeight;

    this.keyboard = setInterval(() => {
      if (this.initialScreenSize !== window.innerHeight) {
        !this.state.keyboardIsShown && this.setState({ keyboardIsShown: true });
      } else {
        this.state.keyboardIsShown && this.setState({ keyboardIsShown: false });
      }
    }, 800);
  }

  componentWillUnmount() {
    clearInterval(this.keyboard);
  }

  ...
}

关于javascript - 如何检测Web中是否显示手机键盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60371961/

相关文章:

javascript - smoothstate.js - 后退按钮有时不起作用?

javascript - 将对象从 SQL 查询函数传递到单独的函数

javascript - 在 IE 和 Edge 中,在子窗口上调用 acquireNode 和 importNode 失败

android - 合并 dex 文件时出错

Android 异步任务 : async-task for each viewpager fragment

javascript - 在 React/JSX 中将花括号呈现为纯文本

javascript - 在 React-Three-Fiber 中渲染索引缓冲区几何

android - 无法在 Android Studio 中解析符号,代码没问题

javascript - TypeError : data. map 不是 JavaScript 中的函数

reactjs - 如何在 React 中渲染 HTML 字符串?