如何让移动端网页的输入框固定在底部?

图片描述

如上图展示,在首页上用户点击输入框,弹出键盘,有时候会把输入框部分遮挡住(如下图)

图片描述

目前的处理方式是,当输入框获得焦点后,执行resize

$('input').on('focus' , function(){
    $(window).resize();
}).on('blur' , function() {
    $(window).resize();
});

这么做就是为了重置窗口大小,让本来浮动在底部的输入框,重新定位
但是效果不太好,时而生效,时而失效

图片描述

像这样的情况应该使用什么方式来更好的处理这个问题?
还有在弹出键盘的同时,滚动页面也能保持让输入区域固定在底部

目前输入框的定位方式是:position:fixed
截图环境:ios 微信端

阅读 10.8k
7 个回答

安卓浏览器在软键盘弹出后不会像iOS浏览器那样重新计算window的高度,所以导致安卓浏览器window的高度在软键盘弹出的时候为“软键盘的高度+(window的高度-软键盘的高度)”;而其实,此时,合理的高度应该是页面的高度+软键盘弹出的高度;就此解决方案为如下:

var winHeight = $(window).height(); //获取当前页面高度  
          $(window).resize(function() {  
              var thisHeight = $(this).height();  
              if (winHeight - thisHeight > 50) {  
                  //当软键盘弹出,在这里面操作  
                  //alert('aaa');  
                  $('body').css('height', winHeight + 'px');  
              } else {  
                  //alert('bbb');  
                  //当软键盘收起,在此处操作  
                  $('body').css('height', '100%');  
              }  
          });

如果ios有这个问题

在input 获得焦点 或者 单击事件里面添加

setTimeout(function () {

document.body.scrollTop = document.body.scrollHeight;

}, 500);

使用该方法解决了, 之前也试过让滚动条滚动到底部, 但是无效;现在加了个定时器之后可以了, 定时器时间自己调整, 设置了500ms才不会出现遮挡问题,自己多做下测试吧

输入框 你可以使用 flex 来固定到底部试试,flex 固定到底部可查考 sticky-footer

clipboard.png
这个div用fixed定位
当input获取焦点时,这个div改为绝对定位absolute
$(function(){

$("input").focus(function(){
    $("div").css("position","absolute");
});
$("input").blur(function(){
    $("div").css("position","fixed");
});

})

建议你用js去计算,使用 window.innerHeight

楼上说的对,可以用flex ,那些打广告的都是采用这个属性。我觉得这个能解决你的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题