1. 背景
最近在开发中遇到这样一个问题:页面中有一个输入框input
,一个 Modal 框modal
,一个点击打开 Modal 框的按钮btnOpenModal
,和一个提交表单的提交按钮submit
。当input
获得焦点,键盘弹出时,如果直接点击btnOpenModal
,input
会失去焦点键盘收回,导致页面高度改变,modal
弹出后会有一个闪烁。所以需要在点击btnOpenModal
时,判断当前键盘是否弹出。
2. 方案
最初,考虑在点击按钮时获取输入框元素,判断它是否处于focus
状态,来判断键盘是否已弹出。但点击按钮之后,按钮就成为了document.activeElement
。此时输入框必然已失去焦点,导致无法通过该方法判断键盘是否弹出。
考虑监听输入框的focus
和blur
两个事件,当focus
触发时,为当前视图容器this.cnt
添加一个标识class
,假设为KEYBOARD_STATUS
;当blur
触发时,则移除该class
。当点击btnOpenModal
时,判断this.cnt
是否拥有KEYBOARD_STATUS
这个class
。如果有,则说明