一周总结

这周做两个移动端的页面,终于接触了移动端,第一个是要内嵌在游戏里的 webview 页面,一个是放在 app 里的。
两个页面使用的都是 flexible.js ,flexible 适配方案的思路是模拟 vw ,将页面分成10份(vw是分100份),计算网页元素(比如一个按钮)在一张设计稿里所占的比例。将 1rem 设为 1/10 的设备宽度。

按钮宽度 = 所占设计稿比例 * 1份设计稿宽度

比如有设计稿 750px 宽, 其中有按钮150px,则按钮占页面比例是 20% ,一台设备宽度为 320px 的手机,分100份每份 3.2px ,则该按钮在手机里显示的宽度就是64px;原理是这样,但是因为 flexible 是将页面分成10份,所以在 sass 中的换算公式其实是:

$rem = 75px;
@function px2rem($px) {
  @return $px / $rem * 1rem;
}

这样每个网页元素都能在页面中按比例缩放。

做游戏内嵌页面的时候踩到的一个坑是怀疑用了旧版本的 flexible,在计算 root font-size 的时候如果大于 54px,会将 root font-size 限制在 54px,看到有人给的解释是,因为大于 54px 会被认为该设备非移动设备,而为了照顾页面在 PC 端的效果,才将 root font-size 限制在 54px 。但是我看现在版本的 flexible 已经去掉了这个判断,原因估计是:既然是移动端的页面那就没必要再对 PC 端做处理吧。
而我的页面由于是横屏的,需求方给的尺寸是 828 * 540,导致计算出来的结果一直是 54px ,这让我在计算网页元素尺寸的时候老是不能“所见即所得”,彼时我对 flexible 的运作原理还不清楚,还是靠师兄发现的这个坑。最后把这段对 54px的限制去掉, px2rem中的 $rem 改成设计稿的 1/10,页面就正常了。

发现移动端如果不是因为一些细节的兼容性问题的话,做页面布局其实实现起来会比 PC端容易得多,因为页面元素少,布局简单。而且可以使用 CSS3 的特性,后续会做到一个装盘动画就可以用 CSS3 来实现。

背景图片的适配

一些按钮会用到背景图片,要加一个 background-size: cover让背景图片完全显示在按钮中,因为一个按钮放在移动端页面大小会小于图片的大小,比如按钮在网页里只有 64 * 39,但是背景图有 128 * 78,这个时候就需要 background-size: cover让背景图按比例缩小后完全显示出来。

flex布局

移动端是可以使用 flex 布局的,但是现在 flex 最常用到的属性只有三个:flexalign-itemsjustify-content,感觉没发挥出 flex 的什么威力。align-items用在决定 item 在副轴上的排列方式,justify-content用来决定 item 在主轴上的排列方式。
当在一个 flex 容器中只有一个 item 时,在容器使用 margin: auto,可以实现 item 的垂直水平居中。
flex 容器里的 item ,float, clear,vertical-align都会失效。

router的使用

做游戏内嵌页面的时候第一次用到了 react-router。
router 用一个 <Route path="" component=""> 标签当作一个“占位”,component就是跳转到path时会使用的组件。
router 支持模糊匹配,例如path="classify/:name",后面的 name 就是一个可以自由决定的字符串,可以在页面跳转后通过match.params.name获取到,就可以利用这个参数搞事情。
都知道利用 URL 可以传递一些参数,但是如果要传递的数据太大,怎么办呢,可以通过一个location对象

let location = {
  pathname: '/path',
  state: obj
}
this.props.history.push(location)

将要传递的对象放到location.state中,再使用history.push()做跳转,将数据带到下一个页面。history是默认每个组件的props都有的一个属性,只要你通过高阶组件withRouter将根组件<APP>传入withRouter,就可以在每个组件的props上取到 router 的 history, match, location

感觉到状态管理的必要性

做 PC端页面的时候,弹窗都经过封装可以直接调用, 移动端的弹窗需要自己封装,弹窗的开启关闭也需要自己去管理,还有一些需要路由跳转的情况下,数据需要保留在根部组件,每次更新都要重新setStatesetState得不好还会导致覆盖前面的state,就会导致想要获取prevState的时候发现prevState跟当前的state一样。所以是时候上手一波状态管理了。

antd-mobile 的使用

虽说弹窗要自己写,但不需要细致到蒙层,关闭效果也要自己实现,因为有 antd-mobile 的存在。提供了高度的可定制,一个弹窗完全空白让你自己定制,还支持多种弹窗方式,点击蒙层窗口是否关闭等选项。

滚动元素到当前视窗

滚动一直是比较蛋疼的问题,因为关于滚动,高度的属性太多,导致选择用什么属性去计算滚动距离总是昏了头,上周日搞到12点的问题,还是被师兄半小时解决了问题T T,所以还是要多多静下心来想一想怎么解决问题比较重要。
要实现的是像聊天一样,发出一条新消息后,新消息要显示在当前视窗,现在解决思路很清晰,首先,滚动的是容器,而要显示出来的 消息div 在容器的底部,要使 消息div 出现在当前视窗,就要获取 消息div 到 document的距离,再加上容器已经滚动上去的距离,就能使 消息div 出现在当前视窗。但是这种实现还有点瑕疵,就是容器与 document 之间还有一定距离,减去这段距离才能让 消息div 完美出现在当前视窗。

总结几个经常用到的滚动和高度的属性:

- 在jquery中,用 scrollTop() 获取和设置元素滚动的距离;
- 在jquery中,offset().top 获取的是元素到 document 的距离;
  在原生中,使用 offsetTop 获取元素到 document 的距离;getBoundingClientRect()也是用于获取元素到 document 的距离
- 在 jquery中,position().top 获取的是元素相对父元素的距离,

关于宽度和高度的取值

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,727评论 1 92
  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,392评论 0 26
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,452评论 0 6
  • 时间过的好快,一眨眼就是一周。这周感觉过的挺轻松的,然后还蛮开心的,觉得自己慢慢的开始喜欢编程了,没有那么多的抵触...
    艾石溪阅读 279评论 0 1
  • (补一些以前记在日记点滴的碎碎念) 2015年 12.12 “你没有用微信了,也没有用微博了吧,我猜你一定过得很好...
    爱吃鱼和莴苣的狗阅读 159评论 0 0