移动 Web 开发技巧

第1、启用 WebApp 全屏模式(IOS)
当网站添加到主屏幕后再点击进行启动时,可隐藏地址栏(从浏览器跳转或输入连接进入并无此效果)
<meta name="apple-mobile-web-app-capable" content="yes" /><meta name="apple-touch-fullscreen" content="yes" /><!--more-->
第2、加到主屏后的APP图标
指定web app添加到主屏后的图标路径,有两种略微不一样的方式:
<!– 设计原图 –>
<link href="short_cut_114x114.png" rel="apple-touch-icon-precomposed">
<!– 添加高光效果 –>
<link href="short_cut_114x114.png" rel="apple-touch-icon">
* apple-touch-icon:在IOS6及如下的版本会自动为图标添加一层高光效果(IOS7开始已使用扁平化的设计风格) * apple-touch-icon-precomposed:使用“设计原图图标”
第3、优先使用最新版本 IE 和 Chrome
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
第4、移动端touch事件(区分webkit 和 winphone)
当用户手指放在移动设备在屏幕上滑动会触发的touch事件
如下支持webkit
  • touchstart——当手指触碰屏幕时候发生。无论当前有多少只手指
  • touchmove——当手指在屏幕上滑动时连续触发。一般咱们再滑屏页面,会调用event的preventDefault()能够阻止默认状况的发生:阻止页面滚动
  • touchend——当手指离开屏幕时触发
  • touchcancel——系统中止跟踪触摸时候会触发。例如在触摸过程当中忽然页面alert()一个提示框,此时会触发该事件,这个事件比较少用
如下支持winphone 8
  • MSPointerDown——当手指触碰屏幕时候发生。无论当前有多少只手指
  • MSPointerMove——当手指在屏幕上滑动时连续触发。一般咱们再滑屏页面,会调用css的html{-ms-touch-action: none;}能够阻止默认状况的发生:阻止页面滚动
  • MSPointerUp——当手指离开屏幕时触发
第5、移动端click屏幕产生200-300 ms的延迟响应
移动设备上的web网页是有300ms延迟的,玩玩会形成按钮点击延迟甚至是点击失效。
如下是历史缘由:
2007年苹果发布首款iphone上IOS系统搭载的safari为了将适用于PC端上大屏幕的网页能比较好的展现在手机端上,使用了双击缩放 (double tap to zoom)的方案,好比你在手机上用浏览器打开一个PC上的网页,你可能在看到页面内容虽然能够撑满整个屏幕,可是字体、图片都很小看不清,此时能够快速 双击屏幕上的某一部分,你就能看清该部分放大后的内容,再次双击后能回到原始状态。
双击缩放是指用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页缩放至原始比例。
缘由就出在浏览器须要如何判断快速点击上,当用户在屏幕上单击某一个元素时候,例如跳转连接<a href=”#”></a>, 此处浏览器会先捕获该次单击,但浏览器不能决定用户是单纯要点击连接仍是要双击该部分区域进行缩放操做,因此,捕获第一次单击后,浏览器会先Hold一段 时间t,若是在t时间区间里用户未进行下一次点击,则浏览器会作单击跳转连接的处理,若是t时间里用户进行了第二次单击操做,则浏览器会禁止跳转,转而进 行对该部分区域页面的缩放操做。
那么这个时间区间t有多少呢?在IOS safari下,大概为300毫秒。这就是延迟的由来。形成的后果用户纯粹单击页面,页面须要过一段时间才响应,给用户慢体验感受,对于web开发者来讲 是,页面js捕获click事件的回调函数处理,须要300ms后才生效,也就间接致使影响其余业务逻辑的处理。
解决方案:
  • fastclick能够解决在手机上点击事件的300ms延迟
  • zepto的touch模块,tap事件也是为了解决在click的延迟问题
触摸事件的响应顺序
一、ontouchstart
二、ontouchmove
三、ontouchend
四、onclick
解决300ms延迟的问题,也能够经过绑定ontouchstart事件,加快对事件的响应
第6、ios系统中元素被触摸时产生的半透明灰色遮罩怎么去掉
ios用户点击一个连接,会出现一个半透明灰色遮罩, 若是想要禁用,可设置-webkit-tap-highlight-color的alpha值为0,也就是属性值的最后一位设置为0就能够去除半透明灰色遮罩
a,button,input,textarea{-webkit-tap-highlight-color: rgba(0,0,0,0;)}
第7、部分android系统中元素被点击时产生的边框怎么去掉
android用户点击一个连接,会出现一个边框或者半透明灰色遮罩, 不一样生产商定义出来额效果不同,可设置-webkit-tap-highlight-color的alpha值为0去除部分机器自带的效果
a,button,input,textarea{    -webkit-tap-highlight-color: rgba(0,0,0,0;)    -webkit-user-modify:read-write-plaintext-only;}
-webkit-user-modify有个反作用,就是输入法再也不可以输入多个字符
另外,有些机型去除不了,如小米2
对于按钮类还有个办法,不使用a或者input标签,直接用div标签
第8、手机拍照和上传图片
  • <input type=”file”>的accept 属性
  • <!– 选择照片 –>
  • <input type=file accept=”image/*”>
  • <!– 选择视频 –>
  • <input type=file accept=”video/*”>
使用总结:
  • ios 有拍照、录像、选取本地图片功能
  • 部分android只有选取本地图片功能
  • winphone不支持
  • input控件默认外观丑陋
第9、消除transition闪屏
.css{    /*设置内嵌的元素在 3D 空间如何呈现:保留 3D*/    -webkit-transform-style: preserve-3d;    /*(设置进行转换的元素的背面在面对用户时是否可见:隐藏)*/    -webkit-backface-visibility: hidden;}
开启硬件加速
  • 解决页面闪白
  • 保证动画流畅
