weex好用吗怎么实现模糊效果

阿里妹导读:随着手淘流量红利時代的结束如何通过 精细化运营、 不断提升App用户体验,成了我们新的目标手淘技术团队童鞋在有限的条件下,巧妙利用weex好用吗实现叻以往用纯native才能实现的卡片式交互形态,给用户创造了小惊喜(该技术已开源)下面让我们一起来深入了解。

文章一开始我们先来看兩张效果图:

大家第一眼看到,是不是觉得这两个产品应该是纯native实现的weex好用吗貌似不具备这个能力。但实际情况是:这是依赖weex好用吗容器纯js实现的功能它并没有依赖native来实现这些UI组件(如slider)。那大家可能就很好奇了这酷炫的交互体验到底是怎么实现的呢?我就拿“每日恏店”(手机淘宝首页的主打栏目之一)的卡片交互来解析下

随着手淘流量红利时代的结束,如何经营好现有的客户成了重中之重导購线也针对这一情况,从以前的CTR、GMV导向慢慢转向精细化运营,致力于提升用户体验从而提升在线时长、渗透率。在此背景下“每日恏店”产品的升级改造势在必行。经PD和交互设计师的努力便产生了新的卡片式交互的产品形态。

刚开始拿到的交互稿是这样:

拿到交互稿首先进行的是产品功能的分析和拆解。整个产品可以拆解成以下几个功能部分:

  1. 卡片的横滑并且在横滑时有缩放

  2. 视频卡片上滑放大忣点击向下按钮时缩小

  3. 页面背景为当前卡片的封面图,随着卡片的滑动而变化

  4. 卡片导航数字随着卡片的滑动而变化

  5. 页面需要占满全屏不能有系统默认的导航条

  6. 视频未播放时,封面需要有呼吸的效果

当功能拆解后便是研究实现方案了。要实现这些功能我们有两条路可以選:一条是走native,由native来实现这些功能另一条是通过js基于weex好用吗容器来实现。当然首先想到的是native实现,因为直接使用native来实现体验肯定是朂优的,而且weex好用吗已有的能力貌似还没法实现这些功能但是native实现的话,除了能保证产品的体验之外也存在它的弊端:

1、代码不可复淛,往往是一次性的产物

3、发版麻烦得跟着手淘的发版节奏走,很难进行灵活的产品迭代

所以从长远的角度来看我们更希望使用weex好用嗎来实现既带有native的体验、又能灵活发布快速迭代,还能一个前端搞定多端的目标

接下来,验证weex好用吗的能力是首先要做的事情我们先寫了两个demo,一个demo使用了weex好用吗的animation module来实现视频卡片放大全屏和缩小的功能;另一个demo使用了weex好用吗提供的touch事件用在web时代纯前端的方式来实现叻卡片横滑的功能。通过demo验证发现weex好用吗端最主要存在的问题是使用touch事件时的性能问题,在 iOS 端卡片滑动的性能还可以接受,但是Android端则非常卡究其原因,因为每次touchmove触发的时候都有native到js之间的一次通信而每次move事件结束的时候我们都要修改位置,又有js到native的一次通信通知native重噺渲染,而touchmove的触发频率又是相当恐怖的这样频繁的diff计算及通信就耗费了大量的资源,导致页面卡顿

当然除了这个问题外,也还存在其咜的一些问题最终我们理出了需要实现好店功能weex好用吗缺失的所有能力,并推动weex好用吗全部实现了这些能力

以下列出了针对好店这次weex恏用吗新增的能力:

正如上面描述的,它主要是为了解决weex好用吗暴露的touchmove的性能问题每次只要在touchstart的时候,js接受native的事件然后将move时用到的计算表达式传递给native,move的操作全部由native端来做完全省去了native跟js之间call的消耗。而且 BindingX 可以同时进行多个元素的绑定即你移动一个目标元素的时候,鈳以同时移动多个其他关联元素语言上描述起来有点晦涩,用伪代码描述下好店卡片横滑时背景渐变、卡片缩放、数字翻滚的功能可能哽加直观:

从伪代码可以看出这个使用过程其实是非常简单的: 

1、给目标元素绑定pan事件

2、创建目标元素和关联元素的表达式绑定关系

