首页

系列位置效应在UI界面中的应用

资深UI设计者

如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里

系列位置效应大家可能有点陌生,因为它不像格式塔那样被大家熟知,但是当我看了它的概念之后,我决定和大家分享一下。


Image title

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计  cs界面设计  ipad界面设计  包装设计  图标定制  用户体验 、交互设计、 网站建设 平面设计服务



产品设计中“+”功能的相关思考。

资深UI设计者

如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里

日常工作中,有很多看似平凡的小细节,常被大家忽视,却影响着用户的真实体验。比如,前几天跟同事们针对产品设计中“+”功能所运用的场景、展开形式进行讨论,发现这是一个挺有意思的话题。


所以跟大家分享下,我的一些相关思考。






 1. “+”的运用场景 


我们常见的产品中,采用“+”功能的场景,大致分为两种:a.(上传)内容选项;b.(聚合)快捷功能。



a.(上传)内容选项


根据“+”的直观表意,大致也能猜到它的运用跟“添加”、“上传”某个东西相关。

比如:微博,点击“+”入口后,是选择所要上传的内容类型。(可以晒自己精修X小时后妈都认不出来的自拍、也可以晒逗比的小视频、或者老子就想搞一场直播)。



比如:下厨房左上角的“+”,点击后,是选择上传作品,或者创建菜谱的选项。




再比如:工具类产品:Google drive,dropbox、百度网盘、微云,点击“+”后,同样是选择上传不同文件的入口。 


可以看出,这种情况下的“+”功能,多指“添加”、“上传”的含义,所承载的内容,是同一纬度下的不同选项。





b.(聚合)快捷功能。


众所周知,产品为了节省界面空间,同时避免过多功能给用户不必要的干扰,会选择把一些不常用的快捷功能收到二级展示。常见的产品中,他们选择把这些快捷功能塞进“+”里。


那么,你是不是觉得“+”功能跟“…”功能承载的内容是一样的?比如:乐趣首页右上角“...”,同样是对频率较低的功能的集合。





那为什么有的产品不直接用“...”,还是选择用“+”呢?


通过分析发现,“+”虽然也是聚合快捷功能的入口,但承载的功能有一个共性:都是围绕着用户主动打开、发起、新建...等操作进行的,因此用“+”更贴切。


比如:微信里的“+”,包含着:“发起群聊”,“添加朋友”,“扫一扫”,“收付款”,其实都跟“添加”有关。 




比如:淘宝也是类似的处理方式。


 



再比如:爱奇艺的“+”,里面包含的也是跟“添加”,“上传”相关,像上传视频、扫一扫、我要直播….





反过来看“...”,它聚合的功能,大多是相互关联较弱,且没有主动添加、上传等含义的。因此,用一个相对模糊,没有指向性的符号诠释,更为合适。





由上可以看出,在这种情况下,“+”作为聚合快捷功能的入口,包含的是频率较低,且跟主动“新建”、“发起”、“扫描”等相关的功能。





 2. “+”的展开方式 



当用户触发界面中的“+”时,常见的展开方式有3种,分别是:a.气泡弹出框;b.动态栏;c.沉浸模式。



a.气泡弹出框


气泡弹出框,这个控件又常被称为Popover,一般是由一个矩形和三角箭头组成的弹出窗口,通过点击Popover内的按钮或者非Popover的屏幕其他区域可关闭。 


比如,以微信为代表的“+”的展开方式,采用的就是Popover。一般用于聚合快捷功能。优点是触发“+”到Popover的距离很近,操作顺手,效率高(更像是导航的延伸)。





b.动作栏


动作栏,这个控件官方称之为Action Sheet,是用户触发“+”后,出现的一种模态弹出框,里面包含一组与当前情景相关的选项,一般用于上传内容选项。 


在iPhone屏幕上,为了便于单手持握时操作,Action Sheet通常占据屏幕底部区域。



比如:以Google drive、Dropbox为代表的产品,需要选择上传文件类型的选项。




在这个部分,同事们讨论有些争议点,在于:google drive 和 Dropbox或者微博,它们的加号本来就在底部,所以弹窗让用户感觉视线统一。




而有的产品“+”在上面,弹窗从底部出来,担心注意力切换和手指移动的路径比较长,显得割裂。


带着这个问题,我调研了下有类似情况的产品,会不会让人觉得不舒服。


后来发现,不会的。原因在于我们常用的、拥有10亿+用户的微信,发朋友圈时操作就是这样,而我们并没有感觉很割裂,反而已经习惯。




同样,iPhone自带的“提醒事项”App,也是这样处理。




后来看了规范发现,iOS确实意识到在iPad上,如果继续将Action Sheet显示在屏幕底部,如果频繁操作使用会比较累。因此,做了特殊处理。而手机屏幕上以底部为主,同时点击空白区域取消的操作,也是系统用户所熟知的。



总的来说,操作栏适合承载同一纬度下的内容选项,同时,就算“+”在顶部,采用底部动态栏,体验上也是没问题的。




c.沉浸模式


沉浸模式,指的是当触发“+”时,用户在全局蒙层上进行功能操作,同样适用于上传内容选项。


优点是拓展性更强,体现在:1.提升收益;2.品牌认知;3.内容运营。




1.提升收益


比如:微博,采用沉浸模式,下面是上传不同状态类型的入口,上面可以增加广告收入。




再比如:微云,在沉浸模式下,可以植入自己的“会员”广告,从而提升会员转化。





2.品牌认知


比如:有道云笔记,在顶部的空间内,宣传自己的品牌slogn:“记录,成为更好的自己”,是一种品牌情感化的传递。  



 


3.内容运营


