—余杰 2016-5-9
键盘:
键盘是一个非常特别的设备,说特别是因为,不同的手机对于键盘对于html页面的布局的实现不同。
ios对于从下方推出键盘的时候,如果输入控件在页面推出之后,在键盘的高度的上方的话,则键盘是以一个浮层的方式弹出,并且将那个触发的控件推到键盘的上方。如果那个控件在页面底部,如果推出的键盘会覆盖该控件,系统会将整个页面向上推,直到将那个控件推到键盘上方为止。
而android的实现的不同,有部分的android的实现和ios一样,有些android的机型的实现却不同,如果发现触发的input控件比键盘的高度底的时候,会自动将整个document的高度增加,增加到这个控件的高度超过键盘的高度为止。
解决方案是监听所有控件的事件,出现focus的时候,动态计算当前的位置,重新设置。input尽可能不要嵌入过于复杂的层次中,加上比较复杂的css的位置属性,以免造成计算错误。
键盘的类型 在手机上有各种键盘类型,比较常用的键盘有全键盘,数字键盘,符号键盘,email键盘,搜索键盘,金额键盘,电话键盘等。
我们知道在iOS中,当虚拟键盘弹出时,默认情况下键盘是开启首字母大写的功能的,根据某些业务场景,可能我们需要关闭这个功能,移动版本webkit为input元素提供了autocapitalize属性,通过指定autocapitalize=”off”来关闭键盘默认首字母大写。
页面滚动:
页面滚动是非常常用的功能,不过在原生手机上,无法支持局部滚动的,不过ios5之后,出现了一个支持局部滚动的CSS属性,-webkit-overflow-scrolling: touch的属性,不过里面有一定的缺陷,在某些滚动中,会失效,因此建议不使用。
在页面进行惯性滑动的时候(手指松开的滑动),出于性能的考虑,浏览器是会把页面上的渲染进行锁定的状态。也就说,当页面进行滑动的时候,js动态修改上面的元素是无效的。直到页面滚动停止,这是个非常特殊的规则。
在手机上页面渲染的工作都由CPU来执行,由于CPU本身的执行频率有限,当页面出现大量的渲染变化的时候,会出现卡顿现象。比如长列表滑动,页面切换动画等等
在ios的系统里,就算网页头了,还能继续往上面拉,有一个力反馈的效果。
判断一个app是web还是native的,就可以通过这种方式来判断,拉到顶,再往上拉,如果能网上拉,并且出现的不是上拉刷新,而是一个ios的默认背景,则就是web了,不过反之不一定是native
a