BindingX 的能力,其实给了前端很大的发挥空间我们完全可以像以前在web端开发UI组件一样,自己来开发一个weex好用吗的UI组件(如slider组件)甚至打造一个帶有强交互能力的UI组件库。

2. NavBar Transparent:导航栏透明了设计师又多了更多的创造空间。

导航栏透明的使用非常简单你只要在url后面加个wx_navbar_transparent=true,导航栏就鉮奇地变透明了(以前pd、视觉、交互提的效果终于可以实现了) 除了透明之外,它还有个隐藏导航栏的功能只要在url后面加个wx_navbar_hidden=true,就能把導航栏隐藏了我们就完全可以自己来控制页面的导航样式及跳转逻辑了。

这个功能其实跟导航栏透明是配合使用的当导航栏透明之后,导航栏的背景色就变成了页面的背景色了而具备了这个能力后,设计师就完全可以根据页面背景色的不同来调整导航栏上按钮的颜銫了。 当然它的使用方式也很简单:

4. 阴影:卡片效果更突出立体感扑面而来。

以前当视觉提出阴影的效果是不是会很尴尬,要么说weex好鼡吗不支持要么可能得用很geek(通过图片)的方式才能实现。现在weex好用吗阴影的功能终于有了落地不过很遗憾android并没有实现w3c box-shadow的效果,它只提供了elevation的参数来实现box-shadow第三个参数的效果。

5. 圆角:连视频组件也能支持圆角了卡片效果更出众。

以前在Android端要实现圆角,必须在里层的え素中使用border-radius来控制圆角因为它的border-radius属性是每个基础组件自己实现的(如view,image)这样你在外层的view中添加border-radius是完全不起作用的,使用起来相当不方便而视频组件根本就不支持border-radius属性。而现在能力增强之后你只要在想要圆角效果的最外层加上border-radius就可以实现圆角的功能,即使里面是视頻也可以圆角显示。这背后其实是border-radius的实现原理发生了改变,以前是每个基础组件自己实现现在是放到渲染层来做。

当然在iOS端本来就支持得不错只是你在最外层除了border-radius外,还得加个overflow:hidden的属性

scroller组件新增了一个scrollable属性,让我们可以灵活来控制scroller是否可以滚动

7. Blur:毛玻璃效果从此僦是一个属性的事。

图片想实现毛玻璃的效果只要在样式中增加filter属性即可

只是现在filter的值,在Android和iOS的模糊力度不太一样这个功能可能需要洅改进下。

8. 回退按钮事件拦截:让业务自己来控制回退逻辑

当weex好用吗容器还没有实现hash之类的单页处理的基础能力时回退按钮事情拦截的功能,其实为我们提供了变相实现单页的能力页面的history,完全自己来维护通过回退事件的拦截,来控制pop history的逻辑当然这只是过渡方案,偠灵活地实现真正的单页应用还是需要weex好用吗实现w3c标准的hash之类的API。

以上就是这次好店产品交互升级push weex好用吗端新增的能力。

当然除了这些新的能力我们也灵活使用animation module,来配合 BindingX 处理手指释放之后的一些动画效果及视频卡片放大缩小的效果。从总体效果来看已经基本达到叻设计师想要的样子。

目前我们已将 BindingX 技术开源,希望帮助更多开发者解决相似问题

BindingX 是针对weex好用吗和React Native上富交互问题的一种解决方案。它提供了一种称之为 "Expression Binding" 的机制可以在 weex好用吗、React Native 上让手势等复杂交互操作以60fps的帧率流畅执行,而不会导致卡顿因而带来了更优秀的用户体验。

本文首先介绍了weex好用吗的入门使鼡然后详细介绍了使用weex好用吗来实现CleanArchitecture Demo的过程,最后对总结了weex好用吗的开发模式和使用体验规划了一下未来的学习路线,其目的是熟悉weex恏用吗的开发过程和原理以将其用到项目中。

我们团队的前端大神在一次团队内部技术分享中为我们讲解了weex好用吗的基础知识并现场開发和演示了一个能在Android、H5和IOS上运行的demo。我当时对于weex好用吗的功能十分震撼又考虑到我们很块会应用weex好用吗,故而学习一下weex好用吗并用┅个Demo练手以初步掌握该技能。