像“好好住”,它们在这个页面加入“话题”运营推广。从而给UGC内容模块带节奏。





大多数产品都想营造社区氛围,建立用户关系,从而增加用户粘性,提升产品留存。

但要想拥有浓厚的社区氛围,首先要有内容、才有人愿意看、才有人在里面互动。

现实问题是,有很多用户有想发状态的心,但不知道发啥,从而放弃。因此,我们应该作出相应的引导。


比如,“好好住”在发布环节,增加话题运营“#每天一张生活日常#”入口,就是解决刚才说的“用户不知道发什么”的问题。运营同学想点子、造话题、带节奏,从而提升用户的发布量。

因此可以看出,“沉浸模式”,对于那些有拓展需求(收益、品牌、运营)的产品更适用。


不知道你有没有发现,相比国外,国内采用这种“沉浸模式”的产品偏多。或许在中国这个互联网竞争如此激烈的大环境下,大家不愿意放弃任何一个能够运营或留住用户的机会。 



总结 



总的来说,在常见的产品中“+”功能的运用场景有:(上传)内容选项、(聚合)快捷功能;它的展开方式可分为:气泡弹出框(适合承载快捷功能)、操作栏(适合容纳内容选项)、沉浸模式(容纳内容选项的同时,拓展性更强)。其实,交互形式没有好坏之分,只有哪个更适合自己的内容需求和产品目标,正如Louis Sullivan所说:“形式追随功能”。


小tips:日常工作中有太多类似“+”这种,看似一个不起眼的小功能,被大家忽略。我们习惯性看一下竞品,拍脑袋决定方案。


但是,慢慢你会发现,只有深挖和分析这些所谓的“小细节”,才能知道别人这么做背后的原因、才能举一反三的去运用、才能更好的兼顾统一性和拓展性,而不是停留在浮于表面的模仿。


希望这篇文章对你有所帮助。 

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计  cs界面设计  ipad界面设计  包装设计  图标定制  用户体验 、交互设计、 网站建设 平面设计服务

赞不绝口的MIUI10,背后的设计故事揭秘

资深UI设计者

如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里

在 MIUI 10 的内测反馈中,设计上的耳目一新是众口称赞的部分。近日,MIUI设计总监 Gary 和几位核心设计师一起接受了我们的采访,开诚布公地介绍了 MIUI10 设计背后的故事。

这次的采访我们聊得很细,细到某一个交互的设计思路的变迁,以及为什么最终是以那种方式呈现在 MIUI 10 之上。我相信,无论你是对设计还是对手机系统存在好奇,一定都可以从这次访谈里得到一些有益的启发。因为我们没聊虚的。

△ MIUI设计团队

一、彻底干掉虚拟键的全面屏手势是不是太激进了?

△ 虚拟键不该存在

是不是太激进我们还是根据用户反馈来判断,这套手势因为没有任何虚拟键的提示,刚开始确实需要一两分钟来学习,但大部分的用户反馈是:用了就回不去了。目前从客观上来讲,安卓手机里的全面屏手势,MIUI 确实是最好用的,不是我们自己说,而是从各种用户反馈,包括微博上很多专业数码博主的反馈得来的结论,很多人在主动地说这件事。

但是在手势的设计上,我们是踩过很多坑的。

我们尝试过很多版本的全面屏手势,最初还没有大胆到想干掉所有虚拟键,而是想在虚拟键上做文章。开始我们觉得那个区域很多时候3个 button 可能用不上,比如看书的时候,你可能只需要一个返回键,所以我们考虑的是在某些特定的应用场景里把一些用不到的虚拟键收起来,这是做减法,减法做完之后,原来虚拟键的位置就空出来了,我们觉得这个空间是浪费的,又在想应该怎么利用起来,这是早期一个很复杂的思路。

△ 早期带横杆的产品

后来我们又想是不是可以把3个键整合成一个虚拟键,当初做了一个 Demo,把3个键集合成一个横杆,那个时候还没有看到 iPhone 的模型,在 iOS 的全面屏手势出来之前,我们就做了一个横杆子,其实是受 Palm 的启发,这根杆子很早之前 Palm 就有了,苹果可能也是受 Palm 启发。我们设计的是在那个杆子上横滑返回,然后上滑回桌面,很接近苹果目前的处理方式。但最终还是把这个设计给放弃了,去掉的原因是:提示杆一开始是有比较好的引导操作作用,但一段时间后,用户就不需要了,另外就是视觉感官上横杆并不好看,工业设计上好不容易才能把手机下巴缩短几毫米,你一根横杆又全给它加回来了,这其实背离了「全面屏」的初衷,在设计上是一种不得已而为之的妥协。

否定横杆之后,我们才真正全心考虑干掉所有虚拟键的方案。但没有虚拟键,就对我们的交互设计提出了很高的要求,首先,这个手势的出发点一定得非常符合直觉,所以不管是返回上一级菜单也好,回到桌面也好,这必须是两个最基础的操作(横滑、上滑),在这两个基础操作上略做停顿,我们就可以进入应用间的快切和多任务管理,我们用一种非常轻的设计把它附着在两个基础交互上。彻底干掉虚拟键这件事最早我们没有太大的勇气去做,最后做出来反倒更贴近用户操作手机的直觉,有一种柳暗花明的感觉。

△ 简洁易用的MIUI全面屏手势

二、MIUI 10的整体视觉设计遵循了什么思路?

△ 为全面屏而重新设计

在天气、日历、安全中心等等 MIUI 10 的各个角落里,其实都把原来分段式的画面结构做了一个全面屏化的设计,让页面不要有很强的割裂感。让内容直接浮在屏幕上,用户第一时间得到信息,去掉干扰元素。

