`

webapp前端开发软键盘与position:fixed为我们带来的不便

 
阅读更多

转:http://www.th7.cn/web/html-css/201501/74695.shtml

 

 

前提:我们考虑兼容的环境为Android和Ios两种智能手机

兼容环境测试结果:Android的表现明显好于Ios Ios手机在软键盘呼起收起时存在着很严重的兼容性问题

场景展示:

页面正常状态

软键盘弹出时,悬挂元素丢失了指定位置

软键盘未通过点击完成而失去焦点时,页面渲染发生崩溃性错乱,手指滑动后页面会恢复正常

 

我们再来看市面上比较强势的webapp网站表现

场景展示:

淘宝等阿里旗下webapp网站均选择回避在页面上展示悬挂元素,或者在有悬挂元素时避免产生软键盘弹出事件

百度帖子回复采用了页面转场模式,即在当前页面渲染一个与本页面无冲突的新页面,这的确是一个很出色的办法,但是目前我们还没有在页面转场方面的研究和探索

百度贴吧搜索采用了设置固定的滚动区域,但是触屏滑动动作在页面滚动和区域滚动之间的体验很差

 

现在我们来看webapp前端开发中,软键盘基本工作原理:输入框聚焦时,软键盘弹出;如输入框在可视界面底部,软键盘弹出将遮挡它时,整个可视界面模块会被软键盘自动推上去,从而保持聚焦的输入框在我们可视范围

从viewport和软键盘的原理上我们无从入手,我们甚至无法发现软键盘弹出事件,无法获取软键盘高度,也无法通过输入框聚焦与否判断软键盘是否弹出,于是只好选择寻找合适该前提条件的兼容方法

 

市面上诞生诸如iscroll等webapp前端开发框架,在html页面上设置固定的滚动区域,并从用户感知体验上优化了触屏滑动动作在页面滚动和区域滚动之间的冲突

它的原理是通过让html页面上的滚动元素与悬挂元素分离,从而避免软键盘弹出时,对悬挂元素产生影响,外在表现是悬挂元素的工作方式不再是试图吸附在可视界面的指定位置,因此因悬挂带来的问题也就消失了

由此可以分析出iscroll解决问题的核心思路是——回避position:fixed产生

 

于是我们最终选择在Ios下使用iscroll开发框架的方案来解决该问题

但是该方案并非就没有自身的问题,如果页面上输入框元素在页面最底部,软键盘唤起时将产生输入框间歇性对焦不工作的问题,导致聚焦元素被唤起的软键盘遮挡

该问题导致用户输入文本内容时的体验将会非常差

场景展示:

软键盘弹出正常时

软键盘弹出间歇性不正常时

 

在我们现有技术认知水平情况下,采取的方案是被动妥协的,我们的建议是在产品设计原型上,尽量回避输入框元素出现在页面最底部的场景

 

还有部分Android手机机型、版本、浏览器也不支持position:fixed属性

通过userAgent取得该手机的部分特性,然后与Ios同样处理,后遗症是一般这样的手机比较落后,iscroll开发框架带来的渲染会造成页面滑动时很卡,甚至是抽搐状态

userAgent代码输出示例:

document.write(navigator.userAgent);

 

如今手机端开发的前景上,webapp正在飞速扩张,和naturalapp呈现出并驾齐驱的态势;webapp有着自身不可替代的优势,也有着很多难以克服的弱点,其中之一正是软键盘与position fixed的冲突,该问题的解决势必如同ie6一样将是一个长期探索兼容的过程,也同样需要webview的努力与支持

 

分享到:
评论

相关推荐

    idea开发webapp 热部署

    idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发webapp 热部署idea开发...

    前端开发是创建WEB页面或APP等前端界面呈现给用户的过程,它涉及到多个方面和关键技术 以下是对前端开发的详细概述: 一、前端

    ### 前端开发概述及关键技术 #### 一、前端开发定义 前端开发是指通过HTML、CSS、JavaScript等技术手段构建网络应用程序(如Web应用或移动应用)的用户界面和交互逻辑的过程。其核心目标在于提供一个直观且用户...

    webkit webApp 开发技术要点总结

    本文将深入探讨WebKit WebApp开发中的核心知识点,包括视口管理、链接资源优化以及事件处理机制,旨在帮助前端开发者更好地掌握移动Web开发技巧。 #### 一、Viewport:掌控可视区域 Viewport是移动设备浏览器中...

    2020年小白学习Web前端的最新学习路线指南.docx

    * 主要内容:Node.js后端开发、Vue.js前端框架、React前端框架、混合开发(Hybrid,RN)、Angular前端框架、大数据可视化等。 * 学习要点:Node.js的应用、Vue.js和React.js的使用、混合开发的原理和实现、大数据可视...

    Android应用程序之WebApp开发实战

    在Android平台上,WebApp开发是一项重要的技能,它允许开发者利用Web技术来构建应用程序,从而减少了对原生开发的依赖。本篇文章将深入探讨Android WebApp开发的各个方面,旨在为开发者提供一个全面的理解和实践指导...

    webapp前端UI框架之MUI使用教程.zip

    webapp前端UI框架之MUI使用教程.zip

    camunda-webapp-webjar-7.13.0.jar

    项目名称 camunda BPM - webapp - webjar 项目主页 隶属组织 开源协议 仓库 Central 类库 camunda BPM - webapp - webjar 标签 javabpmnworkflowdmnbpmprocess-enginecamunda-bpm-platformcamunda-enginecmmn

    webapp前端UI框架之SUI使用教程.zip

    webapp前端UI框架之SUI使用教程.zip

    组件方式开发webApp源码

    在WebApp组件化开发中,我们通常会使用一些前端框架或库,如React、Vue.js或Angular,它们都支持组件化编程模型。这些框架提供了强大的生命周期管理、状态管理和渲染机制,使得构建组件变得容易。 例如,React是一...

    webapp前端UI框架之微信UI使用教程.zip

    webapp前端UI框架之微信UI使用教程.zip

    iPhone WebApp 开发指南

    总的来说,《iPhone WebApp 开发指南》将带领开发者深入理解iPhone WebApp的开发过程,从基础的前端技术到iOS特有的交互设计,再到离线存储和服务 worker,全方位提升WebApp的用户体验和功能性。通过实践和学习,...

    webapp开发综合案例

    1.了解Web工程概念及与传统软件工程的区别 2.理解WebApp的概念、特点和开发过程 3.掌握WebApp的分析、设计和测试方法 4.掌握WebApp综合开发方法及课程设计过程

    苹果iPhone_WebApp_开发指南

    总之,苹果iPhone WebApp开发是一个结合Web技术与移动设备特性的过程,需要开发者具备扎实的Web基础知识,理解移动设备的交互特点,并掌握相关的开发工具和框架。通过不断学习和实践,开发者可以创造出富有创新性和...

    web前端开发笔记 边读边写学前端开发

    在PC端软件与移动App之间,App是安装在移动设备上的应用程序,可以分为原生App(使用原生语言如Android或iOS开发)、WebApp(在浏览器中运行的Web应用)和Hybrid App(结合了原生与WebApp特点的混合应用)。...

    基于Vue.js的废品大人webApp前端设计源码

    该项目是一款基于Vue.js框架开发的废品回收管理webApp前端设计源码。该源码集成了92个文件,其中包括49个JavaScript文件、21个Vue组件文件、3个Markdown文件、3个CSS样式文件、2个PNG图片文件、2个HTML模板文件、2个...

    前端开发简历模板-Web前端开发-两年-北京.doc

    *与产品、后台开发人员保持良好沟通,能快速理解、消化各方需求,并落实为具体的开发工作 9. 项目描述: *口腔服务(小程序):一个简单的口腔诊所小程序,对牙齿的保护修正,治疗各种牙齿的疾病等,对如何保护...

    JSP WebApp jsp应用开发好实例

    在"JSP WebApp jsp应用开发好实例"中,我们可以学习到如何构建一个完整的Web应用程序,这通常包括以下几个核心知识点: 1. **基本结构**:了解一个JSP WebApp的基本目录结构,如WEB-INF目录下的web.xml文件,它是...

    webapp开发利器[参照].pdf

    此外,iPhone早期版本不支持`position:fixed`,这对于某些布局设计是个挑战。 在实际开发中,使用iscroll可能遇到的问题及解决方案包括: 1. **鼠标滚轮控制不灵敏**:在PC端,iscroll的滚动可能不如鼠标滚轮自然...

Global site tag (gtag.js) - Google Analytics