首页

验证码,设计真的那么简单吗?

雪涛

编辑导读:自手机诞生至今,手机验证码的设计形式越来越多,图标的、语序点选的、空间推理的等等样式,让用户感觉新意的同时,也给设计者提出了难题:验证码的设计,到底应该怎么做才能更好的便利使用者呢?一起看看这篇文章吧,也许你会有新思路、新方向。

验证码“作为人机交互界面经常出现的元素,其本质是为了防止用户利用机器人程序自动注册、登录、恶意投票、发送垃圾邮件、恶意尝试密码等登陆尝试,保证网络安全。”

我们平时在使用互联网产品时会发现,对于企业来说,如何防止黑产恶意抓取企业数据资产,用户隐私,和恶意攻击等,网络安全问题重中之重。

对于用户来说,希望是极致用户体验,不打扰,能快速完成任务。

因此需要在两者间取得相对平衡,既兼顾企业网络安全,又能给用户极致体验。

本文是我在项目设计中总结几种常用到验证码。

我们如何在产品设计中恰当的运用验证码,让用户体验产品起来超级棒却又能保证产品的安全。

希望能为设计师伙伴们提供一些启发或帮助。

一、验证方式的分类

进入移动互联网时代以来,验证码的运用场景越来越广。

其验证方式可以大致归为以下几类:

1. 图标/图片点选验证

图标/图片行为验证可以保证非中文语言地区的用户可以轻松识别。

高安全级别,用户只需按照顺序点击图中图标/图片,即可完成安全验证。

但是如果选择图标/图片质量不高或者只显示一部分,就会无限增加用户识别能力,体验就超级不好。

比如12306火车票网站图片点选验证就被人唾骂。但是好处也多,那就是打击了囤票的抢票软件。

  • 防御能力:4星;
  • 用户体验:2星。

2. 文字点选验证

和图标/图片点选验证方式不同,文字点选验证在保证人的可识别性同时让机器的识别难度呈指数型增长。

安全性比图标/图片点选验证更高,用户只需按照顺序点击图中文字,即可完成安全验证。

对人比较友好,对机器不太友好。

  • 防御能力:4星;
  • 用户体验:3星。

3. 语序点选验证

和文字点选验证方式不同,语序点选验证在保证人能识别范围内,并要求用户按照正确的自然语义排序完成点选操作,让机器的识别难度呈指数型增长。

也无形中给用户增加认知成本,比如文盲,对文字理解弱的人。

  • 防御能力:4.5星;
  • 用户体验:2.5星。

4. 空间推理验证

和其他验证方式不同,空间推理验证同时需要用户根据图片的问题提示点选相应的物体。

逻辑解题能力结合3D立体元素识别能力,对用户来说认知成本更高。

由于图片空间形态的多样性和复杂的问题,可以显著的降低机器识别的概率,适用于高安全场景。

  • 防御能力:4.5星;
  • 用户体验:2星。

5. 滑动拼图验证

滑动拼图验证的过程中会收集用户拖动滑块的行为轨迹和用户设备信息等多维度信息,实时分析这些信息来进行人机识别。

对于用户来说,流畅优质的用户体验,仅需轻轻滑动完成拼图,即可完成安全验证。

还有重要一点,拼图验证区域可以作为广告宣传或者其他用途,可增加收入。

  • 防御能力:3星;
  • 用户体验:4星。

6. 智能组合验证

可根据用户行为轨迹以及其他安全策略,判别用户的风险程度,给用户智能呈现对应的验证形式。

可疑用户根据疑似程度弹出不同难度的验证码进行二次验证,也有概率直接通过。

极致用户体验,多维度收集环境信息,安全用户只需轻点即可通过验证。但是风险也很大,需要非常高大数据支持。

  • 防御能力:2星;
  • 用户体验:5星。

7. 输入型验证

像纯数字,纯字母,数字加字母的静态或动态验证,由于此类的验证码过于内容简单,对计算器程序来说,学习成本不高,很容易被破解,现在几乎不用这种验证方式了。

现在部分还在使用是升级版输入型验证,主要是扭曲变形的数字加字母的验证码,这提高了难度,难以直接辨认。

但是对于用户体验来说,用户体验度一般。

  • 防御能力:1星;
  • 用户体验:3星,

8. 短信验证

对于短信验证,其实也可以归类为输入型验证,为什么会单独分一类,主要是它跟输入型还是有很大不同。

短信验证成本相对输入型验证高,因为需要购买短信,但安全型却是指数型增长的,用户体验来说非常不错。

  • 防御能力:4星;
  • 用户体验:4星。

9. 指纹或刷脸验证

对于以上验证方式来说,指纹或刷脸验证成本会更高,因为需要相应的硬件软件支持,投入大限制也高。

但是安全性也是最高的,极致用户体验,只需要按下手指或者刷下脸就可以验证通过。

  • 防御能力:5星;
  • 用户体验:5星。

上面列举的这几种验证方式,只是目前使用最广泛和最常用的验证方式。

随着科技发展,会出现越来越多不同的验证方式,给用户带来更加极致的用户体验。

二、运用场景的分类

随着互联网开启,验证码运用场景也随之而来。

其运用场景可以大致归为以下几类:

1. 登录注册

验证码适用于 App、Web 及小程序等用户注册场景,可以抵御自动机恶意注册(如利用注册机批量注册小号)。

同时可以有效阻止撞库攻击,从源头进行防护,保障正常用户的注册、登录。

2. 活动秒杀

羊毛党频繁刷取奖励,导致真实用户无法获取奖励,业务方运营活动效果下降、经济利益受损。

验证码适用于抢购、秒杀、优惠券等活动场景,有效抵御爬虫、自动机刷取福利券,有效拦截刷单操作,让羊毛党空手而归。

3. 点赞发帖

恶意用户用小号在 UGC 社区恶意发帖、刷票,使运营方无法获得真实用户反馈,影响活动开展。

验证码适用于论坛、投票等场景,有效抵御自动机刷赞和水军刷帖,解决广告屠版、恶意灌水、刷票问题。

4. 数据保护

恶意爬虫可爬取网站的内容、数据,导致网页的核心资源、机密信息被盗用和复制。

验证码适用于公告栏、论坛等内容网站,有效抵御爬虫爬取网站内容信息,防止自动机、爬虫盗取网页内容和数据。

除了以上常见的运用场景,未来验证运用的场景也会越来越多,也会越来越完善,既兼顾网络安全,又有极致用户体验。

三、显示方式(交互方式)的分类

对于不同产品或者不同场景,其显示方式(交互方式)可以大致归为以下几类:

1. 触发式显示

触发式显示就是鼠标移入验证条后显示验证拼图,轻松接入,不影响网页原有的排版和美观。

特别是对于手机端寸土寸金的显示内容区域来说,这就显得尤为重要,可以节省很多空间。

适用端:电脑端和手机端。

2. 嵌入式显示

何为嵌入式显示,就是点选验证区域直接完整嵌入网页,清晰直观,便于用户使用和广告宣传,特别对于网站品牌宣传,可以从验证码下手。

但是对于手机端来说,因为需要完整显示验证区,这就尤为很占用空间,手机端不是很推荐使用这种显示方式。

适用端:电脑端。

3. 弹出式显示

弹出式的显示,跟触发式显示有点像,但是弹出式显示是绑定自有验证按钮效果,与自有业务样式完美融合。

而且会根据情况来是否需要验证弹窗,体验相对来说会更加友好,适用场景也更广泛。

适用端:电脑端和手机端。

四、总结

① 涉及到产品的安全性,目前验证码是最小成本来实现产品安全的手段之一;

② 在实际运用中需要注意辨别产品安全跟验证码之间关系,应该根据产品的安全以及场景是否需要来选择恰当的“验证码”;

③ 验证码未来无论怎么变化多端,其目的都是为了网络安全,其次才是用户体验。在安全和体验上,这就需要我们设计师来找到他们平衡点。

下面是汇总的验证码验证方式对比图,希望能为设计师伙伴们在使用验证码时提供一些启发或帮助。


蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码ben_lanlan,报下信息,会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

文章来源:人人都是产品经理   

分享此文一切功德,皆悉回向给文章原作者及众读者.

免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

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



元宇宙,互联网创新版“水变油”

雪涛

今年年初,世界上最大的多人在线创作沙盒游戏平台Roblox携元宇宙概念在纽交所上市,再加上《失控玩家》的热映,这个听上去极为虚幻的、不着边际的概念成了资本的香饽饽。本文作者对此进行了分析,与你分享。

上个世纪八十年代,为了尽快改变国内发展现状,国内掀起了一场崇尚知识、尊重人才的运动,追求科学知识成了所有人的共识,就在全国人民都对新科学新技术翘首以盼的时候,“水变油”横空出世,引发整个科技圈震动,举国沸腾。

一旦这一技术成真,所有人都明白,这对当时的中国和国内科技界,意味着什么。而事实上,这不过是一场惊天闹剧。水变油就算可能有朝一日会成真,但那属于未来,并不是当时所处的时代所能实现的。

如今,这一幕在科技互联网领域似乎又在上演。创新匮乏,风口难现,资本畏缩的局面之下,整个科创领域急需要一个新的概念振作整个市场。