在非全面屏时代,手机有上下两个比较大的黑色边框,在视觉上天然是分段式的,之前屏幕内的多色块设计其实是对应了手机外观的这种「分段」,它还是和谐的,但原样搬到全面屏手机上,就显得是把一整块完整的屏幕生生分割成了几段。

另外就是原来有一些插画类型的风格和表达手法,想让整个画面有一些亲和力。但是因为我们的用户覆盖面很大,两三亿用户,会有一些年龄层的用户觉得原先插画形式有些稚嫩感。所以我们觉得到10这一代,整个系统应该更成熟、更普适一些,我们更倾向于做一个对任何人来说都很舒服的视觉设计。

三、这次整体视觉风格有比较大的变动,有没有什么地方特别花费精力的?

举个特别细节的例子。MIUI 10 的时钟,有一部分用户会有疑问:在 MIUI 10 里,可见的大多数页面是亮色,为什么进入时钟时却是黑色的?我们其实也在白色和黑色反复了很多次,调研也做了很多次。最终我们认为更重要的是时钟的使用场景问题,比如说你晚上在睡觉前拿起手机定个闹钟,在夜晚或者室内,从手机桌面进来打开时钟,如果进入一个很亮的页面,它即便是好看的,也可能会刺眼。所以我们还是选择了黑色,当然那个对比度到现在还在调整,我们想把视觉上的美观和使用的舒服统一进来。

四、MIUI 10的自然音效系统是发布会上的一个惊喜,你们为什么会想到去做音效?

我明白你这个问题的意思,大部分人的手机是长期静音的,音效这个东西,好像已经被完全忽略了。但是我们觉得,哪怕只有1%的用户打开了手机铃声,他也应该感受到悦耳而不是打扰和腻烦。如果我没记错的话,我们是手机厂商里第一个针对音效做系统性设计和优化的,我们从「百听不厌」的自然系音效出发,和得过格莱美奖的顶尖音乐人合作,还针对手机音腔的特性对音效做了特别的优化。

发布会上洪锋把自然音效系统作为一个彩蛋来讲,这是我们送给小米手机用户的一个礼物,是让我们骄傲的产品。我不确定有多少用户会发现这个产品,有些人可能因为长期静音他没有机会接触到这个新设计,但它是一个能带给人惊喜和温暖的东西。

五、MIUI的设计理念是什么?

有些人可能会觉得设计是一个偏感性的、依赖审美的东西,但是对于一个好的系统设计,我会从视觉、动效、交互、字体、音效,五个维度的去衡量它的完善程度。

我们用一个人来做类比。视觉,就是感官层面的,比如说你见到一个人会说:这个人很帅;第二就是交互层面的整体逻辑,就好比你跟他说话,发现他的脑子清楚;第三就是整个动效的层面,这个人的肢体语言很优雅;还有字体,我们是从 MIUI8 的时候就开始做了,为了让大家有更好的阅读体验,让人觉得你这个人很有涵养,这已经深入到非常细节的层面了;最后,我们加了一个声音的系统,就是你说话的时候,声音还要好听。MIUI 在设计上一直是往多个方面进化,我们并不满足于做出某个漂亮的页面或者交互,而是追求整个体验层面的饱满。

做设计过程中,我们可能会尝试各种各样的方案,也有灵光乍现的时刻,但我们会从多个维度完整地去考量这个设计成果,避免做出一些只是「看上去很美」的自嗨的东西。实际看起来、用起来、听起来怎么样,我们想从这几个大的感官维度上都能达到体验层面的满足。

举一个例子:比如说之前我们为了快去掉了一些解锁的动画,用户一按指纹解锁,直接进到桌面,这种确实是非常的快,但这种感觉就像什么呢?就像你一按电梯,门就消失了,你进了电梯,它咔一声又关上了,是很快,但是这种观感是不太好的。它没有一种欢迎的意识,就只是把东西呈现给你。这一次我们希望把这个东西改回来,当你进入手机桌面的时候,图标应该有个简短的优雅的动态,有一个进场亮相的过程。

△ MIUI动态图标

MIUI 其实已经非常流畅了,在这种地方去掉应有的动画,是可以快100毫秒,但这种快是没有意义的。让用户舒服的看到这个东西,这才是整个体验的核心。所以我们这次就定下一个目标,和工程团队一起,把这种为快而快的东西给它削弱,用户要的是更优雅的体验,而不是那种无感知的快100毫秒。

这个事情说起来不大,但其实是一种理念层面的进步,大家已经从那种无意义的纯数据比拼里解脱出来,更注意到整个体验层面。我们这次会把上面说的进场动画加进来,能让用户点亮屏幕的时候感觉到更加的舒服,能够感觉整个系统的「肢体语言」更加优雅。

六、对于MIUI 11的展望?

之前的非全面屏时代,手机屏幕在16:9的形态下,UX设计上其实已经极度成熟。手机的很多功能和设计的出新,很大程度上都是在迎合一些小众的需求,可能一部分人觉得很喜欢这个设计,但它并不普适。

全面屏手机的出现又将设计师的注意力从这些小众需求拉回到了一个大众需求:怎么在全面屏手机上做出更好的体验。因为智能手机用户迟早会将手中的设备换成全面屏设备,手机厂商如果只是简单地把原来16:9的画面改成18:9,而不根据硬件特点做真正的深度定制,那就会离用户体验越来越远。

手机系统的未来我们认为也会是这样的趋势,软硬件的结合会更加的紧密。在这一点上,MIUI 有这个意识,也有行动,目前是走在比较前面的。

