移动端H5开发时,input获得焦点弹出软键盘会将input遮挡住,想要实现的效果是:
像掘金APP的登录那样,软键盘弹出时将整个输入框那一块布局向上顶一段距离,而下面的第三方登录部分不变,有没有人做过这样的,求解决方法
移动端H5开发时,input获得焦点弹出软键盘会将input遮挡住,想要实现的效果是:
像掘金APP的登录那样,软键盘弹出时将整个输入框那一块布局向上顶一段距离,而下面的第三方登录部分不变,有没有人做过这样的,求解决方法
let coordinateY;
let offsetY;
function tapCoordinates(event) {
const viewPortHeight = window.innerHeight;
coordinateY = event.touches[0].clientY;
offsetY = (viewPortHeight - coordinateY);
}
function keyboardShowHandler(event) {
const keyboardHeight = event.keyboardHeight;
const bodyMove = <HTMLElement>document.querySelector('ion-app');
const bodyMoveStyle = bodyMove.style;
const compensationHeight = 80;
if (offsetY < keyboardHeight + compensationHeight) {
bodyMoveStyle.top = -compensationHeight + 'px';
bodyMoveStyle.height = window.innerHeight + compensationHeight + 'px';
}
}
function keyboardHideHandler() {
const removeStyles = <HTMLElement>document.querySelector('ion-app');
removeStyles.removeAttribute('style');
}
window.addEventListener('native.keyboardshow', keyboardShowHandler);
window.addEventListener('native.keyboardhide', keyboardHideHandler);
window.addEventListener('touchstart', tapCoordinates);
我是拿ionic3做的,仅供参考
个人的解决方案:IOS自动顶(但下部多余很多空白,你没遇到,所以略)
安卓:focus的时候,给页面外层box绑定事件(addEvent...),box设置定位,整体上移Yrem(上移尺寸最好是按input框距顶部距离,rem基本能适配正常手机,但部分手机宽高不成比例)
同理,第三方登录也是focus时定位,然后设置距离顶部的距离
blur的时候,remove刚刚设置的所有属性
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
之前用vue的时候iphone没事,安卓才会这样,
写了一个 vue-directive的绑定.
通过的原理是这样,
获取当前绑定的input框,在可视窗口里面的top,
然后去获取当键盘弹起时的, innerHeight,
然后计算下面几种场景,
代码如下 可供参考