于是,元宇宙概念堂而皇之的登上了风口。

今年年初,世界上最大的多人在线创作沙盒游戏平台Roblox携元宇宙概念在纽交所上市,首日市值突破 400 亿美元,相较去年约 40 亿美元的估值飙升10 倍。这个月,字节跳动收购Pico更是把元宇宙的热度推向高潮,再加上《失控玩家》上映,元宇宙概念股爆发,这个听上去极为虚幻的、不着边际的概念成了资本的香饽饽。

然而,从互联网风口的发展脉络来看,元宇宙的爆火,更像是互联网创新的一次“水变油”闹剧。

一、臆想出来的“救命药”

元宇宙这个概念可能跟水变油一样久远了,现在无非是新瓶装旧酒,被资本和巨头们重新包装了新概念。

搞笑的是,元宇宙的概念重新火到现在,被刷屏、被科普、被讨论,但实际上很多人仍然没有弄懂这个概念,而这种似懂非懂云里雾里的概念,对于科技巨头和资本来说,最有腾挪的空间。

事实上,在1992年出版的科幻作品《雪崩》中,作者构建了一个平行于现实世界的虚拟世界,人们可以在里面拥有一个自己的虚拟替身,这个世界叫作“Metaverse”,也就是类似现在爆火的元宇宙。

元宇宙所代表的世界,自由度极高,换句话说,你在现实中能做的事情,在元宇宙也能做,而现实中不能做的事情,可能会在元宇宙中实现。

就像《失控玩家》中的开放世界游戏,玩家在游戏中可以杀人、放火、抢银行,对不带墨镜的非玩家角色们做任何事情。它和普通游戏的区别在于,元宇宙中的这些行为都建立在高度的沉浸式体验中,当你杀人、放火、抢银行时,感觉像真的在实施暴力和犯罪。

当然,元宇宙的想象空间不是像电影中偏向满足用户的暴力需求,而是延展到现有互联网生活无法触及的领域,接近于把整个现实世界平移到虚拟中。

但现在看来这未免太过虚幻。广义被认同的元宇宙有六大支撑技术,分别为区块链技术、交互技术、电子游戏技术、人工智能技术、网络及运算技术以及物联网技术,而单看任何一项,都处于一种技术水平和落地应用跟不上外界期待的状态。追根究底,当初区块链、人工智能等概念炒作多火爆,现在就有多尴尬,这和现在的元宇宙如出一辙。

可为什么就是这样一个概念,引起了资本和巨头的竞相争夺呢?其实他们未必真的认为元宇宙会掀起下一代互联网社交和娱乐模式的变革,更现实的是他们恰好需要元宇宙这个让人摸不着头脑的新“风口”。

进入2021年以后,互联网经济整体进入了一个动荡、难熬的时期。一方面,互联网用户增长缓慢,已然到达了一个极限,越发困扰着互联网公司。

根据中国互联网络信息中心(CNNIC)最新发布的《中国互联网络发展状况统计报告》显示,截至2021年6月,我国网民规模达10.11亿,较2020年12月增长2175万,互联网普及率达71.6%。其中,即时通信用户规模达9.83亿,较2020年12月增长仅218万,短视频用户规模高达8.88亿,较2020年12月增长1440万。

另一方面,监管成为今年影响互联网公司最重要的外部因素,从教育到游戏,从社区团购到共享民宿,从影视圈到饭圈…那些曾经引得资本追逐和热捧的风口及风口上的公司,在野蛮生长的过程中,乱象丛生,现在无一例外地触动了红线。

从这个角度出发,元宇宙这样一个没有落地的、虚幻的又能刺激大众兴奋点的概念,在监管时代下似乎安全许多。互联网巨头和资本,就如同古代帝王迟暮之后,一味追求长生,生生臆想出来了长生不老药。

二、互联网创新的“大溃败”

近期,苹果秋季发布会举行,每年的这个时候,围绕苹果新机都会掀起一波又一波讨论的热潮。然而,不得不承认,苹果秋季发布会带给用户的惊喜已经越来越少,舆论热潮过后,讨论点总会落在苹果创新乏力、库克才能不足上。

苹果的创新困境,只是整个互联网经济创新越来越泯然于众的一个缩影,在贴有创新乏力标签的互联网公司名单中,恐怕要加入很多巨头的名字。

2016年,谷歌也举行了一次发布会,在会上一口气发布了一大堆的硬件产品,这个东拼西凑的硬件全家桶,因为装的都是“过时”的产品,而被媒体狠狠地嘲讽了一次。由此,作为美国硅谷技术创新风向标的企业,人们开始质疑谷歌是不是“黔驴技穷”,一位在谷歌任职13年的老工程师公开批评谷歌发布的产品分别抄袭了亚马逊Echo、WhatsApp和微信。

硅谷的活力丧失,已然成为一种共识。

而国内呢?我国互联网经济的模式或产品创新,曾一度改变了原本互联网公司从硅谷复制、借鉴现有模式的习惯,渐趋成为全球互联网创新的另一个中心。然而,在共享经济的高潮过后,国内互联网新事物的诞生和发展套路基本就沦落成找准一个行业进行线上化,继而融资烧钱、规模扩张、相互争夺流量。成则剩者为王,败则一地鸡毛。

这其实不是创新,以往互联网创新的本质在于变革行业,衍生出一种比现有商业业态更有优势的新生模式,但现在互联网的风口中,我们看到的不是对行业的升级,而是干扰甚至破坏。

比如社区团购,社区团购通过融资,以补贴吸引用户白嫖,将原有菜摊菜贩为主导的商业业态快速破坏,实际上它为商业社会创造的价值却寥寥无几。新消费投资热也是如此,眼见没什么新赛道了,资本瞄准了我们的餐桌。

原以为社区团购和新消费已然是国内互联网创新的一次大倒退,直至元宇宙爆火,这场由概念炒作掀起的虚火从硅谷烧到国内,更像是一场席卷全球互联网经济的倒退,以掩盖整个互联网创新乏力的事实。

换句话说,我们正在拿未来数十年都未必能实现的科技幻想,来弥补现在的创新枯竭。

尤其是外界对元宇宙的畅想,目前来看过于超前了。一方面,作为能够超过智能手机和个人电脑的下一代主流计算平台和元宇宙的重要入口,AR/VR还停留在视觉阶段,交互很差,用户根本没有沉浸式体验;

另一方面,一个全新的世界,需要包括游戏、影视视频音乐内容、办公与会议体系、虚拟消费品、虚拟房地产、虚拟经济体系等等,而这些要素在现有的互联网世界都未必成熟。

三、“明日之水”救“今日之火”

元宇宙的刺激作用已然在互联网商业中显现。Roblox在美国纳斯达克上市,顶着“元宇宙第一股”的光环,Roblox现在的市值高达500亿美元。

无独有偶,9月8日,元宇宙概念股集体爆发,股价飙升,最高涨幅达到了44%。其中,中青宝连续两日涨停,连带着歌尔股份也收获了10cm涨停,市值逼近1800亿元。字节跳动更是因为高价收购国内VR行业头部厂商PICO,被推上舆论的风口浪尖。

游戏公司们也极为兴奋。游戏公司是元宇宙重要的参与者,甚至不排除未来一个开放世界的游戏就是一个元宇宙,由此,备受政策风险左右的游戏公司们似乎找到了一个天然适合炒作、拉动股价的营销点。像完美世界、世纪华通等,都在向外界透露自己积极探索和融入元宇宙相关元素的信息。

但元宇宙拯救不了国内游戏公司,同样也拯救不了国内互联网。

近期,A股游戏公司先后披露了半年度业绩报告。数据显示,2021年上半年,A股31家游戏公司中,16家出现了营收同比下滑,17家公司归母净利润同比下滑,其中7家企业出现亏损。三七互娱、完美世界、昆仑万维等头部游戏公司出现营收、净利双降。

游戏公司业绩下滑,主要是因为去年同期的业绩太过优秀,疫情后便恢复了正常水平。不过可以预测的是,下半年游戏公司的业绩不容乐观。新未成年人防沉迷游戏禁令出台后,游戏公司都要面临用户活跃度降低、游戏流水下降的问题,这在游戏用户数日益减少的背景下,又增添了营收的压力。

参与元宇宙炒作的不只是游戏公司,互联网巨头们也在蜂拥而上。比如腾讯,据天风证券梳理,无论是打造虚拟世界需要的引擎工具的缔造者Epic,还是AR组件领导者Snap,以及自由表情工具Bitmoji、摄像头Kit、社交软件Discord等,都有腾讯投资的身影。

腾讯和字节跳动正在争夺和押宝下一场互联网变革的风口,对后者来讲,元宇宙可能涵盖了下一代社交网络体系,成为干掉腾讯这一社交巨头的绝佳机会。可是,无论是腾讯还是字节跳动,追捧和投资元宇宙似乎都不能解决当下互联网公司面临的最大困境,外部不确定性因素或将持续对他们的核心业务产生冲击。