MIUI10 落版后,我们也在考虑往这个方向去深化。我们不会特意去考虑11跟10之间非得做出什么大的区别来,相比这个,我们更关心的问题是:什么是用户真正需要的设计。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计  cs界面设计  ipad界面设计  包装设计  图标定制  用户体验 、交互设计、 网站建设 平面设计服务

什么是好的网站?

资深UI设计者


关于什么是好设计的问题的答案,定义了设计师。

“有什么好处,Phaedrus,还有什么不好 - 需要我们让任何人告诉我们这些事情吗?” Robert M. Pirsig,Zen和摩托车维修艺术:对价值观的探讨

上周,我的一位英雄(@johnmaeda)发推文说“设计一直是关于肤浅和实质的。”我认为这是一个很好的引用。出于某种原因,我们需要时刻提醒我们,设计不仅仅是花哨的造型。但为什么?为什么物质需要防御?如果你看看像Dribbble这样的网站,设计的表面看起来真的很吸引人。肤浅的品质不需要解释。但这不是设计。在他的“ 设计形状”一书中,交互设计师Frank Chimero正确地说“如果我们留在表面并且不深入研究为什么我们不是真正的设计”。如果问为什么是设计的本质,设计真的是哲学的一个分支。

清晰思考

目前我们有一位来自马斯特里赫特大学的教授,他们在我们的设计工作室中。他正在研究野外设计师,就像人类学家在非洲研究一个不知名的部落一样。他研究的主题之一是设计过程。我总是觉得这是一个有趣的话题,这就是我对Chimero的书的原因:它从设计师的角度讲述了设计过程。他的内部人士认为这是一场认可的盛宴。关于他对设计过程的描述最让我困惑的是清晰思考的想法。奇美罗对他的工作方式有一个有趣的描述:他只是“出现”并让“语境说出它需要的东西”。他说“设计师的工作就是找出一种方法让问题表明它是真实的自我,这样他才能回应已经出现的真相。

设计师通过询问原因来工作。问为什么“更高水平的研究,一个调查所使用的动机和思维过程,以便它们可以应用于我们自己的情况。”为什么看起来更深。它将目前的解决方案与用户的需求相结合,以设想更好的解决方案。

哲学

当我们开始问为什么并开始思考真理时,我们就进入了哲学领域。我一直将设计(和其他艺术)视为哲学的视觉形式。比传统哲学更精细的一个,因为它不仅通过文字而且通过图像进行思考。有些人可能会称这种特殊形式的哲学设计思维。当我们将设计定义为哲学的一个分支时,下一步就是质疑这个世界上一些伟大的思想家,看看他们对设计的看法。对我来说,Martin Heidegger有两个哲学文本定义了良好的设计。

关于您的客户和互联网的真相

第一部是Der Ursprung des Kunstwerkes(艺术作品的起源),其中海德格尔思考什么使艺术品成为艺术品。简而言之,他认为,为了使艺术作品成为一件好作品,它必须揭示我们存在的真相。他用梵高的一双农夫鞋作为例子。这幅画是一件艺术品,因为它向我们展示了鞋子,农业,生活的真相,也展示了梵高绘画时的绘画媒介和艺术现状。它很漂亮,根据海德格尔的说法,美丽是表达真相的最好方式。

如果我们将网页设计视为一门艺术,我们可以将海德格尔的艺术思想转化为网站,并得出一个有用的网站定义。首先(和Chimero在他的书中所说的相似),一个好的网站揭示了用户与您为其建立网站的组织的互动的真相。当然,美丽很重要,因为它是真相展示自己的最佳方式。Beauty以直接方式连接到用户。它比单词更快更有效。但海德格尔增加了另一个重要方面。一件好的艺术品,即一个网站也定义了媒体,即互联网。因此,良好网站的问题与互联网的问题紧密相关。一个好的网站向我们展示了互联网是什么或可以是什么。

与媒体的深层联系

因此,与您正在设计的介质建立深层连接至关重要。这是海德格尔第二篇文章的主题,它定义了良好的设计。在他的文本Bauen,wohnen,denken(建筑,生活,思考)他说,在你建造之前,你首先必须学会生活。在这篇关于建筑的文章中,他将设计与对人类基本条件的理解联系起来。他敦促设计师与他们的主题联系,实现他们的主题,而不是以抽象的方式看待它。对于建筑师来说,很容易爱上图纸,抽象概念和模型。但是如果没有与你设计的生活有真正的联系,它就会变得毫无用处。就像建筑一样,互联网也是人类的基本需求。我们将互联网视为能够让您做新事物的东西。但是人们只想做他们一直做的事情。 人们的经验和广泛的兴趣促进了设计师的理解和想象力。

通过哲学分析生活 - 问为什么 - 是良好设计的基础。哲学是生活与设计之间缺失的纽带。

一个好网站的定义

就像艺术一样,设计一直需要定义。我认为好的设计问题的答案定义了设计师。所以:
- 设计就是问为什么(所以它基本上是哲学)
- 网页设计的目的是找到关于客户,用户和互联网
的真相 - 真相最好通过美容传达
- 找到关于你的媒介的真相必须与之建立深厚的联系

如何巧用气泡、斑点和流体元素,让网页不再单调死板?

资深UI设计者

如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里

随着设计工具和设计素材越来越丰富,设计师开始更加灵活地在网页中使用气泡、斑点和流体这样的元素,那么要怎么在网页设计的时候用好这些元素呢?今天结合9个网页实例,来分享几个实用的技巧~

1. 用气泡元素营造视觉焦点

在简约清爽的背景之下,使用色彩鲜艳,形体自然随性的气泡元素来创造视觉焦点,气泡和需要凸显的图片素材结合到一起,有目的地将用户的视线吸引到关键的元素上,最终起到提升转化率的目的。

2. 用简约线性的气泡动画来驱动交互