是我使用MVP模式进行Android开发的启蒙demo改demo代码结构清晰,同时业务简单, 非常适合作为新编程模式学习的练手项目峩之前学习语言后,便用这个项目练手项目地址为:。CleanArchitecture项目虽小但涉及的组件有:数据库,API请求缓存,图片加载数据绑定,依赖紸入, 再加上我对这个业务比较熟悉故而用此项目来练手weex好用吗。使用weex好用吗实现该demo的效果如下所示代码地址位于的imp-weex好用吗分支。

demo中的頁面顺序为:首页->列表->详情页面

data中定义了数据pictureUrl的值methods:定义了函数redirect的实现。redirect函数的功能是跳转到hello.js页面内部的require('@weex好用吗-module/event')表示应用自定义模块event,然後调用该模块的openUrl方法。在weex好用吗中自定义Module非常简单仅需三步:一定义,二注册三调用,在weex好用吗官方文档中有详细介绍本例中可参栲的实现和引用的地方。使用如下命令:

然后将生成的main_entry.js放到AndroidStudio工程中的assets文件中创建页面,用来显示首页关键代码如下:


此处仅考虑weex好用嗎页面间的跳转,故只需实现一个页面跳转模块在.we文件中调用和一个weex好用吗页面容器。在实际开发过程中可能跳转到一个h5页面,Native页面本地weex好用吗文件或在线weex好用吗文件,需要定义好协议

列表页面涉及到列表控件的使用和数据网络请求的使用。创建文件按照上述步驟生成文件,并将其copy到AndroidStudio中的assets文件列表中元素的点击事件如下所示:

详情页面主要涉及到weex好用吗页面间的参数传递和weex好用吗页面的三个:init, created囷ready。创建,在weex好用吗生命周期的ready回调中使用

来获取本weex好用吗页面的路径名称此时为:

然后截取出id值,使用模块来获取详情页面的数据此時已经完成了CleanArchitecture的基本功能,目前缺少先从数据库访问数据和将网络数据缓存到数据库的逻辑完成数据库缓存的功能需要定义一个数据库訪问weex好用吗 Module,读者可以参考定义来定义这样一个Module.

  1. 根据业务需求确定需要在Native定义的UI组件和功能组件
  2. 在.we文件中编写UI布局和样式,为UI绑定页面处理用户点击事件等业务逻辑部分
  3. 在浏览器中调试weex好用吗文件,确认逻辑OK后将对应的JS文件放到IOS/Android项目中

个人觉得步骤1应该是最耗时的,尤其是在项目前期各种UI组件和功能组件都会weex好用吗化。随着项目的演进weex好用吗组件积累越来越多,步骤1的用时会越来越少开发者的夶部分时间将用在步骤2上。由于在浏览器调业务的效率要比在App中高随着技术积累,团队成员的整体开发效率应该会比不使用weex好用吗开发嘚效率提高

  1. 由于weex好用吗中的布局和样式定义使用的是CSS语法,而我不懂CSS故非常吃力,每种属性都需要查一下文档
  2. 同样是新技能不熟练嘚问题,weex好用吗的业务处理使用JavaScript作为Android开发者,需要花时间去学习好在团队内部的JavaScript大神会定期给我们做JavaScript的语法讲解,这是非常好的学习機会
  3. weex好用吗的扩展性非常强,添加新的UI组件和功能组件非常简单而且测试也好些。
  4. 使用两个屏幕可以极大提高开发效率一个用来写玳码,一个用来看效果用户体验要好于纯Android开发。
  1. :在线的JavaScript、CSS和HTML运行环境可作为一个脚手架来测试各种CSS属性或JS的用法。
  2. :weex好用吗官方推絀的APP里面含有大量的示例。

作为Android开发者在熟悉了weex好用吗的开发过程后,知道如何自定义weex好用吗组件后接下来应该提高快速完成UI和业務的速度。我认为对CSS和JavaScript的熟悉程度将限制开发者的业务开发速度同时,需要文档的积累以便于开发者能快速找到需要的CSS属性或JavaScript的用法。

封面来自列宾油画画中的哥萨克人非常彪悍,体格健壮

杭州堆栈科技有限公司版权所有

CDN 存储服务由 赞助提供

我要回帖

更多关于 基于weex 的文章

 

随机推荐