从pc前端开发迁移到mobile

从pc前端开发迁移到mobile

这篇文章特别适用于有一定pc前端开发经验,想要学习或了解移动端(mobile)的前端开发的同学来阅读。全文将分门别类来讲述移动端前端开发与pc端的不同之处。

mobile前端开发主要特点

OPOA

mobile端OPOA(单页应用,有时也称SPA)的比例比PC端要大,主要有这样一些原因:

在生产环境,浏览器对高级API、html5、es5支持较好

OPOA通常与SEO是一对天敌,而移动端搜索引擎的地位较弱,SEO没有那么重要

这些网页有时需要内嵌到app中,app中做页面跳转比较复杂和耗能、耗时间,不如所有功能在一个页面内完成

另外,mobile端优化到一定程度还关注模板在服务器端渲染还是在客户端端渲染。

性能弱

移动设备相对pc,计算能力、内存都比较弱。应该避免复杂的组件和大量的DOM写入操作;对于大量的数据计算操作,应该在服务器端完成或交给异步的Worker接口计算。

流量敏感、高延迟

在移动端每个文件、请求的大小都需要考虑,因为很多用户需要为每一kb的流量付费,并且为此付出等待加载的时间。

在每个请求里,不同的网络环境下有着不同的网络延迟,4G网络的延迟大概是20ms,3G网络的延迟大概是100ms,所以减少请求数的优化,比在PC上收益更大。

但也不要极端地追求减少连接数,合理的并行下载、多域名、CDN等,对加载文件的优化同样适用和需要考虑。

生产环境支持高级API

大多数情况下,在生产环境你可以放心地使用html5、es5的高级API,而不用像pc上那样考虑IE678不支持的问题。

小屏幕和支持触摸手势

所以交互方面通常与pc设计得不同,通常会把pc上一个页面完成的事情拆分成多个“页面”,并且会绑定很多触摸手势是操作。

meta viewport标签

移动端第一个要贴的代码就是这个viewport。每一个适用于移动端的网页,在head内部都有它,只是可能配置有所不同。

下面我们来看看每个属性具体的作用

有和无meta viewport标签

用这两个链接来对比一下,请用手机打开

在无meta viewport标签时,一般手机浏览器会将视口宽度设为大约980像素来呈现

width属性

在上一个例子中,有meta viewport标签时,我们将width属性设置为了device-width,它还可以设置为别的值,用手机打开下面这些链接对比一下(注意下面这些表现还有一个大前提是initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,这些属性将在下面再讲述)

width=device-width

width=600

width=200,或某个很小的数值

分别说一下它们的效果:

width=device-width的和上面有的链接和效果是一样的,即自动取当前设备商推荐的宽度作为视口的宽度

width=600,设备的宽度将被设为600px

width=200,或某个很小的数值,这里是为了说明,如果设置的width值小于当前设备商推荐的宽度,会被无视掉,此时width实际的值和width=device-width时是一样的,效果也是一样的

initial-scale | minimum-scale | maximum-scale

这三个属性定义初始时的缩放比例、最小缩放比例和最大缩放比例。便于表述,我们假设设置了width=device-width

我们在前面一直将他们设置成了1.0,这是一种常用的设置方法。在这种设置下,retina设备(window.devicePixelRatio === 2的设备)的4个硬件像素点将对应一个css像素点(长宽方向各为2:1)(这里牵涉到的硬件像素和css像素的概念,后面将会讲到)。举个例子:iPhone5的css像素将为320

alert(document.documentElement.getBoundingClientRect().width)// 320alert(window.innerWidth)// 320

另一种比较常用的设置方法是initial-scale=0.5,minimum-scale=0.5,maximum-scale=0.5,此时retina设备上1物理像素即为1css像素,常用在需要实现1物理像素的边线的情况下。可以拿retina屏幕的手机打开这个页面看看效果,并且与将它们都设为1时比对

硬件像素与css像素

硬件像素与css像素与上一节强相关,我们现在来看看它

硬件像素

又称为物理像素,只于设备相关

css像素

在设备的硬件像素确定后,css像素与你设置的viewport相关:

设置为device-width时,有这样一个等式:

css像素=硬件像素/devicePixelRatio/当前scale

只有iPhone plus是一个例外,我们称为“缩减像素”,有兴趣的同学可以看这张图,这里就不详细展开了

当设置为具体数值时

设置值大于等于当前设备商推荐的宽度值时 css像素=设置数值,与scale无关

何时要按硬件像素计算?和何时要用css像素?

对于编写代码和用css构成的各种展现,使用css像素

对于任何原始图片的大小和切图时,若不考虑文件大小,则使用硬件像素

图片的处理

根据物理像素

理想情况下,使用与硬件像素1:1的图片是效果最好的。用retina的手机看看这个页面上的效果

保持长宽比的背景图

可以使用这个技巧来让背景图保持长宽比示例。它的中心思想是:

将padding-top\padding-bottom设置为百分比值时,这个百分比是宽度的百分比而不是高度的,由此撑高DOM元素

使用background-size: 100% 100%;将背景图平铺在整个DOM的区域内

为什么要使用背景图而不直接使用

呢?答案请移步这里

srcset

让浏览器自动选择适合的图片示例,有兴趣的同学可以自己找一些相关资料,这里不展开详细描述

布局

这部分@思霏同学后续会详细介绍和文章,这里简单过一下

弹性盒模型布局

语法:父元素:display:box / flex;子元素:box-flex:1 / 2 / 3

两个例子:webkit-box/1webkit-box/2

rem布局

需要与屏幕大小联动的元素,使用rem单位,不同屏幕时只需设置对应rem值即可,可以移步这个开源项目

思霏同学还基于这个项目开发了一个计算rem的工具,地址稍后更新上来

百分比布局

经典实用的方式,pc端流式布局也常用到

click延迟

在手持设备的浏览器上,由于两次连续“轻触”是“放大”的操作(即使你两次轻触的是一个链接或一个有click事件监听器的元素),所以在第一次被“轻触”后,浏览器需要先等一段时间,看看有没有所谓的“连续的第二次轻触”。如果有,则进行“放大”操作。没有,才敢放心地认为用户不是要放大,而是需要“click”至此才敢触发click事件,导致“短按(手指接触屏幕到离开屏幕的时间比较短)”的click事件通常约会延迟300ms左右。

我们通常有一些方式来规避掉这个问题,这部分@麦梓同学后续会有详细介绍,这里简单过一下

touchstart、touchend简单代替

使用zepto的tap事件代替对比:原生click与zepto-tap

使用fastclick对比:原生click与fastclick

交互方式

一般将按钮高度40css像素以上(width为device-width,各scale为1.0,其它情况需要对应换算)才能方便用户点击

点击和长按(tap & long tap)

swipe | pinch | gesture 这部分@金台同学后续会有详细介绍和文章,这里简单过一下

为不同的输入框弹起不同的虚拟键盘:keyboard

给用户及时反馈

比PC更需要更用户及时反馈的原因

没有实体按键

异步请求响应、本地耗能操作响应更慢

常用方式

菊花图

遮罩

disabled 按钮

*震动

远程真机调试方法

不论模拟器有多么强大,我们有时还是需要拿真实的手机来调试,这篇文章介绍了绝大部分远程真机调试方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容