对于创投圈,我们看到,元宇宙其实很难成为创投圈的一剂“兴奋剂”,缓解创投人士的焦虑。因为放眼望去,除了一些蹭元宇宙热度的游戏公司,创投圈投无可投,VR创业公司虽然重新得到关注,但过去VR元年的惨痛经历还历历在目,而跟风的游戏公司,他们的行为仅限于炒作概念。想要落地,可能还很久远。

从互联网诞生之初,消费、娱乐、信息获取等模式的创新,丰富了用户的生活,到现在互联网公司围着一个过度超前的概念,靠想象获得刺激和高潮,这种演变未免有些悲哀。

毕竟,元宇宙理论上即使是成立的,但是它也和水变油一样,并不是这个时代的事情,可以研究,但应该做好长期投入的准备,而不是现在就开始进行概念炒作和收割。

蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码ben_lanlan,报下信息,会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

文章来源:人人都是产品经理   作者:道总有理

分享此文一切功德,皆悉回向给文章原作者及众读者.

免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

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


如何有效进行竞品分析

雪涛

这篇小文,将从四个模块讲述如何有效竞品分析。



01 认识竞品分析


竞品分析顾名思义,是对竞争对手的产品进行比较分析。


不同的角色做分析的方向是不同的,UX设计师做产品体验分析,从视觉和感觉两个方面去分析;产品经理做竞品分析从功能、框架、技术、战略等,分析产品背后的部分,比如竞品为什么这么做?是如何做到的?下一步会怎么做……这里作者主要是分析产品层面的竞品分析。



02 竞品分析的意义


竞品分析的意义根据产品发展阶段不同,可归纳为以下四点:


1. 了解产品

通过竞品分析,可以快速了解这个行业、市场、竞争对手的产品以及自己的产品。


2. 决策支持

从产品战略层面来说,可以为企业制定战略、布局规划提供依据;可以通过MVP来测试产品是否符合市场预期,找准产品定位。


3. 预警避险

做竞品分析会让我们时刻关注竞争对手,关注环境的变化,关注政策的变化等,有效的竞品分析可以预警避险。

4. 全局判断

定方向、定目标、定策略,包括竞品分析、用户研究、需求分析、产品规划、产品设计等。


03 竞品分析流程


输出一份完整的竞品分析,需要完成六个核心流程:



明确目标:明确为什么要做、想解决什么问题、竞品分析的目标是什么

选择竞品:选择要分析的竞品、直接竞品、间接竞品、参照品

确定分析维度:根据竞品分析目标,确定要从哪些维度分析竞品

收集竞品信息:从各种渠道收集竞品信息

信息整理与分析:对收集到的竞品信息进行整理与分析

总结报告:得到竞品分析的结论,输出竞品分析报告


明确目标

在第一部分全面认识竞品分析中有提到竞品分析的意义,也是竞品分析的目标所在,概括的可以分为四类:决策支持、学习借鉴、市场预警、机会探索。


根据产品生命周期不同,竞品分析的目标和侧重点不同。所以在竞品分析之前一定要了解当前产品处于什么阶段,需要分析的目标是什么。



选择竞品

竞品的选择,首先要了解竞品的分类:直接竞品、间接竞品、替代品、参照品。然后根据目标针对性的选择产品。


直接竞品

是指产品形式和目标用户群是完全相同的产品。比如生活中最鲜明的例子:可口可乐 VS 百事可乐。

间接竞品

是指产品形式不同,目标用户群类似的产品。比如:可口可乐 VS 元气森林,都是饮品。

替代品

是指产品形式不同、品类不同,目标用户群类似,能满足用户相同需求的产品。比如:公交车 VS 滴滴打车。

参照品

是指有参考价值的产品,可能是跨界的各种产品,开放式的产品类别。



竞品的选择不是数量越多越好,而是要选择合适的,做深度分析,分析出有价值的信息。


确定分析维度

分析维度是指从哪些方面、哪些角度去分析,在这个阶段要确定产品分析的广度和深度。可以从产品视角和用户视角两个不同的视角去确定分析维度。


产品视角:从产品本身的信息量上去选择要分析的维度。以功能、框架、技术、体验、用户……等维度进行分析;


用户视角:从用户最关注的信息上去选择要分析的维度。以$APPEALS(客户需求分析)框架作为分析框架。


$APPEALS方法是IBM在IPD总结和分析出来的客户需求分析的一种方法。它从8个方面对产品进行客户需求定义和产品定位。具体如下:

  1. $-产品价格(Price);

  2. A-可获得性(Availability);

  3. P-包装(Packaging);

  4. P-性能(Performance);

  5. E-易用性(Easy to use);

  6. A-保证程度(Assurances);

  7. L-生命周期成本(Life cycle ofcost);

  8. S-社会接受程度(Social acceptance)。



收集竞品信息

收集竞品信息的渠道总结为三种:官方渠道公开资料、第三方竞品分析平台获取、打入产品自行体验或与用户接触调研出来的等。


在之前公众号文章里曾分享过有关用户分析、产品分析等数据分析平台的汇总表。



信息整理与分析

信息收集完成后,并不是所有信息都是可用的,需要对其进行筛选、分类、剔除、评级等,得到有效信息,针对有效信息进行分析。


这里也是竞品分析重要的一个环节,不同的目标,需要选择不同的分析方法,汇总一下竞品分析的方法有:比较法、矩阵分析法、竞品跟踪矩阵、功能拆解、探索需求、PEST分析、波特五力模型、SWOT分析……(下一部分会具体讲解)


总结报告

所有的分析步骤都完成之后,需要对分析结果进行总结,从中挑选出有价值的信息,形成一份分析报告,报告的格式可根据展示场景输出选择适当的格式。


04 竞品分析方法


比较法

与竞品做横向比较,深入了解竞品,并通过分析得出优势、劣势。


打勾比较法:有无某功能,如果产品功能复杂,要拆解成2级功能等再横向比较
评分比较法:应用于用户体验设计评估和$APPEALS要素评估
描述比较法:通常会用“界面截屏+文字描述”的形式



矩阵分析法

以二维矩阵的方式分析产品与竞品的定位、特色或优势。


竞品跟踪矩阵

跟踪竞品的版本更新,找到竞品各版本的发展规律,以推测竞品下一步的行动计划。竞品跟踪矩阵包括几个要素:时间、版本号、版本变化要点(新增、优化、删除)以及外部环境变化。


功能拆解

把竞品分解成1级功能、2级功能、3级功能,甚至4级功能,以便更全面地了解竞品的构成,避免遗漏。



探索需求

挖掘竞品功能所满足的深层次的需求,以便找到更好的解决方案,提升产品的竞争力。


PEST分析

PEST分析法是对宏观环境进行分析,以便找到机会,认清威胁与挑战。


所谓PEST ,P是政治(Politics),E是经济(Economy),S是社会(Society),T是技术(Technology)。



波特五力模型

对行业环境进行分析,评估某一行业的吸引力、利润率。


SWOT分析

PEST分析和波特五力模型可归纳出SWOT分析中的机会和威胁,通过SWOT分析找出产品的优势、劣势、机会、威胁,以便制定竞争策略。



加减乘除

产品越发展难免会进入同质化的竞争,与其更好,不如寻找更好的机会点。在竞品的基础上做“加减乘除”,以便进行差异化创新。


05 竞品分析工具


借助精益画布、竞品画布、战略画布这三个工具可以提升竞品分析的效率。


精益画布

精益画布是关于产品商业模式分析的一种很实用的工具,可以用来做产品商业模式规划和分析。精益画布可以帮助产品更全面的思考、决策,从系统、商业的角度来规划产品、分析产品,建立产品的全局观。



精益画布在日常工作中的使用场景包含:编写PRD、项目立项、商业计划书……


知己   用精益画布--规划自己的产品

知彼   用竞品画布--规划竞争对手的产品


竞品画布

竞品画布是前面提到的竞品分析的一种方式,是把竞品分析的六个步骤固化到一张表上,作为一个规范性的模板,引导大家更规范的做竞品分析。


竞品画布相当于竞品分析报告的MVP(最小可用产品),用来低成本快速验证分析的思路是正确的,避免返工。



很多人在刚接触一个新产品时,很容易盲目的去分析,找不到方向,此时借助竞品画布这个标准化的模板,一步步的去分析产品,可以很快地了解一个产品。


战略画布

战略画布是做产品差异化竞争的有效工具,是通过价值曲线的方式,在某一时间段内寻找到有用户价值的战略方向。


价值曲线

价值曲线是以图形的方式描绘出一个产品在各个竞争元素上表现得相对强弱程度,由此可以看出一个产品的战略轮廓。


横坐标显示产品的竞争元素、价值点(用户在意点)等,通过用户的评价就可以了解到对于用户来说他们最在意的是什么,他们使用产品的原因是产品给他们带来了什么,这就是要寻找的竞争元素的来源。


纵坐标显示相对水平。



通过价值曲线的方式,可以清晰的看到产品与竞品间的差异点,战略画布是做产品差异化创新的有效工具。


最后,利用思维导图结构化的方式,整合了竞品分析核心知识点,分享给看到的你:



06 总结


