移动端软键盘弹出 input位置顶到可视区域
当移动端软键盘弹起时,将input滚动到可视区域。 具体代码如下:
当移动端软键盘弹起时,将input滚动到可视区域。
具体代码如下:
/**
* 检测手机输入法软键盘是否弹出
* @param {Function} cb 回调,出参true/false,分别代表键盘弹出或收起
*/
export const fn_isShowKeyboard = (cb) => {
const winHeight = window.innerHeight;
window.onresize = () => {
let thisHeight = window.innerHeight;
// 软键盘高度
const softKeyHeight = winHeight - thisHeight;
if (softKeyHeight > 50) {
//当软键盘弹出,在这里面操作
cb(true, softKeyHeight, winHeight)
} else {
//当软键盘收起,在此处操作
cb(false)
}
}
}
/**
* 将Focus后的input移入可见视图
* 注: 方法中的选择器,可视页面元素情况而定
*/
export const putInputToView = () => {
fn_isShowKeyboard((isShow, softKeyHeight, winHeight) => {
// 父容器
const qb_content = document.querySelector('.parent_content');
if (!isShow) {
qb_content.scrollTop = 0;
};
let dynamicHeight = '100%';
if (isShow) {
dynamicHeight = window.innerHeight + 'px';
}
const activeElement = document.activeElement,
elType = activeElement.getAttribute('type'),
needChangArr = ['password', 'text', 'textarea'];
document.querySelector('body').style.height = dynamicHeight;
if (needChangArr.indexOf(elType) > -1) {
const elOffsetTop = activeElement.offsetTop;
const eleHeight = activeElement.clientHeight;
setTimeout(() => {
const diff = winHeight - softKeyHeight;
qb_content.scrollTop = diff > elOffsetTop ? 0 : elOffsetTop - softKeyHeight + eleHeight;
}, 20);
}
})
}
- 在页面加载后调用
putInputToView()