本文分享国际化司机端首页改版完整思考过程,化繁为简提升司机使用效率,提升产品用户体验。
随着滴滴国际化业务脚步不断加快,司机端始终是作为承载全球化业务运力的基础保障。
同时,在移动通信技术高速发展的背景下,不同国家间的传输速度与硬件设备差距正在不断缩小,用户对应用产品的期望由基础的可接受、可使用、功能齐全,向更易用、简约、更为专注的产品使用体验上转变。
在新阶段下,「为全球司机用户提供一个「克制」「可依赖」的产品使用体验」、「为业务拓展提供有力的体验支撑」是体验设计团队在新的阶段下提出的目标。
2018 年 9 月我们与产品同学深入拉美当地对司机侧进行为期 2 周的产品体验调研。虽然在当地的时间较为短暂,但是我们依旧感受到了拉美国家的习俗文化和人文特点。
相比中国人的含蓄内敛,巴西与墨西哥人显然更加热情随和。
在巴西,这个世界上假期最多的国家,处处体现着人们对生活的享受才是自始至终的追求。无论是世界杯一个月狂欢长假,还是周末下午两点开门的商区,总会让人羡慕的同时刷新你对享受生活的认知。
而娱乐至上的墨西哥人,热情友好,能歌善舞,我们常说的放飞自我在这里几乎成为墨西哥人每天的生活常态。他们喜欢享受当下,后天下之忧而忧。他们觉得工作赚钱就是为了更好的休息,大多数人每天都是开朗乐观的处世态度。
同样,落后的基础建设、糟糕的交通状况、教育水平低下、价格昂贵的电子产品以及相对不太稳定的社会环境,也是它们共同存在的问题。
在当地,我们通过实地调研与用户访谈等方式,针对产品体验的问题与司机进行面对面沟通。收集了很多宝贵的用研资料与司机诉求,如司机希望平台为他们推荐订单引导,司机希望获得更多的实时动态讯息和司机每天都可以查看自己的收入状况等,集中体现在效率、感知、体验这三大方面。
其次,伴随着业务的不断增长,越来越多的功能使得我们的产品变的更加复杂,旧版的框架布局早已是不堪重负,无论是现存的体验优化问题,还是未来业务功能的拓展问题,旧的框架体系都是难以为继,无法再通过简单的修补来满足用户和业务未来的诉求。
改版升级对产品本身来说是一件非常重要的事情,需要对多方因素进行慎重考虑。经过多次的沟通讨论,权衡改版对产品可能产生的利弊关系,采用小步快跑,快速试错,分阶段分模块的方式进行。
首页既作为承载核心功能(发车)的载体又是其他重要板块的分发的入口,在内容呈现与用户感知上都存在很大的体验提升空间;我们通过拆解业务中长远需求规划得知,大多数重点需求依赖于首页框架布局,而现存首页框架无法满足业务诉求;在竞品的改版中首页的变化最大,并在司机群体中取得比较正向的反馈;通过上述分析,决定率先对首页进行优化改造。
首先我们与产品、运营侧进行深入讨论,结合用户访谈整理的用户诉求,对此次首页改版的目标达成一致。
在旧版的框架体系中,大量信息在首页呈现,功能层级复杂,重点功能难以突破和查找,关联较弱的信息架构严重影响和分散了司机的关注点。随着业务模式不断扩展,首页新需求类型逐渐增多,一套更加具备灵活的拓展能力和管理能力的首页框架尤为重要。
首先我们将旧版的首页布局打破重建,对现有模块进行整理。功能相似、定义模糊、司机操作相对低频的模块进行合并、删减。
对司机高频操作模板进行场景划分,将相关信息进行聚合处理,通过对入口的强化,来明确司机对不同模块的认知。
出车管理
将与出车相关信息进行组织聚合,结合司机不同的使用场景,将功能与模块进行结合,加强认知,减少司机多余的思考与判断,快速响应,提升工作效率,同样也为业务在有关出车功能方面提供灵活可拓展的组件框架。
收入管理
通过显示司机最关注的今日收入信息,为司机提供方便快捷的查看功能,使司机更专注于工作本身。同时对收入管理入口起到了强化认知作用。
信息管理
对关于个人相关的信息通知及功能操作进行聚合,方便司机对个人信息进行快速查看,提高查看效率。
通过对框架模块的标准化定义,后续的业务需求便可以进行归类管理,根据不同需求的不同属性,结合功能使用场景,选择合适的模块进行展示,提高司机使用效率同时增加首页的业务框架扩展能力。
通过对框架的重构,有效的解决了首页信息承载压力过大,功能层级复杂的问题,同时地图的面积相比旧版首页也大幅增加,信息呈现更加简洁、轻量。
出车操作作为首页的核心功能,通过调研得知,司机普遍反映在旧版首页中存在出车操作感知弱、收出车状态区分不明显的问题,对司机的操作体验和感知体验造成了比较大困惑。
在首页改版过程中我们着重对出车操作进行了设计分析,基于对业务的了解和竞品的分析,得出以下三个结论:
通过「两强一弱」,减少司机困惑提升发单效率的同时,间接的延长司机的在线时长。
完成页面设计后我们发现,操作按钮通过静态视觉角度去表达收出车空间位置关系是十分困难的,仅通过 Toast 提示会造成用户理解的断层,于是提出使用动效去进行「搭线」串联,搭线发车前按钮的点击和收纳后的位置提醒进行视觉体验上的串联,从而达成感知增强,解决视觉体验层面不容易解决的问题。
丰富的订单奖励活动是我们与竞品相比重要的竞争优势,司机在完成定量订单的同时提供了更多的额外收入。查看每日奖励活动,已成大多数司机每日上线必做的事情。
与旧版相比,在新版首页中通过提升奖励入口层级,缩短了查看奖励活动操作路径,从而方便司机快速查看。
通过首页透传的奖励卡片,司机在首页即可获取到推送的奖励相关信息,及时获取到奖励预告和进度,提升了司机工作效率的同时加强了司机对奖励活动的感知。
在经历了快速奔跑的粗放阶段,我们也在思考司机端产品究竟以怎样的品牌气质传递给海外的司机群体。
在当地,我们在司机心目中更像是合作伙伴,凭借真诚互利的态度赢得了当地司机的用户。
真诚、热情与融合我想这就是我们想要传达的核心品牌情感,而克制、可依赖将作为产品体验的设计原则贯穿始终。
颜色系统
司机端颜色系统在基于现有品牌色基础上,结合不同国家颜色文化的理解,新增加符合本地化的辅助色系,以提升产品的亲和力,传递品牌情感。
文字系统
针对司机用户的操作使用场景,对文字字号梯度进行提升,通过文字粗细、颜色、大小加强信息对比度,使司机在更多复杂场景下可快速获取重要信息,提升阅读体验。
在此次改版中新引入 Barlow 与 DIN Alternate 字族作为模式数字展示字体,两款字体分别为 Android 及 iOS 系统下默认包含字体,相比 Roboto 与 SF Pro text 两款字族,在数字展示上更为明确、识别性更强,同时因为自身「纤瘦」的特性,在屏幕横向面积上节省更多空间。
业务在不同的阶段有不同的侧重方向及打法,设计侧根据业务所处阶段应及时的调整自身的目标定位,快速响应,积极探索设计的机会和突破点,在不同的阶段发挥自身价值,助力业务达成共同目标,为用户创造更便捷的产品使用体验。
首页改版从立项到设计再到研发,多部门同学紧密配合,在有限的时间内最大化的完成预期上线效果。
全量上线后,通过问卷对首页改版进行满意度收集,司机对新版首页的满意度平均值高达 93%。取得的成绩离不开每一位参与改版的同学支持,也得益于国际化团队自始至终对产品体验的重视与认同。
作为司机端体验升级的第一步,首页改版只是一个开始,希望通过不断的打磨优化,秉持初心,为全球司机提供更克制、可依赖的出行平台。
文章来源:优设
一、建立一个库
1、git clone [url] // 克隆代码
2、设置贡献者
git config --global user.name "" // 设置当前本地库username
git config --global user.email "" // 设置当前本地库useremail
git config --global user.email // 查看当前本地库useremail
git config --list // 查看所以配置项
二、git的三个区
1、工作区:本地编写代码的地方叫工作区
2、暂存区:工作区改好的代码先提交到暂存区,然后由暂存区将代码提交到版本库
- 作为过渡层
- 避免误操作
- 保护工作区和版本区
- 分支处理
TypeScript是什么
Type+EcmaScript6
TypeScript是JavaScript的强类型版本。然后在编译期去掉类型和特有语法,生成纯粹的JavaScript代码。由于最终
在浏览器中运行的仍然是JavaScript, 所以TypeScript并不依赖于浏览器的支持,也并不会带来兼容性问题。
TypeScript是JavaScript的超集,这意味着他支持所有的JavaScript语法。并在此之上对JavaScript添加了- -些扩
展,如class / interface / module等。这样会大大提升代码的可阅读性。
和JavaScript若类型不同,TypeScript这种强类型语言最大的优势在于静态类型检查,可以在代码开发阶段就预知一
些低级错误的发生。
●-种类似于JavaScript的语言,在JavaScript的基础之上增加了类型,同时增强了JavaScript部分语法功能
●遵循EcmaScript 6标准规范
●由微软开发
●Angular2框架采用TypeScript编写
●背后有微软和谷歌两大公司支持
●TypeScript可以编译成Javascript从而在支持Javascript的环境中运行
●TypeScript和javascript的关心就好比less和css的关系
javascript 是动态的
可以在执行阶段重新赋值不同的类型数据
.ts 后缀表示一个TypeScript文件
Typescript兼容es6
TypeScript为javascript增加了类型的概念
Typescript是强类型 一旦定义数据的类型 不能动态修改这 样帮我们在开发阶段避免很多低级错误
1.全局绑定滚轮事件,获得dataZoom的位置:
myChart.on('dataZoom',function(event){
if(event.batch){
start=event.batch[0].start;
end=event.batch[0].end;
}else{
start=event.start;
end=event.end;
};
});
2.把的start和end赋值给要更新的option
window.setInterval(function () {
num=Math.random()*num+100;
data0.splice(0,1);
data0.push(num);
option.dataZoom[0].start=start;
option.dataZoom[0].end=end;
myChart.setOption(option);
},3000);
首先来解释一下什么是动态布局:
所谓动态布局就是可以通过修改内容实现关联内容自动改变的布局方式。
在 sketch 45 之后的版本,我们可以通过 resizing 对元素的上下左右边距进行固定,来实现页面布局的动态响应。这种响应是被动的,需要我们拖拽着它,它才能给出反馈。虽然不是多么的聪明,但是这种被动的方式解放了很大一部分生产力,足以让你鄙视一下 Photoshop 的 UI 设计了。
有了被动响应,自然也想要有主动响应,通过改变元素内容去改变布局。之前在 sketch 里面一直有一个功能:文字尾部跟随(间距在 20px 以内,后面可跟文字或图标)。如图:
功能虽单一,但在工作效率上带来了极大的提升。当然我们想要的更多
比如:
一个标签,我希望可以跟随文字长度而自动适应。
△ 不是这样
△ 而是这样
在 Sketch 58 之前,我们可以通过 kitchen 或者 Anima 等外部插件实现这类效果。但是这类插件在创建为组件以后会出现一些莫名的抽搐,可用性不高。在 Sketch 58 之后 Sketch 自身就携带了这些技能,可以实现一些动态布局,不过目前来看它还是存在一定的局限性,它的动态布局是基于 symbol 的。但我们不会为了布局而刻意去做 symbol,这会加重组件库的维护负担,在整体的收益率及效率上不见得能带来多大的提升。组件库应尽可能的保证干净、灵活以及它的实用性。
我们取长补短。所以,这里要讲的不是某一个插件或某一个功能,而是结合插件与自身的布局来达到足够的稳定与,解放双手,释放大脑。
这里主要通过介绍 Kitchen、Anima 和 sketch 的布局部分,整合它们各自的优势来做一系列的动态布局。
对比一下各个插件之间的差异
Kitchen
输入按钮的上下左右边距,让文字与按钮背景的边距固定。改变文字宽度,按钮宽度随之改变。
Anima Padding
Anima 不需要手动输入边距,插件会自动保留文字周围的边距并生成 padding。
Sketch 布局
sketch 也不需要手动输入边距,但是需要将想要实现动态布局的内容创建为组件,在创建组件的过程中可以对它的动态方向进行限定。这里一共七种模式(无、水平「从左往右、居中、从右往左」、垂直「从上往下、居中、从下往上」)。文字的对齐方式最好和布局的动态方向保持一致。
可以看出 Anima 和 Sketch 会更一点
我们可以让按钮再可以复杂一点。
比如加个 icon:
或者换个行:
在一个维度上的动态改变,大家应用得都挺好。但 Sketch 组件在文字换行时并没有在纵向上去改变高度。
解释一下:
按钮、标签等这类元素,我们通常都会创建为组件,方便我们管理及调用。接下来我们把刚才做好的动态按钮组件化,再来看看它们是否能实现动态响应。
Kitchen
Anima
Sketch
在组件化之后,Anima 出现了未知错误,按钮并没有任何变化。在实际使用中,sketch58 之前的版本可以正常变化。58 及其之后的版本暂时会出现问题,把 Anima 更新到 3.2.2 之后,官方更新说修改了 symbol 之后的 padding bug,但是在实际使用中并没有带来改善。
所以在这里不建议用任何第三方插件去做 symbol,即使 Kitchen 在这里没有出现什么大的问题,但在实际操作中的响应速度及稳定性都比较差。此外 sketch 的更新速度很快,大多插件很难即时跟上它的更新速度,从而导致一些不可预知的问题。为了组件的可维护性、自身安全,请尽量用 sketch 的自带技能去搭建组件。
按钮或标签这类组件通常会多个同时出现,比如这样:
这样:
我们可以通过以下几种方式快速实现布局:
Kitchen
Anima
Sketch
其中 Kitchen 和 Anima 可以实现全自动的动态响应,包括复制、删除等操作。而 Sketch 需要手动去维护或者创建为组件后才能实现全自动的动态响应。
这里倾向于直接利用 Kitchen 或 Anima,不会产生不必要的 symbol,但同时也能提升我们的设计效率。对比 Kitchen 和 Anima,Anima 的响应速度更快,功能更丰富,在实现固定间距的同时可以保证对齐方式。具体的应用场景,我们后面会讲到。
动态的组件,结合固定间距可以实现一系列便捷的操作。接下来我们讲一些具体的实现效果。
基于上面的结论,我们在这里的动态组件都会用 sketch 的布局功能来搭建。
label 在之前的版本中不需要特殊处理,因为有尾随功能。59 版本之后这个功能被移除,新的布局可以完全取代它了。这里我们手动配置一下水平方向的布局。
注意文本的对齐方式与布局方向要保持一致。
再利用 「Anima-Padding」/「Kitchen-自动排版」 实现动态布局。
Anima 需要合理编组来实现
图标解释
△ Padding(内边距)
△ Stack(堆载)
导航栏也是常用的组件之一。
首先创建「选中」与「未选中」两种状态组件。也可以用一种状态(选中状态)通过控制元素隐藏/显示、修改文字样式等来实现状态改变。不过操作比较繁琐,这里就不推荐了。
这里的选中状态需要用到 sketch 的水平布局,短横线才可以跟随文字动态改变。
置入建立的组件,确定好间距,再次建立组件,保持水平布局。就可以得到一个动态的导航栏了
也可以用 Anima/Kitchen 的布局去实现这个效果。
再次强调:Anima/Kitchen 的最好不要作为组件使用。
通用性强,复用率高的组件建议用 sketch 的布局去建立组件。
如何把大象放进冰箱
这里要实现的效果是「改变文字宽度,保持文字与右侧的线条间距不变」
方法:
序号、文字、白色背景成组,并水平「从左向右」布局
这样文字可以推动白色背景变宽,与右侧线条始终维持相同间距。
结合 sketch 的调整尺寸(resizing)还可以手动改变步骤条的宽度。
表单也可以通过 anima 或者 kitchen 来布局,实现数据的快速增删。
PS: Anima 的 stack 会默认选一种对齐方式,出现下列这几种布局效果(下方左对齐异常的原因和我组件的搭建方式有关)。
左对齐
居中对齐
两端对齐
右对齐
6. switch / radioButton
同样的,利用 sketch 的布局,还可以创建动态的 switch 和 radiobutton。
方法和之前建立动态按钮类似,不过需要注意的是:这类 tooltip 会存在一个最大宽度,在超出这个宽度后需要换行处理。但是sketch 的动态维度只有一个象限(x或y)。这个时候当超出最大宽度后就需要手动去换行并调节高度(动态高度,手动调节宽度,可以依据文字是否换行来判断边距是否正确)。
建议:这里我们可以建立两个组件,一个动态高度,一个动态宽度,根据文本量的多少去选择合适的动态方向。上面换行的按钮也可以这样处理。
再多说一句:Anima 可以通过拖动宽度来改变文字的对齐方式(自动宽度、自动高度),结合自身的 padding 可以实现两个象限的动态改变。但是出于稳定性的考虑,我们不推荐用它来做 symbol。
模块相对于简单的组件结合了多种布局方法。
以这个留言版为例展开说明:
这个留言版由头像、name、like、dislike、留言内容等 5 个元素组成。从布局上看可以把头像、name、like、dislike四个元素作为一个部分,留言作为一个部分。在整体上形成一个上下动态布局的组件。
头像和 name 固定于左侧;头像锁定宽高,name 文本自动宽度,布局方式从左向右。
like、dislike编组固定于右侧,文本自动宽度,布局方式从右向左。
留言部分固定左右间距,文本自动高度。这样我们可以通过拖动该区域的宽度去实现高度的动态改变。
利用 Anima 的 stack,实现每个留言版之间的固定间距。此外,在 stack 里面我们可以选中两边对齐的方式。
让组内留言版的宽度保持一致。
分别建立「左上、上、右上、左、中、右、左下、下、右下」等 9 个单元格组件。通过(左、上边框+th+td)的方式也可以,这里不细说。
每一列单元格分别打组,用 Anima(stack 左右对齐)或 Kitchen 固定垂直间距(间距为 0),组名 tr。无论是单元格的增减,还是单元格高度的变化,都可以在纵向上动态改变。
对 tr 打组,固定左右间距(间距为 0),实现表格在水平方向上的动态变化。
利用上面的知识我们来做一个相对复杂的卡片
要点
具体步骤
从上图可以看出卡片主要分为三个部分
对图片+标题编组,命名「banner」,确定标题的文本区域及动态方向,这里的标题我希望它在换行时往上走。这样可以把文字定为下方固定。如图:
对头像、名字、标签编组,命名「人物简介」。固定头像大小,固定名字位置。对标签编组,这里标签应该是动态的,从左往右布局。
标签高度固定;人物简介宽高固定;
固定人物介绍文本与卡片左右间距以及上边距
对「海报」「人物简介」「人物介绍」再次编组,确定组内各元素间距。编组和背景确定边距。
这个过程刚开始可能是一个漫长的调试过程,在熟悉后,会让调试有一个明确的方向,从而缩短时间。
不对,工作还没交付给开发就不算完成。工作中我会使用蓝湖把设计资源交付给开发。
结果
Anima 的布局在上传蓝湖后,蓝湖上显示正常,但是 sketch 本地布局统统崩溃了。我不禁长叹一声,啊!
蓝湖官方解释「两个插件在 Sketch 提供的方法调用是有冲突的,建议在上传前关掉 Anima 插件」。
关掉 Anima 需要在插件中关掉后并重启 sketch 才能生效,不然编组的内容依旧会保留 Anima 特性。
接下来重新总结一下:
结合以上内容为开发同事做的一个上线海报,他们可以只关注内容了。
文章来源:优设
一款产品从0到1的设计流程,在进入开发前的所有工作。这篇文章以去年做的一个小项目为例。
1.了解客户需求,根据竞品产生需求
工具:Axure、Mindmanager、Visio、OmniGraffle、PPT
1.1产品初期模型
1.1.1 竞品收集(应用市场、专业网站、行业调查报告、搜索引擎、)
在应用市场、专业网站、行业调查报告、搜索引擎中寻找竞品
输出:
在产品的潜在目标用户寻找竞品
对产品的潜在用户进行挖掘,分析核心功能的其他实现方法,将功能延展扩大可获得不同层面的竞品。
输出:
将过程、操作的碎片化处理来寻找竞品
将产品的结构、使用过程、操作等一步一步的拆开,根据每一个碎片信息来寻找竞品。
输出:
1.2竞品选择
竞品选择中最关键的一步,就是对竞品进行分类。
1. 功能完全相同的竞品:找出当下产品的核心价值,评估与我们设计目的与市场上成型产品的一致性;更快更好地借鉴对方取得成功的地方;有针对性地寻找差异化竞品的方向。
2. 核心功能相似的竞品:通过以点带面地挖掘价值点或者创新点,将我们自己的产品做到。功能完全相同是一个点进行纵向思考,然后寻找竞品;核心功能相似则是多个点,排列组合式地进行纵向思考,找到的竞品更加全面,我们能够借鉴到的价值点更多。
3. 功能本质相同的竞品:加深对待设计产品的需求本质的理解,通过本质相同挖掘需求的核心所在,借此来找到相对应的参照物。该类竞品,往往需要我们进行横向思考,试图从别的方面,方向入手,其思维广度大大增加,有可能从其他领域中得到解决问题的启示。这类竞品是最容易发现亮点和突破的。
输出:1.功能完全相同的竞品
壁纸制作:可以将喜欢的图片制作成精美的壁纸,定制专属于你的高清壁纸。
2.核心功能相似的竞品
座右铭壁纸:可选择背景、输入文字形成自己的锁屏壁纸。
3.功能本质相同的竞品
livefun:将视频转换为壁纸,将多张照片合称为一个live photo。
1.3 竞品拆解
竞品拆解就是用碎片化方法对竞品功能进行拆解,并最终形成竞品的功能列表的过程。
形成功能列表后,对功能进行备注,寻找到竞品使用过程中的不足,从而超越竞品。
输出:
接下来还需要和所有必要的相关人员就产品以及项目的开展方式进行多次头脑风暴。
头脑风暴(Brainstorming)是由美国奥斯提出的,一种激发集体智慧产生和提出创新设想的思维方法。头脑风暴(Brainstorming)指一群人(或小组)围绕一个特定的兴趣或领域,进行创新或改善,产生新点子,提出新办法。
头脑风暴可能带来一套启动计划、一个精简的框架和一系列比较早期的概念图以及模型。
头脑风暴如下图所示:
2.确定需求
2.1产品定位及如何正确描述需求
前面我们已经讲述了怎样搭建初步产品模型,通过梳理产品模型,可以清楚地了解应该如何定位一个产品。产品定位是需求收集的方向。
用户需求主要包含三个要素:目标用户、使用场景、用户目标。
经过对产品定位的梳理,就明确了产品的目标用户群体,接下来就可以进行需求的收集、分析活动了,总体流程包括需求收集、需求分析和筛选,需求优先级排序几部分。
输出:
产品定位:以用户产出内容为主的可个性化推送壁纸应用。
用户场景描述:
陶娟平时喜欢根据心情更换不同风格的壁纸,但是每次找壁纸都让她十分头疼,很难找到有个性又好看的壁纸(都是用户制作上传的壁纸作品)。
陶娟打开8楼壁纸app,登陆后填写了她的个性偏好,系统根据她的喜好个性化推送壁纸。陶娟选了一款壁纸,还可以看到同时和她使用同一款壁纸的网友。
2.2需求收集的途径
1.用户场景画像:根据之前的产品定位和使用场景用户画像文档分析产出需求
2.竞品分析:找到同类竞争产品,深入体验竞品功能
3.头脑风暴:可以集结产品经理、设计师、运营、市场、开发、进行头脑风暴,围绕一个特定的话题进行讨论
4.用户反馈
5.数据分析
输出:
2.3需求分析和筛选
在需求收集过后,已经有很多的被选需求了。
如何分析和筛选需求呢?
1.筛掉明显不合理的需求
哪些是明显不合理的需求?比如当下技术不可能实现的或明显意义不大的,投入产出比低的、无匹配的产品使用场景、明显不合理的需求等
2.做需求分析
把明显不合理的需求排除后,就需要一个一个对剩下的需求进行分析。首先要了解需求的三个分类:用户描述的需求、用户实际想要的需求、用户的潜在需求,这是三件不同的事情,却有着千丝万缕的联系。我们需要通过用户描述的需求,找到用户实际的需求,再挖掘用户潜在的需求。
3.需求做减法
有时候决定不做什么比决定做什么要更重要,产品的需求是无上限的,大量的堆积需求,会使产品非常臃肿,毫无特色,还会导致工期过长,拖慢了产品推出市场的进度,对产品百害而无一益。因此,应该倾向于做“轻产品”,学会做需求的减法。
这就涉及接下来需要讨论的问题,如何判断需求的优先级。
输出:筛选后的需求列表
2.4需求的优先级
需要对所有的需求定义一下优先级,优先级高的需求优先开发,优先级低的需求延迟开发。
输出:
2.5 输出产品功能图和功能需求列表
用户需求列表确定之后,先以产品功能的形式展现出来,产品功能图可以直观的看出产品的初步功能架构。
输出:产品功能图
功能需求列表的价值,一是在于帮助产品经理理清思路,二是在于帮助项目团队的其他成员了解产品功能需求,让他们提前做好相关准备。
输出:功能需求列表
3.产品架构
3.1 产品功能架构
结合之前的市场调研及产品路径规划,梳理了一下产品架构的大模块
输出:产品功能架构
3.2 流程图的规范
流程图有时也称作输入-输出图,某种程度上来说,流程图是一种沟通性质的图形化语言。一般会使用一些标准符号代表某些类型的动作,如判断用菱形框表示,具体的操作行为、活动用方框表示,开始和结束用圆角矩形框表示。
3.3 确定核心功能流程图
首先我们要设计的是产品的核心功能流程,例如登陆的流程就需要前期设计好,绑定手机号登陆还是直接微信登陆。登陆的流程会对后期的功能产生影响。
输出:功能流程图
做好了核心功能的流程图后,我们需要对app主干做一个流程图。保证每一个功能都可以形成闭环。
3.4 评审与确认
评审主要是让业务部门和开发部门参与,好的流程图具备清晰易懂、简单明了、完整准确的特点
4. 原型设计
4.1 什么是产品原型
产品原型是设计方案的表达,是产品经理、交互设计师的重要产出物之一,也是项目团队的其它成员(尤其是设计师、开发人员)的重要参考和评估的依据。
4.2 低保真产品原型
首先我们要根据产品架构画出初步的页面,也就是低保真产品原型。
这样的原型图有几个好处:
可以快速产出:有时候一个需求的开发周期很短,低保真原型可以快速满足同事的时间要求。
修改成本低:一个产品策划很可能会被修改很多次,低保真的原型修改起来很方便。
输出:低保真原型图
4.3 高保真产品交互原型
工具:axure、ai、ps
高保真产品原型,则是高功能性、高互动性的原型设计,是忠实展示产品功能、界面元素、功能流程的一种表现手段。
高保真的好处:
便于梳理产品细节:制作高保真原型的过程中可以让产品经理提前发现产品潜藏的各种问题,提前处理风险。
更容易让其他成员了解产品设计:有时候简单的线框图无法让别人想象出你要做的事情,也不清楚你要放的是哪几个字段,而高保真原型就可以。
相对而言,劣势就是制作周期比较漫长,涉及到产品流程的修改,那基本原型就得回炉重造一遍。所以高保真原型可以做一些核心页面,不重要的页面可以后期慢慢完善。
输出:动态交互稿
5. 视觉设计
工具:Sketch、Ai
在产品0到1时候视觉评审,会花大量时间去讨论产品的设计风格和主配色,在确定视觉稿没有交互问题后,然后就是讨论视觉设计稿的细节。在产品功能迭代的时候,评审的都是整体视觉风格的继承性和视觉稿的细节。例如对交互设计的理解是否到位,逻辑是否正确,视觉层次是否正确等。
5.1 设计组件规范
5.1.1 为什么做组件规范
1.保证产品风格统一
每个设计师都有自己的审美和风格,产品迭代可能是不同的设计师来负责项目,但是产品的风格必须保证是统一的,所以就需要一个规范性的文件来作为设计标准。
2.提升团队效率
在sketch里,有一个好的组件库,设计师就不用重复去改每一个页面上的图标。只需要改动一个就能同步页面上所有的图标。
3.打磨细节体验
在产品长期迭代的过程中,对每一个元素都需要对其场景、状态考虑清楚。所以在整理过程中,经常会发现以前没有注意到的问题并优化。
5.1.2 组件规范内容和分类
不同的项目的规范内容都是不同的,我们需要明确规范内容的分类有哪些。可以先确定大体的规范内容,在页面完善的过程中也不断的完善规范。
iOS的设计尺寸建议使用一倍图375*667的尺寸进行设计。因为这和安卓的常用尺寸360*640的误差很小。安卓和iOS可以共用字体、图标和间距。可以更加方便里做好统一的设计规范。
输出:
文章来源:站酷
运营类活动是在某一段时间内进行的,有明确业务目标(业务转化、品牌传播)及营销群体,依赖游戏化手段带来优秀用户体验,从而获得成功的一类活动。
1. 生命周期短
运营类活动生命周期较短,常在某一段时间(可能是周期性的),一般跟随时节热点或者运营节奏来进行。较短的生命周期给设计、开发、数据等带来较大挑战,设计程式化提供基本设计思路,组件化降低设计成本。
2. 业务目标明确
运营类活动一般以产品营销、品牌运营为目标,发放各类优惠券大众目标用户,从而带来业务转化,或者营销企业品牌,比如常见的年底 h5。
3. 有一定故事场景及氛围
运营类活动需要较强的故事场景。良好的场景设计、氛围营造可以带来沉浸式的用户体验,与用户建立情感共鸣。从而提升用户参与度、带来好的业务转化。
故事场景结合时节热点,同时考虑活动需要营造的体感氛围。
4. 人群细分
运营类活动的特征在发起之初就有特殊的运营目的和特定特征的用户群体。为实现最优的业务转化,需要在设计之初明确活动覆盖的用户人群。同时在各个环节都能考虑到特定用户群体的不同需求,尤其是在业务转化的过程中,好的人群细分往往带来事半功倍的效果。
5. 游戏化
引入游戏机制及游戏元素。
运营类活动结合时节热点,通过富有故事性的视觉传达(插图、动效、声音等设计元素)带给用户沉浸式的体验,与用户建立情感共鸣,从而有效的鼓励用户行为。
沉浸体验的营造对设计师提出了更高要求,可以从活动设计的故事感、用户代入感、产品互动感、主体差异感几个方面来思考入手。
运营类活动中广泛应用了游戏化机制和元素,它们是活动成功的有效保障。设计时综合考虑业务及用户需求,从用户动机激励、行为引导的角度出发,将运营活动游戏化。可以在活动参与深度的各个阶段引导用户操作,从而达成活动目标。以下列举了运营活动中常见的用户动机,后续我会从用户参与路径出发,尽可能详细的描述在用户参与的每一个阶段起作用的为动机,以及实现的手段。
大奖带来的诱因效应
动辄百万的大奖奖励几乎已经成为运营活动的标配,在动机理论中,用户行为的产生来源于需要,需要导致内驱力,引发行为,从而推动用户实现特定的目标。当目标的诱惑力很大时,即使没有内部驱动也能激发行为。这也是众多运营类活动大奖存在的理由。
占便宜的心理
爱占便宜是人的本性,从心理学角度讲,占便宜就像是额外得到的惊喜和奖赏,可以让人产生满足感!用户在这种心理作用下,会为了小利益去做出设计预设的行为,将业务需求设置在‘占便宜’的路径中可有效提高参与、转化率。比如在设计中用中奖动态弹幕来强化用户参与的动机,提高参与率。
有趣和好奇心
人天生具有好奇心,它帮助我们适应不断变化的环境、发现新的资源,是一种「无法抗拒」的行为动机。在运营活动中,用户会被有趣的活动页面,未知的规则设计所吸引,从而开始主动「探索」。这也是用户参与的动机之一,设计中精致的 UI、有效的页面信息传达保证了用户好奇的有效性。
即时反馈及阶段性成就
「即时反馈」是沉迷现象发生的原因。学习之所以痛苦正是因为其反馈链路太长,你只有在考试或者应用到所学知识时才能获得反馈,还有可能是负面的。在活动设计中,每一次用户操作都会有及时、细腻的反应,可以给用户带来精神愉悦,同时设计的阶段性成就又给用户带来成就感,用户会不知不觉中在活动中越走越远。
随机奖励的多巴胺效应
人类的本能热衷于冒险,随机的、不确定的奖励能够刺激大脑分泌多巴胺,带来愉悦感,从而刺激用户行为的重复。在活动设计中,常用到这一理论,比如抽奖机制。
所有权与拥有感
当用户感到他们拥有或控制某样东西时,会自然而然的强化它的属性、发挥其价值。尤其是通过适当的付出和自身努力,用户还可能不合理的高估其价值。在活动设计中,常使用户通过易实现的行为获得权益,通过「幸苦操作」强化了拥有感,提升其心理价值,从而促进用户对权益的使用。
稀缺性与用户渴望
稀缺性的心理学原理在于人们想要获得某样东西的原因仅仅是它太罕见,或者无法立刻获得。它破灭了人们对情况的控制感,人们会为了重获控制而采取行动。设计时,可以利用这种心理鼓励用户做出期望的行为。常见的有时间限制、权利限制等。
使命感/社交影响/损失规避……
运营类活动中数据和策略思维是保证活动效果最大化的有效手段。活动需求提出时,即考虑可能的参与用户细分;活动开始时,考虑引流途径和引流方式、物料的差异化;活动进行时,根据用户细分策略化任务推送,根据埋点数据监测积极调整相关设计元素。事无巨细才能确保活动成功。
文章来源:优设
JavaScript基础知识——JS预解析
js代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码时分为两步:1预解析、2代码执行。
预解析
预解析是指js引擎会把js里面所有的var与function提升到当前作用域的最前面。(这里的当前作用域包括:全局作用域与局部作用域)。
预解析可分为:变量预解析和函数预解析
变量预解析:就是把所有的变量声明提升到当前的作用域的最前面但是不提升赋值操作。如下例所示:
<script>
console.log(num); //结果为undefined
var num = 10;
</script>
//其实际执行过程为
var num;
console.log(num);
num=10;
函数预解析:就是把所有的函数声明提升到当期作用域的最前面 但是不包括调用函数。如下例所示:
var num = 10
fun();
function fun() { //结果是undefined
console.log(num);
var num = 20;
}
//其实际执行过程为
var num;
funtion fun() {
var num;
console.log(num);
num=20;
}
num = 10;
fun();
在idea中使用jdbc往数据库里储存中文乱码问题
这里使用的数据库是mysql。
ide为idea.
有时做一些web项目时需要往数据库里面储存中文,就是需要用到jdbc往数据库里面储存数据时,参数改为中文。可是储存完之后,打开sqlyog查询又是???这样子的乱码
上网找了很多方法,数据库的编码问题都改了,而且统一成utf-8了,但还是储存时为乱码。
后面检查时在sqlyog里改中文又可以正常显示。
这就说明数据库上是没有问题的,应该是连接这块,于是在连接的url上加入了参数就可以正常显示了characterEncoding=UTF-8
这里使用的是c3p0的连接池,不同的连接池可以去对应的配置文件中加上参数
在Vue中,用watch来响应数据的变化,示例代码如下,
第一种方式
<input type="text" v-model="userName"/>
//监听当userName值发生变化时触发
watch: {
userName (newName, oldName) {
console.log(newName)
}
}
第一种方式有一个缺点: 就是当值第一次绑定的时候 不会执行监听函数,只有当值改变的时候才会执行。
如果我们想在第一次绑定的时候执行此监听函数,则需要设置immediate为true。比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate设为true。
第二种方式
watch: {
userName: {
handler (newName, oldName) {
console.log(newName)
},
immediate: true
}
}
immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。
当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。
第三种方式
<input type="text" v-model="cityName.name" />
data (){
return {
cityName:
{
name:'北京',
location: '中国'
}
}
},
watch: {
cityName: {
handler(newName, oldName) {
console.log(newName)
},
immediate: true,
deep: true
}
}
注:监测为对象的时候,newVal == oldVal
此时会给cityName的所有属性都加上监听函数,如果属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:
watch: {
'cityName.name': {
handler(newName, oldName) {
console.log(newName)
},
immediate: true,
deep: true
}
}
数组的变化不需要深度监听;
在watch中不要使用箭头函数,因为箭头函数中的this是指向当前作用域.
蓝蓝设计的小编 http://www.lanlanwork.com