看似这些竞品分析的方法论是在做一些与设计无关的事情,但很多方法论是通用的,可以应用到视觉、交互的竞品分析当中;作为设计师不能给自己设限,要多去学习跨界的知识,了解这些竞品分析的方法论后,以后再接触新项目,便可以借助文中的规范尝试做竞品分析,助力自己快速了解业务、行业等。

蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码ben_lanlan,报下信息,会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

文章来源:站酷   作者:做设计的小仙草

分享此文一切功德,皆悉回向给文章原作者及众读者.

免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

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

B端设计规范指南:导航栏

雪涛

B端导航栏的认识

B 端导航栏,是 B 端项目最重要的模块(没有之一)。一个优秀的 B 端导航栏,可以清晰地连接项目的所有功能、模块,让访问者高效的在模块间穿梭。

通常,在进行具体页面设计的时候,我们第一个设计的模块也是导航。在主流的页面框架中,导航分为两种,顶部导航和侧边导航。

超详细!总监出品的B端设计规范指南(六):导航栏

有很多 B 端产品官网使用的顶部导航,并不能作为管理系统导航,仅仅是一般网站导航。比如阿里云或腾讯云官网上方的导航。

超详细!总监出品的B端设计规范指南(六):导航栏

这类导航主要应用在企业官网中,通过比较密集的信息密度,将提供的产品或服务全部罗列出来。

超详细!总监出品的B端设计规范指南(六):导航栏

而侧边栏虽然可以做不少花哨的样式,但信息密度显然无法和顶部导航栏相提并论。

超详细!总监出品的B端设计规范指南(六):导航栏

顶部导航的特征需要鼠标悬浮展开分类面板,通过收纳大量下级菜单,来提升用户的 “检索” 效率。而用户在这些菜单间跳转切换的频率不会太高。

侧边栏导航的特征则是更直接,包含的菜单数量不会太多,用来提升用户的 “跳转” 效率。满足用户高频的模块跳转切换需求。

侧边栏的设计也包含两种形式,细栏和宽栏。

超详细!总监出品的B端设计规范指南(六):导航栏

细栏主要突出图标,应用在模块数量不多的情况,也为内容区域腾更多控件出来。比如 Teambition、百度云等产品。

宽栏则是比较安全的设计形式,兼容性较好,不管是模块数量多还少都能用。但相应的,它会一定程度上占用控件减少内容区域面积。

在一般项目中,只要用好侧边栏的设计即可。顶部导航在管理界面中的应用多为混合场景,用来切换比侧边栏更高级的分类页面。比如腾讯云内部页面中,切换业务模块使用顶部导航的展开面板,业务下级模块则在侧边栏。

超详细!总监出品的B端设计规范指南(六):导航栏

B端导航的规划

导航栏设计,必然要满足 “导航” 这个核心目标。组件的样式、交互必须为功能服务,但很多新手只考虑样式。

通常情况下,导航是反映项目功能模块的入口,产品中包含多少模块、子模块,就会有序的布置到导航里面。那么问题来了,项目到底包含了多少模块和子模块?哪些是要放进导航里的?

在之前思维导图应用的分享中,有一个非常重要的产品输出类型,叫 —— 功能结构地图。解释了不同功能层级的结构和从属关系,以及项目中总共包含了哪些页面。

超详细!总监出品的B端设计规范指南(六):导航栏

它是制定导航内容的主要依据,但并不代表里面出现的每一个节点页面都要放进导航中。

设计师展开导航设计前,也需要使用思维导图工具,再把需要展示出来的内容和结构梳理一遍。否则,面对模块数量较多,层级超过两级的导航就必然手忙脚乱。

比如腾讯云直播和短书的侧边栏层级结构:

超详细!总监出品的B端设计规范指南(六):导航栏

这么看起来很清晰对吧?但留给设计的坑是,并不是每个层级,它们都可以点击,都具备跳转功能。我们来看看实际的实现的效果。

超详细!总监出品的B端设计规范指南(六):导航栏

也就是说,在导航栏的导航选项中,并不是所有的选项都是用来跳转的,它们是用来辅助区分内容和用来展开的。

所以,我们要在思维导图阶段,根据实际场景的需要,对每一个导航信息点进行标注,明确它们在后续设计中包含的作用。

超详细!总监出品的B端设计规范指南(六):导航栏

同时,还有一个需要注意的事情,就是是否为导航栏增加响应式适配。即窄屏的情况下,通常是将导航栏缩短,只保留图标的方案。

把这些内容定好,就可以进入我们具体的设计环节了。

导航栏的设计落地

整理好上方的内容层级,到具体设计步骤里,首先要做的,就是制定出一个能满足层级显示和操作的交互结构出来。

再整理一遍,侧边栏的内容包含:

  • 不可点击的分类标题
  • 可以展开的一级分类
  • 可以实现跳转的一级分类
  • 可以点击的二级分类

而可交互的元素,显然是有对应交互状态的,那么对应的交互状态就包括:

  • 鼠标悬浮一级菜单样式
  • 鼠标悬浮二级菜单样式
  • 选中一级分类,一级分类高亮
  • 展开一级并选中二级分类,二级分类高亮

那么,先用原型做个示意,它的状态包含了默认、选中一级、选中二级三种情况:

超详细!总监出品的B端设计规范指南(六):导航栏

在实际设计环节里,最难受的事情就是一级菜单有的用来展开,有的可以选中,怎么区分?而一二级菜单悬浮、选中是否要统一样式?怎么保证一致性?

如果要统一一二级菜单的选中样式,那么设计过程中,就要保证一二级菜单实际占用空间区域是一致的,间距也进行统一,才能合理添加悬浮和选中效果。

超详细!总监出品的B端设计规范指南(六):导航栏

如果不对一二级菜单统一悬浮和显示样式,区分展示,可以不统一菜单的实际区域和高度。但是,这样的导航要设计好更困难一点。如果不统一交互效果,那么就尽量保证其中一级悬浮和选中采取背景填充,另一级仅仅是文字样式变更。

超详细!总监出品的B端设计规范指南(六):导航栏

把要使用哪种方案确定下来,然后再去优化细节,添加对应的图标内容和优化字体、分割线等等。

超详细!总监出品的B端设计规范指南(六):导航栏

我们在上面用的案例,逻辑层级是 3 级,但是有的项目中,包含的可能有 4 级、5 级,那么必然会呈现出更复杂的交互体系。

常见的做法,就是将侧边栏做成两列,一列是顶级菜单,一列是其它次级菜单,类似有赞的这种做法。层级越多带来的挑战也就越大。

超详细!总监出品的B端设计规范指南(六):导航栏

导航的设计,对细节调节并不仅仅是为了好看,而是提供更直观的交互和一致性。仅仅完成样式依旧是不够的,具体使用上还可能会碰到什么问题我们要尽可能多进行思考。

比如:

  • 原设计中展开 1 级分类只能展开一个,开启第二个就会关闭第一个,如果我们改成展开不关闭会又什么区别呢?
  • 点击页面跳转以后,除了选中的二级菜单前面展开的还展开吗?
  • 高度超出一屏高以后怎么显示,如果滚动的话跳转后显示在哪里?

这样的问题,就留给大家自己思考了。

结尾

导航的设计细节是很次要的因素(虽然对整体样式很重要),重点是给出合理的信息展示和交互方法。如果导航不能帮助用户快速、简洁的进行页面的选择和跳转,即使做的再好看也是一个失败的导航。


蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码ben_lanlan,报下信息,会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

文章来源:优设   作者:超人的电话亭

分享此文一切功德,皆悉回向给文章原作者及众读者.

免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

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


Web各大地图开发

前端达人

Web各大地图开发

介绍

想必大家对地图都不陌生,都使用过地图吧,有了地图我们也就不用在把回家的路径牢牢地记住了,只需要在地图上搜索下就能进行导航了,

而且在打车的时候也都使用的是地图,…地图作用范围很广很广这里就不在多介绍了直接进入主题.

目前市面上主流的地图有:

  1. 高德地图

    https://lbs.amap.com/ 开发者平台

  2. 百度地图

    https://lbsyun.baidu.com/ 开发者平台

  3. 腾讯地图

    https://lbs.qq.com/ 开发者平台

  4. 天地图

    https://www.tianditu.gov.cn/ 开发者平台

以上就是我们常用的地图,也是可以免费调用的地图不收费,但是有次数限制都够用,基本所有的地图开发都要先申请为开发者后才能进行地图的开发

虽然高德很火很厉害,但是我公司让我用天地图开发,所以下面的案例大致演示天地图的开发的流程,其他平台的地图开发流程基本都类似.

只要掌握一个地图的开发那么其他地图开发就是小儿科了…