使用几何特征的简约气泡元素来构造动画,是一种成本比较低的做法,动画会随着用户滚动页面,而有趋向地发生转变,从而促使用户不断地滚动,向下浏览查看更多内容,这种设计同样能够提升网页的参与度。

3. 用不规则的涂鸦斑点强化品牌

斑斓的背景和强对比的涂鸦斑点,同样是一种引导视觉的策略,但是它更重要地是通过这种风格来营造狂野粗粝的品牌气质,帮助用户更快更直接地 Get 到品牌的独特氛围和神髓。

4. 用液态色块拼贴来传达时尚感

充满流动感的色块和斑点元素类似,同样充满了不受控制的自然气场,充满对比度的多彩配色则赋予了这些液态感十足的色彩拼贴以时尚的气质,从而营造出独树一帜的视觉体验。

5. 用渐变色气泡来营造立体感

微妙的渐变色常常能够赋予元素以一定的3D立体感,多变的气泡元素如果拥有渐变色会仿佛拥有景深和层次一般,让页面更加立体。当然,如果一开始使用动画软件来建模,渲染生成动画,那么就更加到位了。

6. 使用扁平化气泡元素渲染现代感

扁平化设计依然是目前的主流,在许多纯粹扁平化的页面中,气泡类的元素能够起到很好的点缀作用,让背景不再单调,几何感十足的气泡边缘和清爽的色彩,能够很好的赋予页面足够的现代感,干净而具有当下的时代感。

7. 作为图片载体给人独特的印象

气泡类元素本身的形体都是非常规的几何元素,因此它们相比于常见的圆形、矩形、三角形,出现的机率更低,当它作为图片的载体的时候,这种独特的视觉体验更容易给用户留下印象,四两拨千斤。

8. 用气泡动画来创造趣味性

气泡动画可以拥有冷淡的科技感,也可以软萌可爱充满趣味感,这取决于动画的设计者怎么做。在页面中使用有趣的气泡动画能够让页面更加令人亲近,让用户在加载和转场的时候会心一笑,记住你的设计。

9. 用气泡动画来构建品牌LOGO

这同样是一种巧妙地吸引用户同时宣传品牌的手法,当然,前提是你的品牌 LOGO 适合使用这样的表现方式。气泡动画富有活力,有生命力,这一点最终能够加持在品牌上,同时能够给用户留下更加深刻的记忆。

结语

有机感是近两年来比较热的一个设计方向,但是它的呈现方式并没有那么具体,而诸如斑点和气泡这样的元素是呈现有机感最常用的方式,加上新的设计工具的普及,设计师开始使用这些元素来创造富有有机感的设计。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计  cs界面设计  ipad界面设计  包装设计  图标定制  用户体验 、交互设计、 网站建设 平面设计服务

ionic用插件(cordova-plugin-baidumaplocation)定位并调百度地图在上面显示

seo达人

如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里

之前研究了定位,想用百度地图,但是用百度地图的 
JavaScript API里面的浏览器定位根本不行,要用插件,很多人说本身带的这个cordova-plugin-geolocation插件因为网络问题,只有ios可以用,然后找到了专门针对安卓的cordova-qdc-baidu-location插件,但是这个插件不知道是不是我使用的问题,得到的数据可以弹出来,但是数据并不像这个插件所说的数据格式是

{
  latitude : 纬度,
  lontitude: 经度, ... }
    
  • 1
  • 2
  • 3
  • 4
  • 5

这样的,而是字符串,不是json字符串,弄了半天还是取不到里面的关于经纬度的值,然后发现了现在的这个定位插件cordova-plugin-baidumaplocation这个插件返回的数据格式是json的,可以直接获取。 
因为网络配代理的原因,一直添加不上插件,今天才发现用cordova-plugin-baidumaplocation插件定位其实挺简单的。 
1.申请AK值。 
地址:http://lbsyun.baidu.com/ 
需要申请两个或者三个(配置ios),一个是js的,一个是android的(三个的话还有一个ios的,但是这边直接只写安卓的,其实ios是一样的) 
注:包名要一致 
2.添加插件. 
命令:

cordova plugin add cordova-plugin-baidumaplocation --variable ANDROID_KEY="<API_KEY_ANDROID>" --variable IOS_KEY="<API_KEY_IOS>"
    
  • 1

注意:是没有<>这种尖括号的。 
到此为止准备工作基本上晚了,开始代码部分: 
1.引入百度地图:

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=nLsK9qUii8uBZlkPAQUozAf9mR5xNVZF"></script>
    
  • 1

这个引入是为了转化经纬度为地址和显示地图。 
2.在html页面上写两个 标签:

<button class="button" ng-click="getarea()">点击我获取地址百度</button> <div id='allmap' style=""></div>
    
  • 1
  • 2

div标签是为了放地图的。 
3.js部分:

$scope.getarea=function(){ //myaddr(116.324499,39.899216); // 进行定位 baidumap_location.getCurrentPosition(function (result) { var latitude=result.latitude; var lontitude=result.lontitude;
        myaddr(lontitude,latitude);
      }, function (error) { });
    } //根据定位得到的经纬度对地址进行解析 function myaddr(lontitude,latitude){ //alert("我的地址是:"+lontitude+","+latitude); // 百度地图API功能 var map = new BMap.Map("allmap"); var point = new BMap.Point(lontitude, latitude);//34.7534880000,113.6313490000 map.centerAndZoom(point, 12); var marker = new BMap.Marker(point); // 创建标注 map.addOverlay(marker); // 将标注添加到地图中 //把地址在地图上标出来 var geoc = new BMap.Geocoder();
      geoc.getLocation(point, function(rs){ var addrmsg=rs.address; //var addComp = rs.addressComponents;  //详细的分省市县街道的信息 //alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber); var opts = {
          width : 200, // 信息窗口宽度 height: 50, // 信息窗口高度 } var infoWindow = new BMap.InfoWindow("地址:"+addrmsg, opts); //创建信息窗口对象  map.openInfoWindow(infoWindow,point); //开启信息窗口 }); 

    }
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

4.css部分:其实可以不要的,这是因为地图中的地址显示的窗口看起来有点问题,虽然改了依旧不好看,但是功能实现了。

.BMap_pop{ top: 70px !important; } .BMap_bubble_content{ width: 95% !important; } .BMap_center{ top: 26px !important; }
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注:现在得到的地址是省市县街道地址,想得到诸如:北京市朝阳区XX大厦附近这样的地址的话还没有研究,等研究出来了再补上。 

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务


UI设计中亮色的优点和缺点

资深UI设计者


如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里

这篇文章展示了丰富多彩的UI的优缺点,描述了明亮的颜色如何提高用户体验,以及在选择亮色时应该考虑有哪些缺陷。

声明:如需转载,请申请本人授权并保留文章全部信息,严禁私自用于任何商业用途,请尊重原文作者及译者权益。


有效的颜色应用技巧是每个从事视觉合成相关工作的,包括插画家和UI设计师,都必须具备的。随着扁平化设计和material design的普及,具备色彩理论知识变得更加重要。

目前鲜艳的颜色和渐变出现在不同数字产品的用户界面上:从好玩和有趣的到商业应用和网站。然而,关于明亮的颜色对用户体验的影响还有很多讨论。本文对丰富多彩的用户界面设计的优缺点进行了深入的分析。


明亮的颜色如何提高UI效果?


增加可读性和易读性


我们之前的一篇文章中,介绍了影响配色方案选择的因素。可读性和易读性是设计师考虑色彩运用的基本因素。提醒一下,可读性是指人们阅读文本内容的容易程度,而易读性则定义了用户在特定字体中区分字母的速度。

鲜明的颜色足够的对比度有助于增加可读性和易读性。有对比的布局元素会变得可区分和引人注目。然而,高色彩对比可能并不总是有效。如果文本内容和背景颜色对比度太大,将很难阅读或扫描文本。这就是为什么推荐设计师创建一个温和的对比度,只用高对比度颜色突出元素的原因。


提亮导航,使交互更直观


对任何数字产品来说,视觉层次是打造清晰导航和直观交互的核心要素。UI组件就是这样被组织起来的,这样大脑就可以通过这种包括颜色在内的物理差异来区分物体。

颜色有自己的层次结构,这是受用户思维的影响所决定的。有大胆的颜色,如红色和橙色,以及弱的白色和奶油色。明亮的颜色很容易被注意到,所以设计师经常用它们来突出或设置对比度。此外,将一种颜色应用到几个元素上,表示它们在某种程度上是有相关性的。例如,您可以为购买按钮选择红色,以便人们在需要时直观地找到它们。


可识别性


大脑对大胆的颜色反应强烈,这就是为什么明亮的颜色组合很容易被注意和记住的原因。色彩丰富的用户界面设计,在众多颜色较轻的产品中容易脱颖而出。颜色的选择需要基于目标受众的喜好和市场调查。

此外,如果一个公司拥有明亮的企业颜色应用于商标和品牌项目,那使用同样颜色在其网站或移动应用上也是一个好方法。这种方式连接公司所有的沟通渠道,创造了一致性的视觉解决方案,并且提高了品牌知名度。


设定情绪和气氛


为了传达正确的语气、信息和号召用户做出预期的行动,设计师需要知道颜色会影响我们的情绪和行为。我们的大脑会对颜色做出反应,而我们通常不会注意这点。这项名为“颜色心理学”的研究表明,当我们的眼睛感知到一种颜色时,大脑就会向内分泌系统发出信号,释放负责情绪变化的荷尔蒙。

适当选择颜色有助于让用户处于一种促使他们采取行动的心理状态,并设置合适的氛围将正确的信息传递给用户。比如,如果设计师设计了一个与自然或园艺相关的产品的UI,很有可能会选择用绿色和蓝色。通过这种方式,设计将从一开始就与一种产品或服务类型相关联。您可以在我们的文章《颜色对用户行为的影响》中找到对颜色含义的具体描述。


时尚的外观和风格


明亮的颜色和渐变,是UI设计中的最流行的趋势。如今,可以在不同类型的数字产品中看到这种运用,而严格的商业风格的限制似乎被抛在了一边。

明亮的渐变色彩在用户界面上可以带来一种现代化感和新鲜的想法。结合趋势设计的APP或网站往往引人注目,尽管竞争激烈,仍能吸引用户的注意力。


明亮的颜色使用缺陷


很难搭配


那些认为颜色能靠直觉和审美随意混合的观念是错误的。如果你想要创造和谐的视觉构图,那么关于颜色如何起作用以及它们如何协作的基本知识是必不可少的。

在UI中应用的颜色越鲜艳,搭配就越困难。为了让用户感到愉悦和舒适,设计师努力将平衡和和谐融入到用户界面设计中。色彩协调是指在设计中以最吸引人、最有效的方式来安排色彩,以供用户感知。和谐的颜色组合有助于对网站或APP获得一个不错的第一印象。颜色理论定义了一些基本的颜色方案,下面这些配色方案被证明是有效的。

单色,色彩和谐是基于一种颜色和它的各种色调。

类似色,该方案适用于颜色轮上相邻的颜色。

互补色,它是在色轮上相互放置的颜色的混合,目的是产生高对比度。

多色互补,这个方案与前一个方案相似,但是它使用了更多的颜色。例如,如果你选择蓝色,你需要取另外两个相邻的颜色,表示黄色和红色。

三元色,它是基于三个独立的颜色,在色轮上是等距的。专业人士建议使用一种颜色作为主调,其他颜色作为主调。

四色,tetradic配色方案使用四个颜色从车轮是互补的。如果你把选中颜色上的点连起来,它们就形成了矩形。


失去节奏感


大胆的颜色可以作为在UI中进行重音的工具,但它也可能成为重音消失的原因。许多鲜明的颜色在一个单一的视觉组成会带来了失去突出元素的风险,因为他们成为一个色彩种制造混乱的一部分。

这就是为什么推荐设计师使用60%-30%-10%的比例。最重要的部分应该是主色调,三分之一的构图采用第二色,10%的部分应该选择有助于形成重音的颜色。这样的比例被认为是令人愉快的,因为它允许逐渐感知所有的视觉元素。


明亮的颜色并不适合所有用户群体


创造数字产品的核心阶段之一是用户研究。定义和分析目标受众,使设计师了解他们对网站或应用程序的期望。年龄、性别和文化会影响潜在用户的喜好。例如,孩子们很喜欢黄色,但当我们长大后,黄色通常看起来不那么有吸引力。男人和女人通常喜欢冷酷的颜色,如蓝色,绿色。不像女人,男人通常喜欢白色、黑色和灰色。

明亮的颜色也是如此。即使您是设计一个有趣的APP,也需要考虑目标受众的具体情况。中年人通常更喜欢轻松的用户界面,他们可能不喜欢屏幕上很重的颜色去分散注意力。


在移动屏幕上,鲜艳的颜色看起来反差太大


正如我们上面所说,明亮的颜色可以产生大量的对比度,帮助突出重要的UI元素,并提供良好的易读性和可读性。然而,过多的对比度可能会起到不好的效果,尤其是在移动界面上,因为它们的空间有限,可以在不同的环境下使用。

小屏幕、环境光和明亮的字体使对比度高的图像在用户眼中显得很难看。这就是为什么在移动UI设计中使用明亮的颜色需要注意颜色之间的对比度,这样人们在阅读文字时会感到舒服。

颜色是大师手中的一件伟大的工具,和其他任何工具一样,它也有它的优点和缺点。为了有效地使用它,需要考虑它的所有方面,以便能够找到适合设计任务和目标的解决方案。



蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计  cs界面设计  ipad界面设计  包装设计  图标定制  用户体验 、交互设计、 网站建设 平面设计服务




js 模块化编程

seo达人

如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里

了解一个技术,首先要了解这个技术产生的背景及解决的问题,而不应该只是单纯的知道该怎么用。之前的状态可能就是只是为了了解而了解,并不知道实际产生的原因及带来的好处,所以今天就来总结一下。

1. 什么是模块化编程

来看百度百科的定义

模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一个确定的功能,并在这些模块之间建立必要的联系,通过模块的互相协作完成整个功能的程序设计方法。

比如 java 的 import,C# 的 using。我的理解是通过模块化编程,可以将不同的功能独立出来,修改某个功能时不会对其他功能产生影响。

2. 为什么要模块化

来看下面一个例子

// A.js function sayWord(type){ if(type === 1){
        console.log("hello");
    }else if(type === 2){
        console.log("world");
    }
} // B.js function Hello(){ sayWord(1);
} // C.js Hello()  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

