您现在的位置是:网站首页> 编程资料编程资料
html5实现输入框fixed定位在屏幕最底部兼容性详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容AndroidHTML 5 input placeholder 属性如何完美兼任ieHTML5 input元素类型:email及url介绍html5 input属性使用示例HTML5输入框下拉菜单功能的示例代码HTML5中input输入框默认提示文字向左向右移动的示例代码
                    
                
                2021-08-30
                1309人已围观
            
简介 这篇文章主要介绍了html5实现输入框fixed定位在屏幕最底部兼容性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1、问题由来
做h5 已经有很长一段时间了,现在做的工作h5比pc上的更多,曾经解决pc端IE各个版本的兼容性也是伤透脑筋,原以为h5的会更好,殊不知,还有更头疼的问题,当设计师要设计一个聊天窗口,把输入框定位在最底部,这是再常见不过的问题了吧,举例:

上图就是我最近做的一个功能,原以为是很简单的一个定位功能,但是没想到牛逼的测试居然用各种iphone,各种安卓,各种浏览器(qq浏览器、safari、opera等浏览器),各种输入法(系统自带、搜狗输入法),测出来一大堆问题,最后经过千辛万苦,终于做到了能大致兼容。
2、初步解决
1)、结构布局于第一次解决

 //1部分css .header { width: 100%; height: 40px; } //2部分 .body { width: 100%; overflow: auto; } //3部分 .footer { width: 100%; height: 30px;position: fixed; bottom:0;left:0;right:0; }会话问诊
 $('.body').css('height', $(window).height() - 39); $('#input').on('focus', function () { setTimeout(function () { window.scrollTo(0, 1000000); }, 200); });这种布局方法就让中间".body"中的内容在".body"中滚动,对整个html中的body产生了1px的滚动,此处滚动的目的是为了执行"window.scrollTo(0, 1000000);",经过测试,若body没有产生滚动,则这个方法是不会执行的。
相信很多人都会以 以上的方法解决input在弹出键盘时候的问题,当键盘弹出来后,就让滚动条一直往下面滚直到滚动到最下面,没错,这种措施之后能保证大部分的正常,但是在safari浏览器中就出现了问题,由于safari浏览器下部有一块