开发地图需要的准备

  1. 进入天地图页面

  2. 注册账号

  3. 申请成为开发者

    开发者分为: 个人开发者和企业开发者 根据情况自行选择

  4. 然后根据需求创建应用-生成应用key

  5. 入门Dome

    实例代码:

    http://lbs.tianditu.gov.cn/api/js4.0/guide.html 以下代码的内容介绍

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <title>HELLO WORLD</title> <script type="text/javascript" src="http://api.tianditu.gov.cn/api?v=4.0&tk=9e70e9aa0be51fe8ad220e1c4b5d5aa5"></script> <script> var map; var zoom = 12; function onLoad() { map = new T.Map('mapDiv'); map.centerAndZoom(new T.LngLat(116.40769, 39.89945), zoom); //39.897019,116.323003 } </script> </head> <body onLoad="onLoad()"> <div id="mapDiv" style="position:absolute;width:100%; height:900px"></div> </body> </html> 
            
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    地图级别 也就是地图加载后显示的缩放级别

    缩放级别1~2 那么就是洲级别 (亚洲 ,美洲…)

    缩放级别3~4 那么就是国家级别

    缩放级别5~6 那么就是省级别

    缩放级别7~8 那么就是市级别

    缩放级别9~10 那么就是区级别

    缩放级别11~12 那么就是县级别

    …以此类推 最多缩放18级别(街道级别)

    上案例效果图:

各种需求进行开发

页面

http://lbs.tianditu.gov.cn/api/js4.0/examples.html 基本日常所需的实例,稍微改动就能使用了

上面实例无法满足你的要求或者需要添加特殊操作,那么能在下面AOI文档中能找到具体实例代码里的每一个方法使用详细,然后在根据业务需求进行修改就行了

http://lbs.tianditu.gov.cn/api/js4.0/class.html

接口服务

在天地图中提供了几个服务接口用来获取一些数据的地方 ,但是注意有每日调用配额限制的(控制台可以查看次数限制)

http://lbs.tianditu.gov.cn/server/search.html

比如:客户想查询或者快速定位某一个区域或者街道的位置,但是自己通过地图一点一点的找太麻烦了那么就可以通过接口的方式直接获取到想要的数据,

查询: 北京市延庆区延庆镇莲花池村前街50夕阳红养老院的坐标

http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"北京市延庆区延庆镇莲花池村前街50夕阳红养老院"}&tk=9e70e9aa0be51fe8ad220e1c4b5d5aa5

接口返回的数据:

{“msg”:“ok”,“location”:{“score”:40,“level”:“地名地址”,“lon”:116.002677524,“lat”:40.4509903540001,“keyWord”:“北京市延庆区延庆镇莲花池村前街50夕阳红养老院”},“searchVersion”:“6.0.0”,“status”:“0”}

响应接口

参数值 参数说明 参数类型 备注(值域)
status 返回状态 string 0:正常返回,101:结果为空,404:出错。
msg 返回信息 string OK:正常,其他异常。
location 地址信息 json 地址信息

location

参数值 参数说明 参数类型 备注(值域)
lon 坐标点显示经度 Double 必须返回。
lat 坐标点显示纬度 Double 必须返回。
level 类别名称 string 非必须返回。
typeRound 附近相似点 Array 开启周边查询必需返回。

然后在代码里通过

 map.centerAndZoom(new T.LngLat(116.41593, 39.92313), 16); 
  • 1

从新设置下地图显示的位置,以及缩放比例就行了.

标注案例

在很多项目都要求把客户提供的公司…在地图上标注出来并且显示对应的描述,

在天地图提供的实例中是默认鼠标点击显示,然后点击消失,实际中这样太麻烦了我们稍作修改,改变为鼠标悬浮显示,鼠标离开消失

修改后的代码

<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>天地图-地图API-范例-多个点的信息窗口</title> <script type="text/javascript" src="http://api.tianditu.gov.cn/api?v=4.0&tk=9e70e9aa0be51fe8ad220e1c4b5d5aa5"></script> <style type="text/css"> body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";} #mapDiv{height:900px;width:100%;} input,p { margin-top: 10px; margin-left: 5px; font-size: 14px; } </style> <script> var map var zoom = 15; function onLoad() { var data_info = [[116.417854,39.921988,"地址:北京市东城区王府井大街88号乐天银泰百货八层"], [116.406605,39.921585,"地址:北京市东城区东华门大街"], [116.412222,39.912345,"地址:北京市东城区正义路甲5号"] ]; //初始化地图对象 map = new T.Map("mapDiv"); //设置显示地图的中心点和级别 map.centerAndZoom(new T.LngLat(116.41593, 39.92313), zoom); for(var i=0;i<data_info.length;i++){ var marker = new T.Marker(new T.LngLat(data_info[i][0],data_info[i][1])); // 创建标注 var content = data_info[i][2]; map.addOverLay(marker); // 将标注添加到地图中 addClickHandler(content,marker); } function addClickHandler(content,marker){ // 改为鼠标悬浮显示 marker.addEventListener("mouseover",function(e){ openInfo(content,e)} ); //添加鼠标离开后关闭提示框 marker.addEventListener("mouseout",function(e){ map.closeInfoWindow() } ); } function openInfo(content,e){ var point = e.lnglat; marker = new T.Marker(point);// 创建标注 var markerInfoWin = new T.InfoWindow(content,{offset:new T.Point(0,-30)}); // 创建信息窗口对象 map.openInfoWindow(markerInfoWin,point); //开启信息窗口 } } </script> </head> <body onLoad="onLoad()"> <div id="mapDiv"></div> <p>为多个点添加多个点的信息窗口</p> </body> </html> 
  • 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
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

如果客户不知道自己公司…的坐标,我们可以通过-客户给的名称,进行自动搜索地理位置然后进行标注实现

<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <meta name="keywords" content="天地图"/> <title>天地图-地图API-范例-地理编码</title> <style type="text/css">body,html{width:100%;height:100%;margin:0;font-family:"Microsoft YaHei"}#mapDiv{width:100%;height:400px}input,b,p{margin-left:5px;font-size:14px}</style> <script type="text/javascript" src="http://api.tianditu.gov.cn/api?v=4.0&tk=9e70e9aa0be51fe8ad220e1c4b5d5aa5"></script> <script> var map; var zoom = 3; var geocoder; function onLoad() { //初始化地图对象 map=new T.Map("mapDiv"); //设置显示地图的中心点和级别 map.centerAndZoom(new T.LngLat(116.40969,39.89945),zoom) //创建对象 geocoder = new T.Geocoder(); //根据国家名称自动搜索,对应的坐标,然后插入标注 var list=["美国","中国","阿拉伯联合酋长国"]; for (let string of list) { geocoder.getPoint(string,searchResult); } } function searchResult(result){ console.log("经纬度: "+result.location.lat + ',' + result.location.lon) if(result.getStatus() == 0){ //创建标注对象 var marker = new T.Marker(result.getLocationPoint()); //向地图上添加标注 map.addOverLay(marker); var markerInfoWin = new T.InfoWindow("信息窗口"); marker.addEventListener("click", function () { marker.openInfoWindow(markerInfoWin); });// 将标注添加到地图中 }else{ alert(result.getMsg()); } } </script> </head> <body onLoad="onLoad()"> <div id="mapDiv"></div> <p>本示例演示如何使用地理编码接口获得坐标信息。</p> </body> </html> 
  • 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
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

vue 引入天地图

  • index.html 中引入天地图在线 API
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>vue-tdt-demo</title> <!-- 引入天地图在线 API --> <script src="http://api.tianditu.gov.cn/api?v=4.0&tk=您的密钥" type="text/javascript"></script> </head> <body> <div id="app"></div> <!-- built files will be auto injected --> </body> </html> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • components 文件夹中新建 TdtMap.vue 组件

mounted() 中初始化天地图