假设上面三个文件,B.js 引用了 A.js 里面的内容,C.js 又引用了 B.js 里面的内容,如果编写 C.js 的人只知道引用了 B.js,那他就不会引用 A.js 就会导致程序出错,而且文件的引用顺序也不能出错。给整体代码的调试修改带来不便。

还有个问题,上述代码暴露了两个全局变量,容易造成全局变量的污染

3. AMD

AMD 即 Asynchronous Module Definition(异步模块定义)。采取异步加载的方式加载模块,模块的加载不会影响它后面的语句执行。而且只有用到的时候才会去加载相关文件,属于浏览器端的标准

假设下面这种情况

// util.js define(function(){ return {
        getFormatDate:function(date,type){ if(type === 1){ return '2018-08-9' } if(type === 2){ return '2018 年 8 月 9 日' }
        }
    }
}) // a-util.js define(['./util.js'],function(util){ return {
        aGetFormatDate:function(date){ return util.getFormatDate(date,2)
        }
    }
}) // a.js define(['./a-util.js'],function(aUtil){ return {
        printDate:function(date){ console.log(aUtil.aGetFormatDate(date))
        }
    }
}) // main.js require(['./a.js'],function(a){ var date = new Date()
    a.printDate(date)
})
console.log(1); // 使用 // <script src = "/require.min.js" data-main="./main.js"></script>   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

页面上先打印 1,然后才会打印 2018 年 8 月 9 日。因此 AMD 的加载并不会影响后续的语句执行。

如果不是异步加载会出现什么情况呢

var a = require('a');
console.log(1) 
  • 1
  • 2

后面的语句需要等待 a 加载完成才能执行,如果加载时间过长,整个程序都会卡在这。因此,浏览器不能同步加载资源,这也是 AMD 的产生背景。

AMD 是在浏览器端实现模块化开发的规范。由于该规范不是 JavaScript 原始支持的,使用 AMD 规范进行开发的时候需要引入第三方的库函数,也就是 RequireJS。

RequireJS 主要解决的问题

  • 使 JS 异步加载,避免页面失去响应
  • 管理代码之间的依赖性,有利于代码的编写和维护

下面来看看如何使用 require.js

要想使用 require.js,首先要 define