.css { -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0);}
设计高性能CSS3动画的几个要素
  • 尽量地使用合成属性transform和opacity来设计CSS3动画,
  • 不使用position的left和top来定位
利用translate3D开启GPU加速
第10、audio元素和video元素在ios和andriod中没法自动播放
应对方案:触屏即播
$('html').one('touchstart',function(){    audio.play()})
1、移动端手机号码的识别
在 iOS Safari (其余浏览器和Android均不会)上会对那些看起来像是电话号码的数字处理为电话连接,好比:
  • 7位数字,形如:1234567
  • 带括号及加号的数字,形如:(+86)123456789
  • 双链接线的数字,形如:00-00-00111
  • 11位数字,形如:13800138000
可能还有其余类型的数字也会被识别。咱们能够经过以下的meta来关闭电话号码的自动识别:
<meta name="format-detection" content="telephone=no" />
开启电话功能
<a href="tel:123456">123456</a>
开启短信功能:
<a href="sms:123456">123456</a>
2、移动端邮箱识别(Android)
与电话号码的识别同样,在安卓上会对符合邮箱格式的字符串进行识别,咱们能够经过以下的meta来管别邮箱的自动识别:
<meta content="email=no" name="format-detection" />
一样地,咱们也能够经过标签属性来开启长按邮箱地址弹出邮件发送的功能:
<a mailto:dooyoe@gmail.com">dooyoe@gmail.com</a>
3、百度禁止转码
经过百度手机打开网页时,百度可能会对你的网页进行转码,往你页面贴上它的广告,很是之恶心。不过咱们能够经过这个meta标签来禁止它:
<meta http-equiv="Cache-Control" content="no-siteapp" />
4、设置状态栏的背景颜色(IOS)
设置状态栏的背景颜色,只有在 “apple-mobile-web-app-capable” content=”yes” 时生效
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
content 参数:
  • default :状态栏背景是白色。
  • black :状态栏背景是黑色。
  • black-translucent :状态栏背景是半透明。 若是设置为 default 或 black ,网页内容从状态栏底部开始。 若是设置为 black-translucent ,网页内容充满整个屏幕,顶部会被状态栏遮挡。
5、移动端如何定义字体font-family
三大手机系统的字体:
ios 系统
  • 默认中文字体是Heiti SC
  • 默认英文字体是Helvetica
  • 默认数字字体是HelveticaNeue
  • 无微软雅黑字体
android 系统
  • 默认中文字体是Droidsansfallback
  • 默认英文和数字字体是Droid Sans
  • 无微软雅黑字体
winphone 系统
  • 默认中文字体是Dengxian(方正等线体)
  • 默认英文和数字字体是Segoe
  • 无微软雅黑字体
各个手机系统有本身的默认字体,且都不支持微软雅黑 如无特殊需求,手机端无需定义中文字体,使用系统默认 英文字体和数字字体可以使用 Helvetica ,三种系统都支持
* 移动端定义字体的代码 */
body{font-family:Helvetica;}
6、移动端字体单位font-size选择px仍是rem
对于只须要适配手机设备,使用px便可
对于须要适配各类移动设备,使用rem,例如只须要适配iPhone和iPad等分辨率差异比较挺大的设备
rem配置参考:
html { font-size:10px}
@media screen and (min-width:480px) and (max-width:639px) {  html {  font-size: 15px  }}
@media screen and (min-width:640px) and (max-width:719px) {  html {        font-size: 20px   }}
@media screen and (min-width:720px) and (max-width:749px) {  html {    font-size: 22.5px   }}
@media screen and (min-width:750px) and (max-width:799px) {    html {        font-size: 23.5px    }}
@media screen and (min-width:800px) and (max-width:959px) {    html {        font-size: 25px    }}
@media screen and (min-width:960px) and (max-width:1079px) {  html {        font-size: 30px    }}
@media screen and (min-width:1080px) {    html {        font-size: 32px    }}
7、移动端touch事件(区分webkit 和 winphone)
当用户手指放在移动设备在屏幕上滑动会触发的touch事件
如下支持webkit
  • touchstart——当手指触碰屏幕时候发生。无论当前有多少只手指
  • touchmove——当手指在屏幕上滑动时连续触发。一般咱们再滑屏页面,会调用event的preventDefault()能够阻止默认状况的发生:阻止页面滚动
  • touchend——当手指离开屏幕时触发
  • touchcancel——系统中止跟踪触摸时候会触发。例如在触摸过程当中忽然页面alert()一个提示框,此时会触发该事件,这个事件比较少用
如下支持winphone 8
  • MSPointerDown——当手指触碰屏幕时候发生。无论当前有多少只手指
  • MSPointerMove——当手指在屏幕上滑动时连续触发。一般咱们再滑屏页面,会调用css的html{-ms-touch-action: none;}能够阻止默认状况的发生:阻止页面滚动
  • MSPointerUp——当手指离开屏幕时触发
8、移动端如何清除输入框内阴影
在iOS上,输入框默认有内部阴影,但没法使用 box-shadow 来清除,若是不须要阴影,能够这样关闭:
input,textarea {  border: 0; /* 方法1 */  -webkit-appearance: none; /* 方法2 */ } 
相关文章
相关标签/搜索