共同点:
1 组件实现功能一致,对外暴露接口一致
不同点:
1 考虑的浏览器兼容性不一样
2 对html5 和 css3 支持不一样
3 性能要求不一样。手机上,cpu 、内存性能同pc还有很大差距,这样在手机上要更关注性能一些
4 手机屏幕丰富多彩,这样就要求组件构建的时候,考虑到responsive design
5 可以实现的动画效果不一样
鉴于手机端和pc端要实现的功能一样,我们采用了pc端widget的框架。一方面是widget框架,不依赖jquery,非常独立适用,另一方面是尽量保持平台的一致性,减少迁移和学习成本。
因为手机端需要兼容的浏览器都比较高级,我们可以使用高级的属性来实现相同的功能
比如:手机端,dialog 组件
html 基本框架
<section class="dialog_mask"> <div class="dialog_body"> </div> </section> <style> .dialog_mask{ position: absolute; } .dialog_body{ position:relative; } </style>
position:relative;这样的好处是dialog_body 可以通过margin: 0 auto;实现居中,不用js算。
1 如何实现蒙版效果?
通过background:rgba(0,0,0,0.75);
opacity 由于其继承性,子节点都会继承透明性,即使在子节点设置opacity=1;故如果用opacity,就需要把dialog_body 和dialog_mask 分开。然后用定位方法将他们重叠。
而background:rgba 只针对当前节点,不具备继承性。这样,dialog_mask 和 dialog_body 就可以放在一起了。
2 如果不需要蒙版,改怎么办?
dialog_mask{width:0;height:0;overflow:visible}
对比pc端的实现,手机端不需要iframe来遮挡select等控件;mask 和 dialog 都在一个结构里面,更完整,更稳定。
性能
手机端拥有高级的浏览器,但是cpu 和内存性能却跟pc差距大,在性能方面,我们需要着重考虑
因为transition 是浏览器级别的动作,比js更高效,同时如果开通硬件加速,动画效果更流畅。
例如在slide demo 组件中,
卡片的移动,通过transition 来实现动画效果
通过transform:translate3d(x,x,x)启动硬件加速和属性的改变。
动画:
css3加入了强大的动画,这样丰富了组件的表现能力
诸如:fade、flip 、turn 、flow、 slidefade 、slide 、slideup 、slidedown 等样式,都可以通过css来表示
例如:
flip效果:
.turn.out { transform: rotateY(-90deg) scale(.9); animation-name: flipouttoleft; animation-duration: 125ms; } @keyframes flipouttoleft { from { transform: rotateY(0); } to { transform: rotateY(-90deg) scale(.9); } } 这就是flip的一个旋转效果。以后会加入到dialog组件中。参考;http://api.jquerymobile.com/dialog/