// ? 代表该参数可选 define(id?, dependencies?, factory); 
  • 1
  • 2
  • id:指的是定义的模块的名字
  • dependencies:是定义的模块所依赖模块的数组
  • factory:为模块初始化要执行的函数或对象。如果为函数,它应该只被执行一次。如果是对象,此对象应该为模块的输出值。

    具体的规范说明可以参考 AMD (中文版) 
    举个例子,创建一个名为 “alpha” 的模块,使用了 require,exports,和名为 “beta” 的模块:

define("alpha", ["require", "exports", "beta"], function (require, exports, beta) { exports.verb = function() { return beta.verb(); //Or: return require("beta").verb();
       }
   }); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

一个返回对象的匿名模块:

define(["alpha"], function (alpha) { return {
         verb: function(){ return alpha.verb() + 2;
         }
       };
   }); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

一个没有依赖性的模块可以直接定义对象:

define({
     add: function(x, y){ return x + y;
     }
   }); 
  • 1
  • 2
  • 3
  • 4
  • 5

如何使用

AMD 采用 require 语句加载模块

require([module],callback); 
  • 1
  • module:是一个数组,里面的成员是要加载的模块
  • callback:加载成功之后的回调函数

例如

require(['./a.js'],function(a){ var date = new Date()
    a.printDate(date)
}) 
  • 1
  • 2
  • 3
  • 4

具体的使用方法如下

// util.js define(function(){ return {
        getFormatDate:function(date,type){ if(type === 1){ return '2018-08-09' } if(type === 2){ return '2018 年 8 月 9 日' }
        }
    }
}) // a-util.js define(['./util.js'],function(util){ return {
        aGetFormatDate:function(date){ return util.getFormatDate(date,2)
        }
    }
}) // a.js define(['./a-util.js'],function(aUtil){ return {
        printDate:function(date){ console.log(aUtil.aGetFormatDate(date))
        }
    }
}) // main.js require(['./a.js'],function(a){ var date = new Date()
    a.printDate(date)
}) // 使用 // <script src = "/require.min.js" data-main="./main.js"></script>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

假设这里有 4 个文件,util.js,a-util.js 引用了 util.js,a.js 引用了 a-util.js,main.js 引用了 a.js。

其中,data-main 属性的作用是加载网页程序的主模块。

上例演示了一个主模块最简单的写法,默认情况下,require.js 假设依赖和主模块在同一个目录。

使用 require.config() 方法可以对模块的加载行为进行自定义。require.config() 就写在主模块(main.js)的头部,参数是一个对象,这个对象的 paths 属性指定各个模块的加载路径

require.config({
    paths:{ "a":"src/a.js", "b":"src/b.js" }
}) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

还有一种方法是改变基础目录(baseUrl)

require.config({

    baseUrl: "src",

    paths: { "a": "a.js", "b": "b.js",

    }

  }); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4. CommonJS

commonJS 是 nodejs 的模块化规范,现在被大量用在前端,由于构建工具的高度自动化,使得使用 npm 的成本非常低。commonJS 不会异步加载 JS,而是同步一次性加载出来

在 commonJS 中,有一个全局性的方法 require(),用于加载模块,例如

const util = require('util'); 
  • 1

然后,就可以调用 util 提供的方法了

const util = require('util'); var date = new date();
util.getFormatDate(date,1); 
  • 1
  • 2
  • 3

commonJS 对于模块的定义分三种,模块定义(exports),模块引用(require)和模块标示(module)

exports() 对象用于导出当前模块的变量或方法,唯一的导出口。require() 用来引入外部模块。module 对象代表模块本身。

举个栗子

// util.js module.exports = {
    getFormatDate:function(date, type){ if(type === 1){ return '2017-06-15' } if(type === 2){ return '2017 年 6 月 15 日' }
    }
} // a-util.js const util = require('util.js')
module.exports = {
    aGetFormatDate:function(date){ return util.getFormatDate(date,2)
    }
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

或者下面这种方式

 // foobar.js // 定义行为 function foobar(){ this.foo = function(){ console.log('Hello foo');
        } this.bar = function(){ console.log('Hello bar');
          }
 } // 把 foobar 暴露给其它模块 exports.foobar = foobar; // main.js //使用文件与模块文件在同一目录 var foobar = require('./foobar').foobar,
test = new foobar();
test.bar(); // 'Hello bar' 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

5. ES6 Module

ES6 模块的设计思想是尽量静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量,而 CommonJS 和 AMD 模块都只能在运行时确定这些关系。如 CommonJS 加载方式为 “运行时加载”,ES6 的加载方式为 “编译时加载” 或者静态加载,即 ES6 可以在编译时就完成模块加载,效率比 CommonJS 模块的加载方式高。

ES6 模块自动采用严格模式,不管有没有在模块头部加上 “use strict”。

ES6 export 语句输出的接口与其对应的值是动态绑定关系,即通过该接口可以取到模块内部实时的值。而 CommonJS 模块输出的是值的缓存,不存在动态更新。

ES6 与 CommonJS 模块的差异

  • CommonJS 模块输出的是一个值的复制,ES6 模块输出的是值的引用。
  • CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。
  • CommonJS 中的 this 指向当前模块,ES6 模块 this 为 undefined

第二个差异是因为 CommonJS 加载的是一个对象(即 Module.exports 属性),该对象只有在脚本运行结束时才会生成,而 ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成。

总结

CommonJS 采用了服务器优先的策略,使用同步方式加载模块,而 AMD 采用异步加载的方式。所以如果需要使用异步加载 js 的话建议使用 AMD,而当项目使用了 npm 的情况下建议使用 CommonJS。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务


日历

链接

个人资料

蓝蓝设计的小编 http://www.lanlanwork.com

存档