meta
标签相关viewport
:能优化移动浏览器的显示。<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no"/> <!-- `width=device-width` 会致使 iPhone 5 添加到主屏后以 WebApp 全屏模式打开页面时出现黑边 -->
若是不是响应式网站,不要使用initial-scale或者禁用缩放。
适配 iPhone 6 和 iPhone 6plus 则须要写:css
<meta name="viewport" content="width=375"> <meta name="viewport" content="width=414">
大部分 4.7~5 寸的安卓设备的 viewport
宽设为 360px,iPhone 6 上倒是 375px,大部分 5.5 寸安卓机器(好比说三星 Note)的 viewport
宽为 400,iPhone 6 plus 上是 414px。html
width:宽度(数值 / device-width)(范围从200 到10,000,默认为980 像素)
height:高度(数值 / device-height)(范围从223 到10,000)
initial-scale:初始的缩放比例 (范围从>0 到10)
minimum-scale:容许用户缩放到的最小比例
maximum-scale:容许用户缩放到的最大比例
user-scalable:用户是否能够手动缩 (no,yes)
minimal-ui:能够在页面加载时最小化上下状态栏。(已弃用)
注意,不少人使用initial-scale=1到非响应式网站上,这会让网站以100%宽度渲染,用户须要手动移动页面或者缩放。若是和initial-scale=1同时使用user-scalable=no或maximum-scale=1,则用户将不能放大/缩小网页来看到所有的内容。前端
WebApp
全屏模式:假装app,离线应用。<meta name="apple-mobile-web-app-capable" content="yes" /> <!-- 启用 WebApp 全屏模式 -->
meta
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-status-bar-style" content="black" /> <meta name="format-detection"content="telephone=no, email=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name="apple-mobile-web-app-capable" content="yes" /><!-- 删除苹果默认的工具栏和菜单栏 --> <meta name="apple-mobile-web-app-status-bar-style" content="black" /><!-- 设置苹果工具栏颜色 --> <meta name="format-detection" content="telephone=no, email=no" /><!-- 忽略页面中的数字识别为电话,忽略email识别 --> <!-- 启用360浏览器的极速模式(webkit) --> <meta name="renderer" content="webkit"> <!-- 避免IE使用兼容模式 --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- 针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,好比黑莓 --> <meta name="HandheldFriendly" content="true"> <!-- 微软的老式浏览器 --> <meta name="MobileOptimized" content="320"> <!-- uc强制竖屏 --> <meta name="screen-orientation" content="portrait"> <!-- QQ强制竖屏 --> <meta name="x5-orientation" content="portrait"> <!-- UC强制全屏 --> <meta name="full-screen" content="yes"> <!-- QQ强制全屏 --> <meta name="x5-fullscreen" content="true"> <!-- UC应用模式 --> <meta name="browsermode" content="application"> <!-- QQ应用模式 --> <meta name="x5-page-mode" content="app"> <!-- windows phone 点击无高光 --> <meta name="msapplication-tap-highlight" content="no"> <!-- 适应移动端end -->
zepto
封装的手势事件singleTap and doubleTap — 这一对事件能够用来检测元素上的单击和双击。(若是你不须要检测单击、双击,使用 tap 代替)。android
现今大多数触屏手机webkit内核提供了touch事件的监听,让开发者能够获取用户触摸屏幕时的一些信息。web
其中包括:touchstart,touchmove,touchend,touchcancel 这四个事件windows
touchstart,touchmove,touchend事件能够类比于mousedown,mouseover ,mouseup的触发浏览器
而touchcancel许多人不知道它在何时会被触发而忽略它,其实当你的手指尚未离开屏幕时,有系统级的操做发生时就会触发touchcancel,例如alert和confirm弹框,又或者是android系统的功能弹窗
这4个事件的触发顺序为:缓存
touchstart -> touchmove -> …… -> touchmove ->touchend性能优化
咱们常常会看到“弹窗/浮层”这种东西,整个容器里有一个底层元素的div,和一个弹出层div,为了让弹出层有模态框的效果,我又加了一个遮罩层.而后为底层元素绑定 click 事件,而弹出层的关闭按钮绑定 tap 事件。
点击关闭按钮,touchend首先触发tap,弹出层和遮罩就被隐藏了。touchend后继续等待300ms发现没有其余行为了,则继续触发click,因为这时弹出层已经消失,因此当前click事件的target就在底层元素上,因而就alert内容。整个事件触发过程为 touchend -> tap -> click。cookie
而因为click事件的滞后性(300ms),在这300ms内上层元素隐藏或消失了,下层一样位置的DOM元素触发了click事件(若是是input框则会触发focus事件),看起来就像点击的target“穿透”到下层去了。
所以,点击穿透的现象就容易理解了,在这 300ms 之内,由于上层元素隐藏或消失了,因为 click 事件的滞后性,一样位置的 DOM 元素触发了 click 事件(若是是 input 则触发了 focus 事件)。在代码中,给咱们的感受就是 target 发生了飘移。
通用解决方案:采起fastclick
离线缓存
css优化【3d动画优化】
js优化 【js worker】
spdy,http2
service worker
入口dns预解析
域名收敛
cookie压缩
网速及网络状况侦测
webp
前端资源压缩去重
首屏前置与资源lazyload
页面模板与数据分离
适当的base64,首屏css不建议使用
script 异步
后台智能加载下一页
图片渐进显示