图中是safari浏览器自带的一块标签,当使用以上滚动时,你会发现,他虽然是滚动上去了,但是也会出现一块空白,没错,相当于给你的感觉是滚动上去过多,那么此时,也会被测试打回,是不是感觉很伤心无助,(safari浏览器把下面那块当作了body的东西,他自己实现了一块,把我们的html内容装在了他自己实现的容器里面)
2)、进一步解决
经过大量的比较与测试,我发现了一个问题,safari下面的自带输入法根本不用处理,键盘依然可以正常弹出与收起。(ps:safari浏览器没有特别的判断,因此此处判断过于复杂,如有更好的判断,请留言,谢谢!此处之所以判断safari浏览器并不是判断QQ浏览器,是因为测试了opera浏览器的展示等跟QQ浏览器一样,因此此处就判断safari浏览器)
 $('input').on('focus', function () { var agent = navigator.userAgent.toLowerCase(); setTimeout(function () { if (agent.indexOf('safari') != -1 && agent.indexOf('mqqbrowser') == -1 && agent.indexOf('coast') == -1 && agent.indexOf('android') == -1 && agent.indexOf('linux') == -1 && agent.indexOf('firefox') == -1) { //safari浏览器 } else {//其他浏览器 window.scrollTo(0, 1000000); } }, 200); });3)、再次优化与解决
经过以上几步骤,原以为完美无缺的解决方案,可以达到很好的兼容了,可是意外又发生了,测试们用了搜狗输入法来做测试,问题又来了,苹果手机自带的输入法的实现是把body挤上去,搜狗则是在得到focus之后,直接弹出的一块遮罩层,这就导致了问题,此时我们的输入框被挡在了输入法之后,因此又增加了下面的判断与处理,
 $('input').on('focus', function () { setTimeout(function () { if (agent.indexOf('safari') != -1 && agent.indexOf('mqqbrowser') == -1 && agent.indexOf('coast') == -1 && agent.indexOf('android') == -1 && agent.indexOf('linux') == -1 && agent.indexOf('firefox') == -1) {//safari浏览器 if(scope.$txtWrap.offset().top-winobj.scrollTop() > document.body.offsetHeight/2) { //说明软键盘遮盖页面 window.scrollTo(0, winobj.height() - 270); } } else {//其他浏览器 window.scrollTo(0, 1000000); } }, 200); });3、解决
经过几次测试,看似几乎没问题,最后又在iphone5上面的QQ浏览器中用搜狗输入法又测试出了问题,它在第一次点击当input获取到第一次focus事件的时候,window执行了scrollTo方法,第二次,他不再执行,不难发现,系统是以为已经滚动到了下方,因此便不再执行,那么我又增加了一个事件
 $('input').on('blur', function () { window.scrollTo(0, 0); });终于大功告成,基本上解决了现在普遍浏览器中大部分搜狗和自带输入法对模拟fix的input定位问题。
总结最后解决js为:
 $('input').on('focus', function () { var agent = navigator.userAgent.toLowerCase(); setTimeout(function () { if (agent.indexOf('safari') != -1 && agent.indexOf('mqqbrowser') == -1 && agent.indexOf('coast') == -1 && agent.indexOf('android') == -1 && agent.indexOf('linux') == -1 && agent.indexOf('firefox') == -1) {//safari浏览器 if(scope.$txtWrap.offset().top-winobj.scrollTop() > document.body.offsetHeight/2) { //说明软键盘遮盖页面 window.scrollTo(0, winobj.height() - 270); } } else {//其他浏览器 window.scrollTo(0, 1000000); } }, 200); }); $('input').on('blur', function () { var agent = navigator.userAgent.toLowerCase(); setTimeout(function () { if (!(agent.indexOf('safari') != -1 && agent.indexOf('mqqbrowser') == -1 && agent.indexOf('coast') == -1 && agent.indexOf('android') == -1 && agent.indexOf('linux') == -1 && agent.indexOf('firefox') == -1)) {//非safari浏览器 window.scrollTo(0, 0); } }, 0); });重中之重,一定要让body产生滚动,不然以上方法依然无法解决。
最近同事又测出了我的方案对某些手机的不兼容性,所以他给出了另一个解决方案,经测试已经达到了几乎所有手机的兼容,下面提供给大家:
 inputFocus: function (e) { var winobj = $(window), scope = this, agent = navigator.userAgent.toLowerCase(); setTimeout(function () { if (agent.indexOf('safari') != -1 && agent.indexOf('mqqbrowser') == -1 && agent.indexOf('coast') == -1 && agent.indexOf('android') == -1 && agent.indexOf('linux') == -1 && agent.indexOf('firefox') == -1) {//safra浏览器 window.scrollTo(0, 1000000);//先滚动到最底部,再用scrollY得到当前的值,必须延迟 否则拿到的就是1000000 setTimeout(function(){ window.scrollTo(0, window.scrollY - 45);//45像素 所有浏览器都是这么高 }, 50) } else {//其他浏览器 window.scrollTo(0, 1000000); // window.scrollTo(0, ++this.scrollNum); } }, 200); },这是我解决这个问题的过程与实践,
到此这篇关于html5实现输入框fixed定位在屏幕最底部兼容性的文章就介绍到这了,更多相关html5输入框fixed定位兼容性内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- html5启动原生APP总结浅谈Html5页面打开app的一些思考Html5跳转到APP指定页面的实现Html5与App的通讯方式详解html5唤醒APP小记Html5如何唤起百度地图App的方法浅谈html5与APP混合开发遇到的问题总结Html5 APP中监听返回事件处理的方法示例HTML5页面中尝试调起APP功能HTML5页面音视频在微信和app下自动播放的实现方法HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
 - HTML5开发动态音频图的实现HTML5自定义mp3播放器源码html5中audio支持音频格式的解决方法HTML5实现音频和视频嵌入的方法详解移动端HTML5音频与视频问题及解决方案html5音频_动力节点Java学院整理HTML5中视频音频的使用详解浅谈Html5中视频 音频标签 进度条的问题使用HTML5在网页中嵌入音频和视频播放的基本方法HTML5中的音频和视频媒体播放元素小结HTML5制作酷炫音频播放器插件图文教程
 - HTML5公共页面提取作为公用代码的方法html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
 - wordpress添加Html5的表单验证required方法小结HTML如何对齐多个表单中的文本框的实现html表单控件禁用属性readonly VS disabled介绍HTML5表单验证特性(知识点小结)html中表单提交的实现HTML通过表单实现酒店筛选功能
 - AmazeUi Tree(树形结构) 应用小结AmazeUI 折叠面板的实现代码AmazeUI框架搭建的方法步骤(图文)AmazeUI 面板的实现示例AmazeUI 列表的实现示例AmazeUI导航的示例代码AmazeUI中各种的导航式菜单与解决方法
 - AmazeUI 折叠面板的实现代码AmazeUi Tree(树形结构) 应用小结AmazeUI框架搭建的方法步骤(图文)AmazeUI 面板的实现示例AmazeUI 列表的实现示例AmazeUI导航的示例代码AmazeUI中各种的导航式菜单与解决方法
 - AmazeUI框架搭建的方法步骤(图文)AmazeUi Tree(树形结构) 应用小结AmazeUI 折叠面板的实现代码AmazeUI 面板的实现示例AmazeUI 列表的实现示例AmazeUI导航的示例代码AmazeUI中各种的导航式菜单与解决方法
 - AmazeUI 面板的实现示例AmazeUi Tree(树形结构) 应用小结AmazeUI 折叠面板的实现代码AmazeUI框架搭建的方法步骤(图文)AmazeUI 列表的实现示例AmazeUI导航的示例代码AmazeUI中各种的导航式菜单与解决方法
 - AmazeUI 列表的实现示例AmazeUi Tree(树形结构) 应用小结AmazeUI 折叠面板的实现代码AmazeUI框架搭建的方法步骤(图文)AmazeUI 面板的实现示例AmazeUI导航的示例代码AmazeUI中各种的导航式菜单与解决方法
 - 详解如何使用rem或viewport进行移动端适配吃透移动端 1px的具体用法postcss-pxtorem移动端适配的实现移动端适配 使px自动转换remHtml5移动端适配IphoneX等机型的方法浅谈移动端适配大法html5实现移动端适配完美写法
 
                                
                                                        
                                
                                                        
                                
                                                        
    