<template> <div :id="tdtMapDivID" class="divTdtMap"></div> </template> <script> export default { name: 'TdtMap', data() { return { tdtMapDivID: "tdtMapDivID_"+this._uid, tdtMap: {} } }, created() { }, mounted(){ // 初始化天地图 this.initTdtMap() }, watch: { }, methods: { // 初始化天地图 initTdtMap(){ this.tdtMap = new T.Map(this.tdtMapDivID) this.tdtMap.centerAndZoom(new T.LngLat(116.40769, 39.89945), 12) }, } } </script> <style scoped> .divTdtMap { margin: 0px; padding: 0px; width: 100%; height: 80vh; z-index: 0; } </style> 
  • 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
  • 测试组件,新建 test.vue

导入 组件、注册 组件和 使用 组件

<template> <!-- 使用组件 --> <TdtMap></TdtMap> </template> <script> /* 导入组件 */ import TdtMap from './components/TdtMap' export default { name: 'TdtMap', components: { /* 注册组件 */ TdtMap, }, data() { return { } }, created() { }, mounted(){ }, watch: { }, methods: { }, } </script> <style scoped> </style> 
  • 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

隐藏天地图LOGO

 document.getElementsByClassName("tdt-control-copyright tdt-control")[0].style.display = 'none' 
  • 1











































蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

分享此文一切功德,皆悉回向给文章原作者及众读者.

转自:csdn
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

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


函数作用域和立即执行函数

前端达人

变量作用域

  • JavaScript是函数级作用域编程语言:变量只在其定义时所在的function内部有意义。

全局变量

  • 如果不将变量定义在任何函数的内部,此时这个变量就是全局变量,它在任何函数内都可以被访问和更改。

遮蔽效应

  • 如果函数中也定义了和全局同名的变量,则函数内的变量会将全局的变量“遮蔽”。

注意考虑变量声明提升的情况

  • 这个程序的运行结果是什么呢?

形参也是局部变量

  • 这个程序的运行结果是什么呢?

局部函数

  • 先来认识函数的嵌套:一个函数内部也可以定义一个函数。和局部变量类似,定义在一个函数内部的函数是局部函数。

作用域链

  • 在函数嵌套中,变量会从内到外逐层寻找它的定义。

不加var将定义全局变量

  • 在初次给变量赋值时,如果没有加var,则将定义全局变量。

什么是闭包

  • JavaScript中函数会产生闭包(closure)。闭包是函数本身和该函数声明时所处的环境状态的组合。

  •  函数能够“记忆住”其定义时所处的环境,即使函数不在其定义的环境中被调用,也能访问定义时所处环境的变量。

观察闭包现象

  • 在JavaScript中,每次创建函数时都会创建闭包。
  • 但是,闭包特性往往需要将函数“换一个地方”执行,才能被观察出来。

闭包非常实用

  • 闭包很有用,因为它允许我们将数据与操作该数据的函数关联起来。这与“面向对象编程”有少许相似之处。
  • 闭包的功能:记忆性、模拟私有变量。

闭包用途1 - 记忆性 

  • 当闭包产生时,函数所处环境的状态会始终保持在内存中,不会在外层函数调用后被自动清除。这就是闭包的记忆性。

闭包的记忆性举例

  • 创建体温检测函数checkTemp(n),可以检查体温n是否正常,函数会返回布尔值。
  • 但是,不同的小区有不同的体温检测标准,比如A小区体温合格线是37.1℃,而B小区体温合格线是37.3℃,应该怎么编程呢?

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. function createCheckTemp(standardTemp) {
  11. function checkTemp(n) {
  12. if (n <= standardTemp) {
  13. console.log('你的体温正常');
  14. } else {
  15. console.log('你的体温偏高');
  16. }
  17. }
  18. return checkTemp;
  19. }
  20. // 创建一个checkTemp函数,它以37.1度为标准线
  21. var checkTemp_A = createCheckTemp(37.1);
  22. // 再创建一个checkTemp函数,它以37.3度为标准线
  23. var checkTemp_B = createCheckTemp(37.3);
  24. checkTemp_A(37.2);
  25. checkTemp_B(37.2);
  26. </script>
  27. </body>
  28. </html>

闭包用途2 - 模拟私有变量

  • 在Java、C++等语言中,有私有属性的概念,但是JavaScript中只能用闭包来模拟。

  • 题目:请定义一个变量a,要求是能保证这个a只能被进行指定操作(如加1、乘2),而不能进行其他操作,应该怎么编程呢?

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 封装一个函数,这个函数的功能就是私有化变量
  11. function fun() {
  12. // 定义一个局部变量a
  13. var a = 0;
  14. return {
  15. getA: function () {
  16. return a;
  17. },
  18. add: function () {
  19. a++;
  20. },
  21. pow: function () {
  22. a *= 2;
  23. }
  24. };
  25. }
  26. var obj = fun();
  27. // 如果想在fun函数外面使用变量a,唯一的方法就是调用getA()方法
  28. console.log(obj.getA());
  29. // 想让变量a进行加1操作
  30. obj.add();
  31. obj.add();
  32. obj.add();
  33. console.log(obj.getA());
  34. obj.pow();
  35. console.log(obj.getA());
  36. </script>
  37. </body>
  38. </html>

使用闭包的注意点

  • 不能滥用闭包,否则会造成网页的性能问题,严重时可能导致内存泄露
  • 所谓内存泄漏是指程序中己动态分配的内存由于某种原因未释放或无法释放。

立即执行函数IIFE

  • IIFE(Immediately Invoked Function Expression,立即调用函数表达式)是一种特殊的JavaScript函数写法,一旦被定义,就立即被调用。

形成IIFE的方法

  • 函数不能直接加圆括号被调用。

  • 函数必须转为“函数表达式”才能被调用。

IIFE的作用1 - 为变量赋值

  • 为变量赋值:当给变量赋值需要一些较为复杂的计算时(如if语句),使用IIFE显得语法更紧凑。

IIFE的作用2-将全局变量变为局部变量

  • IIFE可以在一些场合(如for循环中)将全局变量变为局部变量,语法显得紧凑。








蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

分享此文一切功德,皆悉回向给文章原作者及众读者.

转自:csdn
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

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

Web API介绍及DOM对象(一)

前端达人

目录

一、API 和 Web API

1.API 

2.Web API  

3.API 和 Web API总结 

二、DOM 介绍 

1. DOM树 

三、获取元素方法 

1.getElementById()

2.getElementsByTagName

  2.1element.getElementsByTagName() 

3.HTML5 新增的方法获取

3.1 document.getElementsByClassName('类名')

3.2 document.querySelector('选择器')

3.3 document.querySelectorAll('选择器')

4.获取 body 、html 元素 

四、事件和样式操作 

1.事件概述

2.执行事件的步骤 

2.1 常见的鼠标事件 

3. 操作元素 

3.1 改变元素内容

3.2 修改元素属性

3.3 修改表单元素的属性

3.4 修改样式属性


一、API 和 Web API

1.API 

 API( Application Programming Interface,应用程序编程接口)
是一些预先定义的函数,目的是提供应用程序
与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
简单理解: API是给程序员提供的一种工具,以便能更轻松的实现想要完成的功能

2.Web API  

Web API是浏览器提供的一套操作浏览器功能和页面元素的API( BOM和DOM)。

比如我们想要浏览器弹出一个警示框,直接使用alert( '弹出');

3.API 和 Web API总结 

1. API是为我们程序员提供的一个接口,帮助我们实现某种功能,我们会使用就可以,不必纠结内部如何实现
2. Web API主要是针对于浏览器提供的接口,主要针对于浏览器做交互效果
3. Web API 一般都有输入和输出(函数的传参和返回值) ,Web API很多都是方法(函数)
4.学习Web API可以结合学习内置对象方法的思路学习

二、DOM 介绍 

文档对象模型( Document Object
Model ,简称DOM) ,是W3C组织推荐的处理可扩展标记语言( HTML或者XML )的标准编程接口
W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容、结构和样式 

1. DOM树 

  •  文档:一个页面就是一个文档,DOM中使用 document表示
  • 元素:页面中的所有标签都是元素,DOM中使用 element表示
  • 节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM中使用 node表示

DOM把以上内容都看作是对象 

三、获取元素方法 

1.getElementById()

 使用 getElementById( ) 方法可以获取带有ID的元素对象


  1. <div id="time" >2019-9-9 </div>
  2. <script>
  3. var timer = document.getElementById('time');
  4. console.dir(timer);
  5. </script>
  6. //返回结果为<div id= "time">2019-9-9</div>这一整个标签

 注意:
1.因为我们文档页面从上往下加载,先得有标签所以我们script 写到标签的下面
2. get 获得element 元素 by 通过驼峰命名法
3.参数 id 是大小写敏感的字符串
4.返回的是一个元素的对象
5. console.dir 打印我们返回的元素对象更好的查看里面的属性和方法

2.getElementsByTagName

 使用getElementsByTagName()方法可以返回带有指定标签名的对象的集合
 document.getElementsByTagName('标签名');


  1. <ul>
  2. <li>1</li>
  3. <li>2</li>
  4. <li>3</li>
  5. <li>4</li>
  6. <li>5</li>
  7. </ul>
  8. <script>
  9. var lis = document.getElementsByTagName('li');
  10. console.log(lis);
  11. </script>

 1. 返回的是 获取过来元素对象的集合  以伪数组的形式存储的

 2. 我们想要依次打印里面的元素对象我们可以采取遍历的方式  
   for(var i = 0; i < lis.length; i++) {
       console.log(lis[i]);
    }

 3. 得到元素对象是动态的,标签里面的内容变了,得到的内容就变了.

  2.1element.getElementsByTagName() 

element.getElementsByTagName()  可以得到这个元素里面的某些标签 


  1. <ul id = "nav">
  2. <li>1</li>
  3. <li>2</li>
  4. <li>3</li>
  5. <li>4</li>
  6. <li>5</li>
  7. </ul>
  8. <script>
  9. var nav = document.getElementById('nav');
  10. var navLis = nav.getElementsByTagName('li');
  11. </script>

3.HTML5 新增的方法获取

3.1 document.getElementsByClassName('类名')

根据类名返回元素对象集合  


  1. <div class="box" >123</div>
  2. <script>
  3. var boxs = document.getElementsByClassName('box');
  4. </script>

3.2 document.querySelector('选择器')

 根据指定选择器返回第一个元素对象
 注意:里面的选择器需要加符号 类选择器:.box   id选择器: #box


  1. var firstBox = document.querySelector('.box');
  2. var nav = document.querySelector('#nav');
  3. var firstBox = document.querySelector('li');

3.3 document.querySelectorAll('选择器')

返回指定选择器的所有元素对象集合 


  1. var allBox = document.querySelectorAll('.box');
  2. //返回所有 class 名为 box 的标签

4.获取 body 、html 元素 


  1. var body = document.body ;
  2. // 返回 body 元素对象
  3. var htmlEle = document.documentElement;
  4. // 返回 html 元素对象

四、事件和样式操作 

1.事件概述

JavaScript 使我们有能力创建动态页面,而事件是可以被JavaScript侦测到的行为

简单理解:触发---响应机制

网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,我们可以在用户点击某按钮时产生一个事件,然后去执行某些操作
 

 事件是有三部分组成   事件源  事件类型  事件处理程序  

  1. 事件源  事件被触发的对象     比如按钮
  2. 事件类型   如何触发   比如鼠标点击触发
  3. 事件处理程序  通过一个函数赋值的方式  完成

2.执行事件的步骤 

1. 获取事件源

2. 注册事件(绑定事件)

3. 添加事件处理程序(采用函数赋值形式)
 

2.1 常见的鼠标事件 

鼠标事件 触发条件
onclick 鼠标点击左键触发
onmouseover 鼠标经过触发
onmouseout 鼠标离开触发
onfocus 获取鼠标焦点触发
onblur 失去鼠标焦点触发
onmousemove 鼠标移动触发
onmouseup 鼠标弹起触发
onmousedown 鼠标按下触发

3. 操作元素 

JS的 DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内容、属性等。注意一下都是属性 

3.1 改变元素内容

① element.innerText 

可用于获取标签中的内容。此时获取的是从起始位置到终止位置的内容,但它去除 html 标签, 同时空格和换行也会去掉

获取到 p 标签再打印 p 标签中的内容
var p = document.querySelector('p');
console.log(p.innerText);

② element.innerHTML

获取内容时,获取的是起始位置到终止位置的全部内容,包括 html 标签, 同时保留空格和换行

获取到 p 标签再打印 p 标签中的内容
var p = document.querySelector('p');
console.log(p.innerHTML);

普通标签使用,表单不能用

3.2 修改元素属性

  src 、href、id 、 alt 、title

案例:点击不同按钮显示不同图片


  1. <title>Document</title>
  2. <style>
  3. img {
  4. width: 300px;
  5. margin-top: 20px;
  6. }
  7. </style>
  8. </head>
  9. <body>
  10. <button id="but1">按钮1</button>
  11. <button id="but2">按钮2</button>
  12. <br>
  13. <img src="../images/objpic07.jpg" alt="" title="图片1">
  14. <script>
  15. var item1 = document.getElementById('but1');
  16. var item2 = document.getElementById('but2');
  17. var img = document.querySelector('img');
  18. item1.onclick = function() {
  19. img.src = '../images/objpic07.jpg';
  20. img.title = '图片1';
  21. }
  22. item2.onclick = function() {
  23. img.src = '../images/objpic08.jpg';
  24. img.title = '图片2';
  25. }
  26. </script>
  27. </body>

3.3 修改表单元素的属性

可操作的表单元素的属性: type 、value、 checked、 selected、 disabled

按下按钮修改表单框 里面的内容,通过修改 value
input.value 等于 this.value  因为 this指向的是事件函数的调用者   

案例:仿京东显示隐藏密码

 


  1. <title>Document</title>
  2. <style>
  3. .box {
  4. position: relative;
  5. width: 400px;
  6. border-bottom: 1px solid #ccc;
  7. margin: 100px auto;
  8. }
  9. .box input {
  10. width: 370px;
  11. height: 30px;
  12. border: 0;
  13. outline: none;
  14. }
  15. .box img {
  16. position: absolute;
  17. top: 2px;
  18. right: 2px;
  19. width: 24px;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <div class="box">
  25. <label for="">
  26. <img src="../images/close.png" alt="" id="pic">
  27. </label>
  28. <input type="password" id="item">
  29. </div>
  30. <script>
  31. var item = document.getElementById('item');
  32. var pic = document.getElementById('pic');
  33. var flag = 0;
  34. pic.onclick = function() {
  35. if(flag == 0) {
  36. item.type = 'text';
  37. this.src = '../images/open.png';
  38. flag = 1;
  39. } else {
  40. item.type = 'password';
  41. this.src = '../images/close.png';
  42. flag = 0;
  43. }
  44. }
  45. </script>
  46. </body>

3.4 修改样式属性

① element.style 行内样式操作

② element.className 类名样式操作

行内样式案例:显示与隐藏文本操作(当Input获取焦点,文本框初始内容消失,失去焦点,内容出现) 


  1. <title>Document</title>
  2. <style>
  3. input {
  4. color: #999;
  5. outline: none;
  6. height: 24px;
  7. }
  8. </style>
  9. </head>
  10. <body>
  11. <input type="text" value="手机">
  12. <script>
  13. var item = document.querySelector('input');
  14. item.onfocus = function() {
  15. if(this.value == '手机') {
  16. this.value = '';
  17. }
  18. this.style.color = '#333';
  19. this.style.border = '1px solid pink';
  20. }
  21. item.onblur = function() {
  22. if(this.value == '') {
  23. this.value = '手机';
  24. }
  25. this.style.color = '#999';
  26. this.style.border = '1px solid black';
  27. }
  28. </script>
  29. </body>

 类名样式案例:密码框验证信息(提示输入6~16位密码,不满或超出提示错误,正确则提示正确)


  1. <title>Document</title>
  2. <style>
  3. .box {
  4. width: 400px;
  5. margin: 100px auto;
  6. }
  7. input {
  8. outline: none;
  9. }
  10. .pic {
  11. height: 15px;
  12. display: inline-block;
  13. line-height: 15px;
  14. text-indent: 18px;
  15. font-size: 13px;
  16. color:blue;
  17. background: url(../images/mess.png) no-repeat;
  18. }
  19. .wrong {
  20. background: url(../images/wrong.png) no-repeat;
  21. color: red;
  22. }
  23. .right {
  24. background: url(../images/right.png) no-repeat;
  25. color: green;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div class="box">
  31. <input type="password" class="ipt">
  32. <p class="pic">请输入6~16位的密码</p>
  33. </div>
  34. <script>
  35. var item = document.querySelector('.ipt');
  36. var item2 = document.querySelector('.pic');
  37. item.onblur = function() {
  38. if(this.value.length < 6 || this.value.length > 16) {
  39. item2.className = 'pic wrong';
  40. item2.innerHTML = '您输入的位数不对要求6~16位';
  41. } else {
  42. item2.className = 'pic right';
  43. item2.innerHTML = '您输入的正确!';
  44. }
  45. }
  46. </script>
  47. </body>





蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

分享此文一切功德,皆悉回向给文章原作者及众读者.

转自:csdn
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

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

写大事件项目的get,post类型的接口

前端达人

1.准备工作:npm下载相关包

1.1初始化npm得到package.json文件 (不初始化也可以之前初始化的文件获得package.json文件)

npm init --yes

1.2 express包   

npm i express 

1.3 multer 包

npm i multer

2.创建server文件:在同级文件夹下创建server文件(文件名可以自定义)

3.登录接口部分

 3.1 登录接口代码


  1. const express = require('express')
  2. //将这个express的方法赋值给app
  3. const app = express()
  4. //引入multer这个包
  5. const multer = require('multer')
  6. //上传的文件会保存在这个目录下
  7. const upload = multer({ dest: 'uploads/' })
  8. //使用中间件
  9. app.use(express.urlencoded());
  10. app.use(express.json());
  11. //登录接口
  12. app.post('/api/login', (req, res) => {
  13. if (req.body.username && req.body.password) {
  14. res.json({
  15. "status": 0,
  16. "message": "登录成功",
  17. })
  18. // res.send(req.body)
  19. console.log('req.body', req.body)
  20. } else {
  21. res.json({
  22. "status": 1,
  23. "message": "登录失败",
  24. })
  25. // res.send(req.body)
  26. console.log('req.body', req.body)
  27. }
  28. // res.send()
  29. })
  30. app.listen(8023, () => {
  31. console.log('8023端口运行成功,已经跑起来了...');
  32. })

3.2 终端运行代码

 3.3 在Postman中测试发送请求,填写必要参数返回结果:

3.4  在Postman中测试发送请求,不填写必要参数返回结果:

4. 获取接口部分:

4.1  获取接口代码


  1. //引入express框架
  2. const express = require('express')
  3. //将这个express的方法赋值给app
  4. const app = express()
  5. //引入multer这个包
  6. const multer = require('multer')
  7. //上传的文件会保存在这个目录下
  8. const upload = multer({ dest: 'uploads/' })
  9. //使用中间件
  10. app.use(express.urlencoded());
  11. app.use(express.json());
  12. //获取接口
  13. app.get('/my/user/userinfo', (req, res) => {
  14. if (req.body.Authorization) {
  15. res.json({
  16. "status": 0,
  17. "message": "获取成功",
  18. "data": {
  19. "id": 1,
  20. "username": "leopard",
  21. "nickname": "little-leopard",
  22. "email": "laotang@qq.com",
  23. "user_pic": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAe"
  24. }
  25. })
  26. console.log('req.body', req.body)
  27. } else {
  28. res.json({
  29. "status": 1,
  30. "message": "获取失败",
  31. })
  32. console.log('req.body', req.body)
  33. }
  34. })
  35. app.listen(8023, () => {
  36. console.log('8023端口运行成功,已经跑起来了...');
  37. })

4.2 在终端运行

4.3 在Postman中测试发送请求,填写必要参数返回结果:

 

4.4 在Postman中测试发送请求,不填写必要参数返回结果:

5.post接口上传图片

 5.1 上传图片代码


  1. //引入express框架
  2. const express = require('express')
  3. //将这个express的方法赋值给app
  4. const app = express()
  5. //引入multer这个包
  6. const multer = require('multer')
  7. //上传的文件会保存在这个目录下
  8. const upload = multer({ dest: 'uploads/' })
  9. //使用中间件
  10. app.use(express.urlencoded());
  11. app.use(express.json());
  12. app.post('/my/user/avatar', upload.single('avatar'), (req, res) => {
  13. console.log(req.file);
  14. if (req.file) {
  15. res.json({
  16. "status": 0,
  17. "message": "上传图片成功"
  18. })
  19. console.log('req.body', req.body)
  20. } else {
  21. res.json({
  22. "status": 1,
  23. "message": "上传图片失败"
  24. })
  25. console.log('req.body', req.body)
  26. }
  27. })
  28. app.listen(8023, () => {
  29. console.log('8023端口运行成功,已经跑起来了...');
  30. })

5.2 Postman上传图片测试

 5.3终端查看



蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

分享此文一切功德,皆悉回向给文章原作者及众读者.

转自:csdn
作者:
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

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


前端保证一比一按源文件做,结果又是惨不忍睹

seo达人


图片

但真的是相差很远诶!

我再仔细问了一下,终于知道原因了……

他确实是按照方案做的,但是所采用的,都是宽度和高度,而不是间距。

我说:

『 界面布局的关键不是宽高,而是间距 』

看他相当地不以为然,于是我只好这样从头开始解释:

 

前端原理

对于前端来说,界面是一个盒子一个盒子套起来的,而不是像画图工具那样一个图层一个图层叠加起来的。

如果把界面看作一个大盒子,那么里面的模块就是小盒子。小盒子里面会装有文字、图片或者更小的盒子

由于现在很多网站都是响应式的,所以这些盒子一般没有固定的宽度,而是根据固定的边距,来自由伸缩。

图片

Sketch 和 Figma 等 UI 绘图工具,都提供了固定边距的自动布局功能,用的就是这个原理。

图片

上图截自:Sketch

 

但是因为这些绘图工具的画板里用的是图层结构,所以只能固定元素相对于画板的边距,而不能固定元素相对于模块的边距,除非使用组件。

 

尺寸是变化的

前面提到了一个很关键的点,那就是「盒子」,或者说框架宽度不固定(响应式页面)。

既然宽度,那么框架的高度也同样是不固定的

因为页面包含大量固定字数的文字或者固定比例的图片,在宽度不固定的情况下,高度自然也没法固定了。

图片

那么既然页面内的元素无法固定高宽,那么什么才是固定的呢?

答案是:

 

间距是固定的

你可以想象一下栅格伸缩的情景,原理一样,只是真实页面上栅格替换成了各不相同的边距。

也就是说,设计师最好是一开始和前端交付时,就明确设计稿上各元素之间的边距,而不是高宽:

图片

这一点,不但一些设计师不清楚,很多前端也不清楚。只是设计师不清楚是因为不知道前端原理;而前端不清楚,是因为他们不在意相应布局的视觉效果。

不过,虽然框架不固定高宽,但是按钮、图标、LOGO 等小元素,通常还是固定高宽的

图片

 

文字对尺寸的影响

一些设计师向前端提供文字参数时,只提供字体和字号,结果出来的效果还是相差很远。

图片

通常来说,最容易产生问题的参数就是「行高」了,因为浏览器的默认行高是 100%,而很多系统平台都有自己的默认行高。

所以说,行高一定要明确才能确保效果,而且最好是提供百分比而不是数字,这样就能够跟随字体尺寸按比例变化了。

图片

除此之外,还有「段落间距」和「字间距」可以注意一下,不过使用率较低就不多说了。

图片图片

 

尺寸标注

我知道现在有很多工具可以查看设计稿的尺寸,但是如果前端是新手,也会 get 不到你的设计规范。

标注的时候,就可以只挑关键参数,即:字体、字号、行高、边距、色彩。

其实,如果你知道哪些是关键的,需要标注的东西也没有特别多,比以后东拉西扯地沟通细节高效多了。

图片

很多设计师看了上图的标注,也许会惊呼“没必要”吧!

这说明你的前端同事很优秀,不需要解释太多。

可即便前端同事再优秀,按钮是否要自动灵活伸缩?按照文字内容还是按照界面宽度伸缩?这些东西,也还是要他们自己来“猜”。

像我这样对自适应方案想得比较多的,就更加倾向于标注清楚些。

 

总结

如果你有一名优秀而细心的前端同事,那么以上都不是问题,可能你根本不需要知道也能好好合作。

但是设计师的工作生涯中难免遇上几个难对付的前端,多点沟通技巧,也可以让自己心情愉快些。

 

原文地址:体验进阶(公众号)

作者:设计师ZoeYZ

转载请注明:学UI网》前端保证一比一按源文件做,结果又是惨不忍睹

蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

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



单色配色也能玩出这么多花样?

seo达人



01 单色配色的定义

大多数的设计项目都倾向于使用多色调进行搭配,获得丰富的视觉层次,但有些时候画面只使用少量颜色也可以做出优秀的设计。

单色并不是指只有一种颜色,而是只有一种色相。单色配色是只使用一种色相进行色彩搭配的方法。单色搭配虽然没有形成颜色的对比,但色相中却有着无数的色调变化,利用同一色相中纯度、明度的层次变化,也可以形成良好的视觉效果。

图片

图片

单色配色其实并不意味着单调,单色配色在很多设计项目中,都呈现出了极具表现力的一面,优秀的单色配色并不一定弱于多色配色。

图片

在单色配色中,经常会使用一些无彩色(黑白灰)用于文本、背景和装饰元素来丰富画面层次。

图片

使用紫色细微的渐变对比,画面形成丰富了的明暗层次,紫色的明度较低,可以很好的承载白色文字信息

图片

使用黑色作为背景,可以很好的衬托出绿色主体,给人一种深邃、神秘的视觉感受。

 

02 单色配色的优点

对于新手设计师来说,颜色越少画面越容易把控,色彩层级越精简,就越容易达到整体色彩平衡。单色搭配可以产生低对比度的和谐美感,视觉上形成协调统一的感觉。

图片

不需要使用过多的颜色,通过蓝色明度的层次变化,画面也可以很丰富,能很好传达出智慧、科技的主题。

图片

以企业形象色为主色调进行设计,使设计的画面具有统一的色彩,还可以向人们传达出强烈的品牌效应。

单色配色简约大气、色调干净统一且稳定,容易营造出和谐与平衡的感觉,是较容易掌握的配色方法。

图片

 

03 单色配色的方法

①使用HSB模式建立配色方案

HSB色彩模式是将颜色三属性进行量化,色相H以角度(0°-360°)表示,饱和度S和亮度B以(0%-100%)表示。

图片

在确定基础色相(H)之后,可以通过调整饱和度(S)和亮度(B),来创造一套富有层次的配色方案。

此案例以“H:255”为基础色建立配色方案。

图片

图片

使用此方法可以得到同一色相中大量的色彩样本,但这并不意味着你需要在单色配色中使用很多颜色,一般选择3、4种足以。

接下来需要考虑色彩的明暗和饱和度,调整这些属性,让配色更贴合你的设计目标。

图片

由于单色配色色彩的对比度没有多色配色那么明显,同一配色方案内不同的颜色之间,需要形成明暗变化,构成一个阶梯型的色阶。

图片

 

②使用配色工具辅助配色

目前有大量的配色网站可以用来辅助配色,对于配色基础薄弱的新人会有很大的帮助。在这里给大家推荐的是Adobe公司出品的一款极为高效的在线配色工具:Adobe Color

在Adobe Color中,使用色盘设置了基础颜色之后,另外四个关联颜色会自动生成。

图片

在调色规则中选择“单色”。使用橙色为基础颜色,会自动生成四个关联颜色,筛选适合的颜色配置到画面中,就能很快完成配色方案:

图片

再看一个案例,根据主体最显眼的紫蓝色为基色,按照生成的配色方案,筛选适合的颜色配置到画面中,这样的配色会非常协调统一。

图片

 

04 总结

单色配色是较容易掌握的配色方法。单色搭配虽然没有形成颜色的对比,但利用同一色相中饱和度、明度的层次变化,也可以形成良好的视觉效果。

单色搭配可以产生低对比度的和谐美感,视觉上形成协调统一的感觉。在单色配色中,经常会使用一些无彩色(黑白灰)用于文本、背景和装饰元素来丰富画面层次。

 

原文地址:艺海拾贝Design(公众号)

作者:邓海贝

转载请注明:学UI网》单色配色也能玩出这么多花样?

蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

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




日历

链接

blogger

蓝蓝 http://www.lanlanwork.com

存档