首页

Vue中如何监控某个属性值的变化

seo达人

Vue中如何监控某个属性值的变化?

比如现在需要监控data中,obj.a 的变化。Vue中监控对象属性的变化你可以这样:



watch: {

      obj: {

      handler (newValue, oldValue) {

        console.log('obj changed')

      },

      deep: true

    }

  }



deep属性表示深层遍历,但是这么写会监控obj的所有属性变化,并不是我们想要的效果,所以做点修改:



watch: {

   'obj.a': {

      handler (newName, oldName) {

        console.log('obj.a changed')

      }

   }

  }



还有一种方法,可以通过computed 来实现,只需要:



computed: {

    a1 () {

      return this.obj.a

    }

}



利用计算属性的特性来实现,当依赖改变时,便会重新计算一个新值。


HTML基础知识

前端达人

HTML基础知识

  1. HTML的历史:HTML,XHTML
  2. HTML的全局属性:全局标准属性,全局事件属性
  3. HTML的元素:

  4. a.png

  5. 点击查看原图

  1. 标记语言,是一种将文本以及与文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。
  2. HTML,为超文本标记语言。
  3. XHTML是可扩展超文本标记语言,是一种更纯洁,更严格,更规范的html代码。
  4. html文件由文件头和文件体两部分组成。
  5. 标签的分类:双标签,单标签。

HTML的全局标准属性
在HTML中,规定了8个全局标准属性。

class用于定义元素的类名。
id用于指定元素的唯一id。
style用于指定元素的行内样式。
title用于指定元素的额外信息。
accesskey用于指定激活某个元素的快捷键。
支持accesskey属性的元素有<a>, <area>, <button>, <input>, <label>, <legend>, <textarea>。

tabindex用于指定元素在tab键下的次序。
支持tabindex属性的元素有<a>,<area>,<button>,<input>,<object>,<select>,<textarea>

dir用于指定元素中内容的文本方向。
dir的属性值只有ltr和rtl两种,分别是left to right和right to left。

lang用于指定元素内容的语言。
HTML的全局事件属性
Window窗口事件
onload,在页面加载结束后触发。
onunload,在用户从页面离开时触发,如单击跳转,页面重载,关闭浏览器窗口等。
Form表单事件
onblur,当元素失去焦点时触发。
onchange,在元素的元素值被改变时触发。
onfocus,在元素获得焦点时触发。
onreset,当表单中的重载按钮被点击时触发。
onselect,在元素中文本被选中后触发。
onsubmit,在提交表单时触发。
Keyboard键盘事件
onkeydown,在用户按下按键时触发。
onkeypress,在用户按下按键后,按着按键时触发。
该属性不会对所有按键生效,不生效按键如:alt,ctrl,shift,esc。

onkeyup,当用户释放按键时触发。
Mouse鼠标事件
onclick,当在元素上单击鼠标时触发。
onblclick,当在元素上双击鼠标时触发。
onmousedown,当在元素上按下鼠标按钮时触发。
onmousemove,当鼠标指针移动到元素上时触发。
onmouseout,当鼠标指针移出元素时触发。
onmouseover,当鼠标指针移动到元素上时触发。
onmouseup,当在元素上释放鼠标按钮时触发。
Media媒体事件
onabort,当退出媒体播放器时触发。
onwaiting,当媒体已停止播放但打算继续播放时触发。
HTML元素

点击查看原图



  1. <!DOCTYPE>,声明文档类型。
  2. <html>,HTML元素真正的根元素。
  3. <head>,定义html文档的文档头。


head中包含的元素

title,定义HTML文档的标题
base,为页面上的所有链接规定默认地址或者默认目标
link,用于定义文档与外部资源之间的关系
meta,提供关于HTML的元数据
style,用于为HTML文档定义样式信息
script,用于定义客户端脚本



  1. body,定义html文档的文档体。
  2. content-Type,用于设定网页的字符集,便于浏览器解析与渲染页面。

cache-control,用于告诉浏览器如何缓存某个响应及缓存多长时间。

参数:



no-cache,发送请求,与服务器确认该资源是否被更改,如果没有,则使用缓存



no-store,允许缓存,每次都要去服务器上下载完整的响应



public,缓存所有响应



private,只为单个用户缓存



max-age,表示当前请求开始,相应响应在多久内能被缓存和重用,不去服务器重新请求,max-age=60表示响应可以再缓存和重用60秒



<meta http-equiv=cache-control" content="no-cache">

1

expires,用于设定网页的到期时间,过期后重新到服务器上重新传输。

refresh,网页将在设定的时间内,自动刷新并转向设定的网址

Set-Cookie,用于设置网页过期。

无语义元素:<span>,<div>,<span>是内联标签,用在一行文本中,<div>是块级标签。



div用于存放需要显示的数据,css用于指定如何显示数据样式,做到结构与样式相互分离。



查看div+css样式HTML:点击下方链接跳转,可查看源码:



div-css.html



格式化元素

普通文本

<b>,定义粗体文本

<big>,定义大号字

<em>,定义着重文字

<i>,定义斜体字

<small>,定义小号字

<strong>,定义加重语气

<sub>,定义下标字

<sup>,定义上标字

<ins>,定义插入字

<del>,定义删除字

计算机输出

<code>,定义计算机代码

<kbd>,定义键盘输出样式

<samp>,定义计算机代码样本

<tt>,定义打字机输入样式

<pre>,定义预格式文本

术语

<abbr>,定义缩写

<acronym>,定义首字母缩写

<address>,定义地址

<bdo>,定义文字方向

<blockquote>定义长的引用

<q>,定义短的引用语

<cite>,定义引用,引证

<dfn>,定义一个概念,项目





图像热区链接

图像热区链接,是什么呢?当你在看一些购物网页的时候,一张图片上,可以在不同的地方链接到不同的目标位置,点击不同的地方可以跳转到不同的网页,这也是做商城项目一般要用到的技术。



这个时候不是<a>标签元素了,而是<area>元素。



<area>元素的属性有两个shape,cords属性。


<area>的坐标系,原点为图片的左上角,x轴正方向向右,y轴正方向向下

我画个图哈,反映<area>的坐标系:

QQ截图20200325235454.png

图像热区链接的使用,<map>标签定义一个image-map,可以含一个以上的热区<area>,每个热区都有独立的链接。

要为<map>标签赋予name属性。

将<img>标签的usemap属性与<map>标签的name属性相关联。

为了证明我学会了,我写一个html页面。

map -> name="image_link"

img -> usemap="#image_link"
1
点击跳转:imgmap.html

e-mail链接
e-mail链接主要是看到有很多官方网页需要做的一个打开一封新的电子邮件。

点击下方链接即可看到效果:

联系我们

代码:

<a href="mailto:xxxxxx@qq.com">联系我们</a>



列表元素
整合列表html网页,点击跳转:ul-ol.html

无序列表,<ul>定义无序列表,<li>定义列表项。
<ul>的type属性值:disc点,square方块,circle圆,none无.

有序列表,<ol>定义有序列表,<li>定义列表项。
<ol>的type属性值:数字,大写字母,大写罗马数字,小写字母,小写罗马数字。

start属性定义序号的开始位置。

定义列表<dl>,定义列表内部可以有多个列表项标题,每个列表项标题用<dt>标签定义,列表项标题内部又可以有多个列表项描述,用<dd>标签定义。
表格
整合表格html网页,点击跳转:table.html

<table>定义表格
<caption>定义表格标题
<tr>定义若干行
<td>定义若干单元格
<th>定义表头
表格分头部,主体,底部:<thead>,<tbody>,<tfoot>三个标签。

  1. <td>的两个属性:colspan用于定义单元格跨行,rowspan用于定义单元格跨列
  2. <tbody>,<thead>,<tfoot>标签通常用于对表格内容进行分组。
  3. 表单由<form>标签定义,action属性定义了表单提交的地址,method属性定义表单提交的方式。


<input type="text">

<input type="password">

<input type="radio">

<input type="checkbox">

<input type="submit">

<input type="reset">

<input type="button">

<input type="image">

<input type="file">

<input type="hidden"> 




<textarea>元素

<textarea>标签具有name,cols,rows3个属性。

  1. name用于提交参数
  2. value用于输入文本内容
  3. colsrows分别用于文本框的列数和行数,宽度和高度。

效果:

自我评价:


代码:

<form action="web" method="post">
 自我评价:<br/>
 <textarea rows="10" cols="50" name="introduce">
 </textarea>
 <br/>
 <input type="submit" id="" name="">
</form>



frameset

  1. <frameset>定义一个框架集,用于组织多个窗口,每个框架存有独立的html文档
  2. <frameset>不能与<body>共同使用,除非有<noframe>元素
  3. <frame>用于定义<frameset>中一个特定的窗口。空元素<frame/>

:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>frameset</title>
    </head>
    <frameset cols="25%,50%,25%">
        <frame src="https://blog.csdn.net/qq_36232611" scrolling="no" noresize="noresize"></frame>
        <frame src="https://juejin.im/user/5e477d7ce51d4526c550a27d" ></frame>
        <frame src="https://www.jianshu.com/u/c785ece603d1" ></frame>
    </frameset>
    <noframes>
        <body>您的浏览器无法处理框架,请更换浏览器打开</body>
    </noframes>
</html>
1




显示结果 描述 实体名称 实体编号
空格 &nbsp; &#160;
< 小于号 &lt; &#60;
> 大于号 &gt; &#62;
& 和号 &amp; &#38;
" 引号 &quot; &#34;
' 撇号 &apos; (IE不支持) &#39;
分(cent) &cent; &#162;
£ 镑(pound) &pound; &#163;
¥ 元(yen) &yen; &#165;
欧元(euro) &euro; &#8364;
§ 小节 &sect; &#167;
© 版权(copyright) &copy; &#169;
® 注册商标 &reg; &#174;
商标 &trade; &#8482;
× 乘号 &times; &#215;
÷ 除号 &divide; &#247;
————————————————
版权声明:本文为CSDN博主「达达前端」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36232611/article/details/105109467




如何从零到一设计产品?

资深UI设计者

手把手教你 「如何 7 步从 0 ~ 1 设计一款产品经理一稿过,设计风格明确,用户粘性高的软件!」

据不完全了解,身边大部分的 UI 同事都从 0 到 1 参与过一款或多款软件的设计,设计过程中不知道你是否有过这样的疑惑:

  • 设计稿都做了 100 版了,但产品经理还是不满意,是我设计不行吗?
  • 产品目标、用户目标都标得清清楚楚了,但总是找不好设计关键词,来来去去只会用「年轻化、轻量化」?
  • 产品目标明确了,设计关键词也有了,但为什么做出来的稿子不是太概念,就是跟竞品太像呢?

在解决这些困惑之后,我总结了一套自用的,适合从 0 ~ 1 进行软件设计或项目改版的方法 ,并在其他项目上进行了二次验证。

以实践项目 —— 有道少儿词典为例,上线一年期间,用户次日留存峰值 36% 以上,也非常幸运,被 App Store Today 推荐 4 次,App Store 编辑推荐 8 次,被 App Store 纳入 2019 本土优秀 App 盘点中,同时被预装到苹果线下直营店,作为样机体验软件之一。所以,这个方法亲测有效!

这篇文章,通过分析如何解决类似「产品经理不满意、设计关键词不对、设计风格无区别」这些问题,整理出 7 个帮你从 0 ~ 1 设计一款软件的步骤。

文章较长,大概需要花费 15 分钟,建议大家先看大纲,优先阅读符合自身情况的部分。

产品经理为什么不满意?

从 0 ~ 1 进行软件设计,免不了要多出几个设计稿,但做了 100 稿,产品经理对页面设计还是不满意的话,很有可能有 2 点原因:

原因 1:目标不明确

一拿到需求就开始做,很容易忽略需求背后的目标,从 0 到 1 做一款新软件更是要了解业务目标和用户目标。

在提出解决办法前,我们需要先捋清楚以下 2 个问题:

为什么要了解目标?

公司开发软件是为了达到某些目标或是实现某个目的的,只有了解目标才能更好地为公司创造价值。

什么是业务需求、业务目标和用户目标?

平时产品经理跟我们说,要设计一个页面,设计 一个流程,这就是一个业务需求,而这个需求的背后,能够解释清楚这个需求是为了什么,要做到什么程度,这就是业务目标(通常包括用什么手段,给用户带来什么价值,达到什么目的)。而软件的目标用户,他们在一个具体的时间、地点、环境下做了什么操作,想达到什么程度,满足自己的什么要求,这可以理解为用户目标。

解决办法 :多使用 「为什么+动词」 的问法,向产品经理了解业务目标、用户目标。

从 0 ~1 做软件需要了解的业务目标和用户目标,我们都可以从产品经理那里得到。

少儿词典的产品经理很早就给出了业务目标和用户目标。但,当我们需要更多细节的时候,可以使用「为什么+动词」这样的问法。例如:

  • 「我们要做一个少儿查词软件,定位是一款拥有权威释义背书,在视、听、触方面打造良好体验,紧扣教材和教学大纲的适合少儿和家长使用的伴学词典。你来做吧!」「为什么做这个?」
  • 「现在儿童教育KOL越来越多,很多家长都很关心k12教育问题。市面上的很多产品都不太适合孩子使用」
  • 「为什么这样的定位可以满足用户需求呢?」「为什么是适合少儿和家长使用呢?」
  • 「为什么……」

在少儿词典项目中

  • 我们的业务目标是:一款拥有权威释义背书,在视、听、触方面打造良好体验,紧扣教材和教学大纲的适合少儿和家长使用的伴学词典。
  • 目标用户群体是:小学 1~6 年级的孩子和他们的家长。
  • 用户目标是:当小学低年级的孩子在家学习的时候,他们的家长需要一款软件,能缓解家长伴学的压力。高年级的孩子需要一款软件,为他们提供准确教学。
原因 2 :没有对产品关键词形成共识

我们既了解产品的业务目标,也知道用户目标的情况下,方案还是被 pass 的话,可能是因为你给出的方案和产品经理想要的不是同一个东西。为什么业务目标在这里不起作用了呢?怎么才能弄清楚产品经理想要的是什么?我们可以用产品关键词来回答这个问题。

为什么业务目标在这里不起作用了呢?

我们常见的业务目标的内容是很长的,用户目标的内容也是很长的,在这种所有已知内容都很长的情况下,如果没有准确理解内容,没有对重点内容达成一致,就很容易产生偏差。例如我要向你描述一位美女,她的头发很柔顺,脸蛋很漂亮,身材比例很好,衣品很好等…… 90% 的可能,我们脑海中想的不是同一个美女。但是,如果我跟你说,这是一个跟芭比娃娃很像的美女的时候,我们脑海中的形象会接近很多。

怎么才能弄清楚产品经理想要的是什么?

就像设计师在进行页面设计时,需要设计关键词一样,产品经理在描述自己的业务目标的时候,也需要能概括业务目标重点,突出卖点的产品关键词,这个产品关键词能帮助设计师弄清楚产品经理想要的东西。

部分产品经理为了方便大家达成共识,会早早亮出产品关键词,如果当你们的产品经理没有办法提供产品关键词的时候,我们要学会在讨论中找到。

解决办法 :从业务目标开始跟产品经理讨论项目信息,直到获得双方达成一致的产品关键词

从业务目标和用户目标开始跟产品经理讨论项目信息,在讨论的过程中,我们可以留意产品多次提到的几个形容词,写下来,然后跟产品反复核对确认,最后双方确认且保留下来的这 3~4 个形容词,就是这个项目的产品关键词。

少儿词典的产品关键词是:权威内容,寓教于乐,适合孩子使用。这些关键词被我贴在屏幕的显眼处,就怕自己哪天忘记了。

设计关键词为什么总是找不对

寻找设计关键词,是设计师非常熟悉的步骤,但常常也在这里翻车,甚至还会出现,不管做什么软件,反反复复就那几个关键词的情况,我们可以把原因归结为:

原因:对用户不够了解

为什么不了解用户会导致关键词找不对?

我们的用户在选择软件、使用软件的时候,了解到的是软件的设计、体验和功能。用户下载软件时,他们已有的认知会影响他们对软件的幻想。就像给小男孩的衣服是天蓝色,小女孩的衣服是嫩粉色一样,如果用户想要一件天蓝色的衣服,而我们给他展示的是深蓝色或是嫩粉色的衣服,这都会让用户产生疑惑甚至离开。因此,如果对用户了解不准确,会导致我们输出错误的设计关键词。

而了解目标用户是又一件复杂的事情。

首先,我们的目标用户可能是一类人,如有道词典,下载软件用户和使用用户大概率是同一个人。目标用户也有可能是两类人或是更多,如少儿词典,下载用户是家长,使用用户是家长和孩子,企业协作软件也类似。

从接触软件,下载软件,使用软件,到判断是否继续使用软件,不同的阶段的目标用户是不一样的,目标用户在不同阶段的需求也是不一样的。

其次,开发软件的周期是很长的,在开发软件的过程中,我们的用户在不断地接收新的知识和观点,用户的喜好,认知可能会发生很大的变化。

因此,为了更好地了解用户,我们需要找到用户跟软件之间的交互关系,以及影响用户喜好的因素。一共有 2 个步骤:

步骤 1. 分析不同用户跟软件之间的接触点,从未来趋势和用户当前认知角度收集用户资料

在这一步骤中,我们加入了 2 个概念,接触点和未来趋势。

什么是接触点?

接触点指的是用户与产品发生交互的关键点,用来捋清楚我们刚刚提到 「用户跟软件之间的交互关系」。以少儿词典为例,家长和软件之间的接触点,可以罗列为:家长听说少儿词典 – 到应用中心下载软件 – 打开软件 – 使用软件……可见要想打造一款用户好评度高的好产品,仅仅优化软件的体验是不够的。

为什么要从未来趋势和用户当前认知角度去收集用户资料?

刚刚有提到新软件的周期是较长的,前期定好的风格、关键词等,到了开发上线后却不适用了,既浪费人力,也浪费资源,因此要考虑未来趋势对用户的影响。同时,用户在选择软件的时候,已有的喜好/预期/经验等用户认知会影响用户对软件的判断。就像大家想到夏天的冷饮时,脑海中会浮现冰块、西瓜等元素,因此雪碧、西瓜等符合用户对夏天认知的食品在天气炎热时会热销,但是受到大部分买家越来越注重卡路里这一未来趋势的影响,低卡的西瓜冷饮也可能在未来一段时间大卖。

接触点和未来趋势、用户认知之间有什么关系?

了解用户接触点之后,我们就可以猜测用户在这一接触点的需求和心理,加入未来趋势和用户认知,能让我们做出来的东西更符合用户预期。

寻找接触点。我们了解到,少儿词典的目标用户群体是 1~6 年级的学生和他们的家长,即 6~12 岁孩子,和 30~44 岁家长。然后,我们粗略地将用户的接触点划分为,筛选软件 – 下载软件 – 使用软件 – 判断是否再次使用软件,孩子、家长跟接触点之间的关系就可以展示为:

孩子是软件查询、练习、核心功能体验者,家长是内容审核者、软件筛选者、伴学时软件使用者。

找到接触点之后,我们还需要把影响用户认知的内容具象化。

例如,我们想了解夏天做什么口味的饮品更好,我们可以从夏日饮品口味销量排行榜,夏日新品类型,夏日广告等角度来获得更清晰的用户认知。应用到少儿词典中就是,家长在筛选软件时,老师的要求,未来孩子考试的内容、日常辅导内容、大 V 推荐的内容等会影响家长对下载软件的判断。每个接触点都可以使用这样的方式,来联想更多影响用户认知的内容。然后我们将得到类似下面的表格:

根据表格,我收集了 近 10 页的用户信息

步骤 2. 提取收集到的信息,并放入四象限中,总结出2~4个视觉关键词、体验关键词

杂乱无序的信息只有经过归纳之后才能被大家使用。

怎么归纳总结杂乱的信息呢?

UI 设计师都清楚,在进行界面设计时,大标题、缩进、分层等排版方式能让我们的页面看起来更清晰易读。处理杂乱的信息也同理,要做的是找到信息的重点,然后把信息归类,最后再用一句对内容进行总结,方便大家理解。应用到我们提取关键词的环节中就是,挑选重要信息、放入四象限中、总结出能归纳这些信息的关键词。

挑选重要信息。以家长筛选软件为例,当我们将热门大 V 推荐的教学方法、内容,进行整理的时候,会发现美学、乐感、编程、外文图书、儿童心理教育、英文教学方法(自然拼读)等内容出现的频率很高,在一堆内容中挑选跟少儿词典相关的内容,如美学、外文图书、儿童心理教育等。

放入四象限中。在这一方法中,我们将四象限划分为设计和用户认知 2 个方向,其中设计划分为视觉风格和体验风格,用户认知划分为当前认知和未来趋势 。以刚刚挑选的儿童美学教育为例,这是一个属于未来家长会越来越关注的少儿视觉发展方向,所以我们放在视觉风格、未来趋势这一象限中。其他内容也类似,不断地提取出现频率高、用户热点高的内容,并根据内容类型放入四象限中

总结出能归纳这些信息的关键词。以视觉和未来趋势象限为例,我们收集到大 V 的美学教育,未来的课本发展趋势,小学建筑风格发展趋势,他们都有一个特点,颜色柔和无攻击,色彩丰富,因此,我们总结出一个视觉关键词是柔和多彩。

其他内容也采用相同的方法进行总结,少儿词典的视觉关键词是柔和多彩,轻质感,亲和陪伴,体验关键词是,探索多变,感官刺激和重复熟悉。

为什么做出来的设计稿不是太概念就是没风格?

视觉关键词出来了,产品的业务目标也出来了,从关键词到页面样式的逻辑也很严谨,但出来的风格却会觉得跟关键词不太搭,或是跟竞品差异不大,在多款 App 实践后,我们发现可能是这样的原因:

没有把关键词的作用发挥出来

引用一句说烂了的名言 「一千个人眼中就有一千个哈姆雷特」。大家在对关键词的理解是有差异的,以「年轻」为例子,一款针对活力的年轻人的衣服和一款针对潮流的年轻人的衣服,设计风格上可能是隔好几条街的。因此,仅仅得到几个视觉关键词和体验关键词还不足以让我们找准方向,我们还需要将关键词组合和具体化。一共有 2 个步骤:

步骤 1. 分别组合产品关键词和视觉关键词,产品关键词和体验关键词,找到同时满足 2 组关键词的规则

为什么将关键词结合能让关键词的作用发挥出来呢?

我们的目的是要做一款满足产品需求,符合用户认知的软件。

从问题 1 和问题 2 中,我们得到了符合产品需求的产品关键词,和符合用户认知的视觉关键词和体验关键词,想要同时满足产品需求和用户认知,我们需要找到他们的重合点。如下图所示,将产品关键词和视觉关键词、体验关键词分别结合,这样的出来的规则就能最大限度地符合我们的要求,既满足产品需求,又符合用户认知。

具体怎么做呢?下面将分别从视觉和体验角度举例子。

视觉角度,以权威内容和柔和多彩结合为例:

「权威内容」 要求我们输出的内容是符合教材,符合老师标准的,内容是准确无误的、来源是可靠的;「柔和多彩」 要求我们在进行页面设计的时候减少大面积颜色的使用,色彩柔和,且颜色多样。

将两者结合,我们得到的规则是:

  • 市面上的语文和英语教材以橙色封面为主,因此软件把橙色作为主色,仅在重点区域使用橙色;
  • 展示内容要准确,在牛津内容布局上参考《牛津小学生》字典,中文字体采用跟教材相似的文鼎新中楷,英文字体采用跟衡水体相似的 Averta Std;
  • 参考大 V 推荐的绘本、动画片常用的颜色,将颜色定为橙色、黄色、蓝色和绿色,降低颜色饱和度;
  • 参考绘本的图案,选择圆形作为主要的形状,加入柔和色彩,使用深色和浅色叠加的圆形;
  • ……

根据这些内容,我们将得到下面的 4 个颜色和圆形叠加的形式。(ps:通过这样的形式确定的是规则,如:以橙色为主结合另外 3 个颜色,圆形,使用深浅色搭配。具体颜色和叠加形式需要在具体页面中进行调整)

体验角度,以权威内容和探索多变为例:

体验上,「权威内容」要求我们的操作形式是跟老师的教学相似,学习方法需要参考成熟且有效的方法;「探索多变」要求我们在交互形式上可以采用多种形式,给孩子探索未知的机会,交互形式要符合儿童操作习惯,如涂抹、翻转、拖拉等

将两者结合,我们得到的规则是:

  • 中文字体跟写,手写涂抹交互形式,添加错误抖动反馈;
  • 单词记忆,参考如师通学习方法,采用卡片翻转形式,将单词和图片内容分离;
  • 英文跟读,采用表情代替评分机制;
  • ……

其他几个关键词的结合也是使用这样的形式,这里就不一一展开。下图是少儿词典的视觉关键词和产品关键词结合后的样式。

步骤 2. 选择复杂的核心页面,把具象化的体验规则、视觉规则融进页面中,确定设计风格

规则梳理出来后,我们就要挑选一些重要页面进行风格尝试,以结构复杂的中文查词单字结果页为例:

分析小学一年级到六年级的考试内容,我们了解到部首、笔顺笔画、跟写、发音等汉字的基础信息是低年级用户(小学三年级及以下)会使用到,他们要求信息完整且准确;像词组、造句这些信息则是针对高年级学生,要求快速准确定位到具体的内容板块。

分析完内容结构后,我们就需要根据内容布局,加入表格中总结的体验规则:

  • 重复熟悉,针对低年级用户的使用习惯,我们将顶部信息划分为展示区域和操作区域,方便用户操作,降低用户学习成本;
  • 重复熟悉,中文查词结果页中,使用田字格上下布局的形式,使用课本同款楷体字,满足学生的识别文字书写规范的需求,也符合用户认知;
  • 探索多变,在 tab 切换的时候,我们将 tab 选中的颜色变成软件的 4 个主色循环切换,激发孩子对软件的探索欲望;
  • 探索多变,按钮形式上采用出血的图案形式,打破常规;
  • ……

最后,梳理好页面的体验形式之后,我们开始给页面添加视觉规则:

  • 在推导中,我们选择多彩的颜色模式,常见的小学课本是以橙色为主,因此,软件也选择橙色作为主色,并加入黄色、绿色和蓝色作为辅助颜色;
  • 图标采用的是孩子熟悉的元素+轻质感这样的组合;
  • 结合绘本和孩子常见元素,使用两个圆形叠加的形式,作为软件的主要元素;
  • 为了让内容更符合孩子阅读和使用习惯,使用大字号和大间距的形式,常用字号是 32px,最小字号是 28px;
  • ……

对比产品原型和市面上的一些竞品,我们可以发现,查词软件在内容布局上相差无几。如果没有找到符合我们产品业务目标,同时符合用户认知的规则,我们将被淹没在一群查词软件中。

步骤 3. 建立一个画板,把用到的颜色、规则、字体、间距等内容罗列出来,并给他们限定使用范围,方便自己查阅和团队合作

最后一步,相信很多设计师都会在设计过程中建立一套方便好用的设计规范库,这里就不展开来说了。

总结

最后,再对上文的所有内容进行概括。从 0 到 1 进行软件设计我们需要用到下面这 7 步:

  1. 多使用「为什么+动词」的问法,向产品经理了解业务目标、用户目标。
  2. 从业务目标开始跟产品经理讨论项目信息,直到获得双方达成一致的产品关键词。
  3. 分析不同用户跟软件之间的接触点,从未来趋势和用户当前认知角度收集用户资料。
  4. 提取收集到的信息,并放入四象限中,总结出2~4个视觉关键词、体验关键词。
  5. 分别组合产品关键词和视觉关键词,产品关键词和体验关键词,找到同时满足 2 组关键词的规则。
  6. 选择复杂的核心页面,把具体化的体验规则、视觉规则融进页面中,确定设计风格。
  7. 建立一个画板,把用到的颜色、规则、字体、间距等内容罗列出来,并给他们限定使用范围,方便自己查阅和团队合作。

完成这 7 步,将可以让你从 0 ~ 1 设计一款产品经理一稿过,设计风格明确,用户粘性高的软件。

实战经验!可视化大屏设计案例全方位复盘!

资深UI设计者

随着大数据产业的蓬勃发展,很多企业都开始应用数据可视化。所以数据可视化设计,绝对是热门的设计之一。很多 UI 设计师突然会接到公司数据可视化设计的需求,如果不了解数据可视化设计,肯定是一头雾水,不知从何入手。本文结合最近设计案例,分享大屏可视化设计过程中遇到的一些问题以及设计思路,供大家一起交流与学习。

>

△ 最终动态效果图

案例分解

首先放的是项目改版前的页面:

1. 需求介绍

某某应用云,分为五大云平台模块:云端综合调度、数据查询通道、数据应用处理、数据存储管理、管理运行维护。每个大模块下⾯有若干个子系统。

可视化⼤屏首页需要展示的内容包括:

  • 全局数据:云平台的数据总量,以及 4 个重要关注数据项,2 个次要关注数据项;
  • 云平台的五⼤大模块:云端综合调度、数据查询通道、数据应用处理理、数据存储管理、管理运行维护(只有两个 tab 切换链接);
  • 搜索功能:搜索类型分为 6 个,默认选中「综合」类型进行搜索;
  • 重点关注数据信息按指标分多维度展示:原始图上的维度包括指标、地图、地域排名、部⻔排名、类别;
  • 云导航:展示场景在公司展厅,材质为 Led 拼接屏,设计尺寸为 1920×1080。

2. 需求分析

分析大屏可视化的一些共性:

  • 屏幕大:大屏一般都是多屏拼接,整体屏幕面积大。
  • 观距远:用户需要远处观看屏幕,要保证数据文字清晰可见。
  • 交互弱:通过电脑已经无法满足大屏交互需求,现在也有部分开始采用 ipad、手机、激光笔等方式。
  • 视觉强:背景色多采用重色,衬托凸显数据,更好地为观者传达数据信息。
  • 一屏一内容:一屏内容,说明一件主要事情,统计好它的相关数据,避免其他的干扰。

结合大屏的一些共性特点针对看到的线上旧版本设计,分析存在的问题。

  • 布局混乱,导致视觉不平衡,看不出页面层次。
  • 蓝色为主色调,黄色点缀颜色显得比较单一没有规则。
  • 图表比较单一,不能有效传达数据信息。

3. 布局

整合数据,分析出主要数据、次要数据、总量数据、细分数据、各数据的维度等等。首先优化页面布局,可以先在纸上画一画,然后脑子里有大概思路以后再用电脑绘制,如下图:

采用栅格化对称布局,让整体视觉左右平衡。

4. 风格

一提到数据可视化大家往往能想到科技、数据、蓝色等一些普遍关键词。

了解到客户是想做一个科技感强、炫酷的视觉效果。可以在网上找一些效果图或是自己曾经做过的案例供客户选择,确定一个大致的风格,然后结合具体的业务场景进行设计。

5. 颜色

颜色上结合产品使用场景,以及整个产品调性还是以蓝色为主,背景选用深色调,让视觉更好聚焦,内容部分采用比较透亮的蓝色系,保证内容与背景有一定的对比关系,便于业务信息传达。

6. 主体地图

地图为大屏的主要展示内容,首先分析展示的目的是为了看清各个城市间的不同分布情况,和城市数据的汇集效果。

如图:

改版前:地图过于单薄,没有立体感,太平缺乏层次,颜色黄色不符合产品调性。

改版后:主色调改为科技蓝,在原有地图上增加外发光和多层阴影叠加,增加地图的立体感,地图上增加科技线条上升的效果代表每个城市数据变化的提升,地图背景采用比较弱化的转动线条圆形,衬托地图主体,使得画面更加丰富。

7. 地图效果的实现方法

首先用 ps 拉框助手新建一个山东的地图(拉框助手的使用获取方法可以参照上篇文章)。

完成后会得到一个叫 map 文件夹的地图分层文件,如图所示。这里需要对每个城市的颜色进行调整,为了区分每个城市之间的数据不同关系。

调整完块之间的颜色后,就需要给地图整体增加立体效果。

首先,是整体给地图加了一个描边和外发光。描边是为了强化地图边缘,外发光是为了地图与背景有一个区分。

其次为了增加地图立体感,需要给地图增加多层阴影叠加的效果。复制现有形状层,拼合成一个山东省的地图,如下图:

最后,把拼合好的图层移动到 map 文件夹下面,阴影可以添加多层,这里针对每一层进行不同颜色大小的调整,就是下面的这种效果了,地图的体积厚度感也就出来了。这里只是提供一个大概的思路,大家可以多去尝试。

整体地图效果调整完成后,就是给地图增加些纹理,和上升线条这些细节上的效果了。纹理可以用图案叠加,或者找一张纹理图剪切蒙版实现,最后再添加上升线条的效果,地图的效果就完成了。

最后加上线条上升的动态效果:

8. 数据图表拆分

在选定数据图表之前,首先要确定图表之间的关系,可以从以下四个维度进行思考分析:

  • 联系:数据之间的相关性;
  • 分布:指标里的数据主要集中在什么范围、表现出怎样的规律;
  • 比较:数据之间存在何种差异、差异主要体现在哪些方面;
  • 构成:指标里的数据都由哪几部分组成、每部分占比如何。

可以参照下面这个图:

△ 图片来自于网络,侵删

当确定好分析维度后,事实上我们所能选用的图表类型也就基本确定了。接下来我们只需要从少数几个图表里筛选出最能体现我们设计意图的那个就好了。

传统的图表比如 echarts 图表在视觉上展示可能不是很美观好看,可根据选择的图表在其基础之上进行美化设计,总之选定图表最重要的两个点就是:易理解、可实现。

易理解:就是要考虑最终用户,可视化结果应该是一看就懂,不需要思考和过度理解,因而选定图表时要理性,避免为了视觉上的效果而选择一些对用户不太友好的图形及元素。

可实现:主要是跟开发前期沟通好实现方式,一般都采用开源组件库的居多,比如 echarts 组件库,我们设计的图形图表,要开发能够实现。实际工作中,一些可视化效果开发用代码写很容易实现,效果也不错,但这些效果设计师用 Ps/Ai/Ae 这些工具模拟时会发现比较困难。同样的,某些效果设计师用设计工具可以轻易实现,但开发要用代码落地却非常困难,所以大屏设计中跟开发常沟通非常重要,我们需要明确哪些地方设计师可以尽情发挥,哪些地方需要谨慎设计。一个项目总有周期与预算限制,不会无限期的修改迭代,所以设计师在这里需要抓住重点,有取舍,不钻牛角尖、死磕不放。

案例中在图表选择上,强化科技感元素,条形图打破传统条形图的展示形式,采用电池晶格的展示形式,在保持图表功能的同时更加凸显科技感。

从页面的整体看,已经有两处用到了条形图、柱状图,如果这里还是条形图,那么页面看起来会很单调,图表也没有表现出多样性,所以现在设计要体现图表的多样性也能够有排名的直观呈现。以下图表采用科技圆盘的形式,运用科技线条的上升状态代表排名的先后顺序,所有图表都采用数据降序来展示排名更加直观。

改版前的图标样式比较单一,改版后针对每组数据不同的对比形式,采用比较贴合的图表进行展示,篇幅原因就不一一做展示了。

附上最终视觉效果图:

总结

大屏设计需要注意的点:

  • 需求分析:对需求进行梳理,分清数据间的主次关系以及对比指标,跟客户沟通清楚细节。
  • 确认布局:布局上根据数据主次关系,采用栅格化布局(可以在纸上画一下理清思路)。
  • 情绪板定义设计关键词,确定风格。找参考图给客户确认大致的设计方向。
  • 颜色贴合业务。
  • 图表易理解可实现。

以上是我对数据可视化大屏的案例总结,希望能帮助到你。除此之外还有很多地方没有涉及到,包括具体设计的操作方式、选取图形元素的具体方法,以及在各种大屏中所需要的相对应的组件等,在庞大的可视化大屏设计系统中,还有很多值得学习参考和优化的知识,欢迎沟通交流,大家一起努力。

文章来源:优设   

如何用好设计中的线条?来看高手的总结!

资深UI设计者

有句话叫:「设计无小事」,很多看似不起眼的东西却起着至关重要的作用,比如这期要说的线条,很多人对于线条的理解有局限性,比如:线条的形态可以是曲线、直线、折线、粗线、细线、实线、虚线等等。其实已经牵扯到了点、线、面的知识,这也是很多科班生在学校必学的知识点,但是这期所说的线与点线面中的线还是有所不同的,点线面中的线可以是线条、可以是文字或者是看不到的视线,而是今天着重说的是设计中很直观的线条。下面我们还是通过实际的案例逐一分析:

线条可以引导视觉

设计类的知识很多都和日常生活息息相关,尝试着把设计类的知识点与日常生活想结合,对于记忆和理解来说会更加得心应手,例如:

图中的闪电可以视作为设计中的线条,给人的视觉感受是通过闪电把天与地连接为一个整体,而闪电在图中的作用就是串联整体,那么回到这里的正题:线条有引导视觉的作用该怎么理解呢?再举一个现实生活中的案例:

我们选择从北京到拉萨开车去,出发之前可能需要在地图上看下路线,知道途径哪些省市,规划好行程路线,这里绿色的虚线就起到了引导视觉的作用。回归设计中道理是一样的,线条可以引导用户把原本杂乱无章的视觉点规整为有次序的视觉元素,例如:

当看到左侧这张海报时我们视觉次序会出现很多变化,比如:1>A>3>B>4>C>2 或者 A>2>C>4>B>3>1 等等 N 多种顺序,这时给人的感觉就是杂乱无章的,毫无视觉次序而言;而看右侧的海报给人的感觉却是条例清晰的,相比而言只是多了两条线,但是却在整个海报中起到了引导视觉的作用,它可以给与用户阅读海报时视觉辅助的作用,让用户以右>左>右的视觉次序欣赏、阅读,看似很不起眼,其作用却至关重要。

前面也说了,线的形态可以有很多种,例如:

这里是以真实的可口可乐吸管作为设计中的线条,同样起到了视觉引导的作用,但是我们不难发现,这里的线条不仅仅只有一个作用,也牵扯到另一个作用:线条有串联整体的作用。

线条能够串联整体

在排版时我们有分组原则,即把互想关联的元素彼此靠近,无关联的相互疏远。在页面中我们会把同一色块上的元素视作为一个整体;下面我们说下线条所带来的串联整体的作用是如何体现的,比如:

△ 图一

△ 图二

图一因为大面积的留白能使得用户很容易分辨出自行车与文案是一个整体,但是相较于图二而言,其整体性略显不足,而且给人的感觉太过单薄、重心不稳;图二的整体性更强,这里的矩形线条就起到了串联主题的作用,类似的还有:

不难看出,这些案例中的线条都有串联主题的作用,线条使得主题元素整体感更强、画面板式更加严谨;对于整体的视觉传达也起到了串联、引导的作用;在文字排版中,也有类似的线条,比如:

同样是通过线条把文案更加整体化,也起到了串联的作用。

线条可以突出主题

突出主题的方式有很多种,像我们之前所说到的留白、对比。接下来继续说下另一个可以突出主题的方式—线条,下面看个案例:

通过对比观察我们发现,右侧海报整体感更强,主题文案信息更加清晰,主体更明确。其中的原理可以理解为:因为线条的存在,使得主题信息有了一定的范围,在视觉上等于是在海报中划定了视觉焦点,从而起到了突出主题的作用。当然还有其他的表现形式,比如:

很好的诠释了线条的作用——突出标题序号。在进行创作时,作品的每个元素都要做到有理有据,否则只是一味的抄袭,到再创作时脑袋里还是一片空白,只有明白了其中的设计原理,才能做到活学活用。再看几个案例:

突出主题也许一个线条就可以表现的淋漓尽致,因设计目的的不同,线条所发挥的作用也不尽相同。下面继续分析:

线条可以分割整体

前面说了线条有串联整体的作用,而这里又说可以分割整体,是否存在矛盾呢?下面举个简单的例子:

在小文案的区域中间我加了两个线条,看似很小的改变,其目的是把文案很准确、严谨地分割为三个小整体,希望能给用户带来识别性更强的阅读性,再举个例子:

这里的线条把月份和日期分割、英文和中文分割开,使得用户对于信息的捕捉能力以及可辨识性都提升了很多,而线条的作用就起到了分割的作用。

线条有修饰的作用

线条也能起到修饰、衬托的作用,很多小伙伴会忽视这一点,其实线条也可以成为海报中衬托画面、修饰主题的元素,例如:

海报中的线条起到了衬托、修饰主题的作用,假如把这些线条都删除,画面整体会显得相对单薄。

更多设计中线条的应用:

总结

线条的作用我们分为四个逐一分析,其实它们之间也存在着相辅相成的作用,不能以一概全,线条所起到的作用可以是一种,也可以是多种,比如:我们前面「可口可乐」的案例,即有串联整体的作用,又有引导视觉的作用。只要我们在使用的时候能明确目的,而不是机械式的抄袭,那么最终一定会得心应手。

文章来源:优设    作者:美工美邦

免费商用字体「未来荧黑」开放下载!5种字宽+9种字重超好用!

资深UI设计者

未来荧黑是一个基于思源黑体、Fira Sans和Raleway的开源字体项目,支持简体中文、繁体中文与日文。

思源黑体的7种字重被扩展为9种字重,并增加了5种字体宽度,全家族共包含44款字体。

与思源黑体有何不同?

相比于思源黑体,未来荧黑的造型更加简明现代,版面效果清新轻快。未来荧黑的中宫与字面更加收敛,重心在字重之间经过了重新配置;笔画细节上处理得更加干练,简洁而平直化。

开发者:Celestial Phineas

字体文件以SIL Open Font License 1.1发布,构建字体开发的代码以MIT License发布。

发布地址:github.com/welai/glow-sans

如何下载?

网盘地址:https://pan.baidu.com/s/1f2UuFO8ZxWa8v5XXYUEmig 提取碼 2e8w

备份下载链接:https://pan.baidu.com/s/1E1woRsZX91bCrq5FT1SAzg 提取码: 92t2

文章来源:优设    作者:GrayDesign

如何评价微信新上线的深色模式?

资深UI设计者

微信在3.23号上线了传闻已久的 「暗黑版」,用来适配 iOS 的深色模式,相信不少同学已经安装并体验上了,如果还没安装的可以看看下面图例。

微信每有一次大动作都会引发全网性的讨论,而针对设计上的调整,往往只会迎来一片骂声。比如我们看看知乎中讨论的内容,感觉民愤都快压抑不住了。

但我们先别急着参与网上的声讨,现在站在设计师的角度,来评价一下迟到的微信深色模式。

深色和夜间模式傻傻分不清

很多人会把深色模式和夜间模式搞混,这里必须强调这是两种不同的模式,所以我们要对还没搞清楚状况的同学先做一个扫盲(最近扫盲好像搞的比较多…)。

先说夜间模式,是一个专门针对夜晚环境适配的设计版本。腾讯的 ISUX 团队之前做过调研,有 71.1% 的用户习惯在夜间不开灯看手机。

如果在深夜漆黑的房间中看手机屏幕,对我们的健康有非常大的损害,不仅表现在对视力的伤害上面,视网膜和神经元容易受损,同时主流的研究项目还表明会这会抑制我们褪黑素的分泌造成失眠。

所以,夜间模式,是一个用来降低屏幕对用户伤害,提升夜间使用体验的特殊模式。

通常,夜间模式会采取 降低尼特值、减少对比度、降低色彩明度、增加深色遮罩的方法,比如之前 QQ 官方的夜间模式示意图,大家感受一下,是不是有内味儿了?

这里提一下尼特这个概念,尼特是用来说明亮度的术语,1nit=1坎德拉/平方米。是现在各大手机发布会中介绍屏幕的时候都要强调的参数之一,因为尼特值越高,证明在户外大白天的环境中屏幕内容可以越清晰,而夜间模式做的就是用来降低显示亮度尼特值的。

然后再解释一下苹果的深色模式,苹果的 DarkMode,并不是一个专门面向深夜环境的模式。官方对此版本的解释,详见我们翻译的 iOS 官方文档中 112 页。

这是一个面向全天候的视觉风格,同时通过深色背景的对比,来加凸显图片、文字内容。包括上面那种官方的配图,大家应该就能感觉到主体元素比白色模式下更凸出,更激烈。

所以了解了这两个模式的区别,我们才能好好展开对微信深色模式的讨论。

微信深色模式专业总结

接下来,我们先来总结一遍微信的深色模式。首先是分析一遍它使用的背景色。

背景色纯灰色,有3个等级的灰度。熟悉我的都了解,看色彩的奥秘,靠16进制代码和 RGB 那是分析不出个什么所以然的。如果我们把它们转化成 HSB 一看,规律性就来了。

背景色从深到浅色的灰度值 B 值分为 10、14、18,是不是朗朗上口。应用的层级虽然和官方规范一样使用了三级,但是设置和官方的不同。

然后再看看其中使用的其它配色,其中主色保持了不变,其它应用到图标色彩,都进行了明度的调整,比如下图案例。

再看看文字的用色,也是纯灰色,标题使用 B:85,正文使用 B:65,注释使用 B:35(主要用色)。

而官方使用的文字色彩中,却并不是纯灰色,除了第一级的白色以外,其它灰阶的文字是由带有蓝色色相的色彩通过降低透明度来呈现的。

对中性色增加蓝色色值是一个常规操作,可以让这种灰色看起来有一点活力,不会像纯灰色那么单调,不过这次微信明显在文字的应用上更保守,一点色相也没有给。

为什么微信色彩另辟蹊径

这次微信被大面积吐槽的,就是颜色的应用上和官方的规范不一致,作为从业人员直接开喷是相当不专业的(最起码要先走个形式),这就是我要分析的重点了。

要说微信的 UED 团队,专业性肯定是国内最顶尖的,你们网上所有看过有关交互的方法论、可用性测试的分享, 他们肯定都有做过,而且执行得更专业。

直接用官方规范的黑底白字模式,微信团队不可能没有出过这样的方案。但很明显,这个方案最后被毙了,上了我们看见的这个版本,虽然不知道以后会不会变。

再看看下面官方发的一条微博。

其中已经提及了,是和苹果 「共同探索」 出来的方案,这是非常耐人寻味的。也就是说,这个不用官方的模式是苹果团队也通过的。

那么为什么要做的不一样呢?没有内幕消息,就根据自己的经验来判断一下。

我自己认为的一个非常重要的原因,就是对于 「夜间模式「 的兼容。前面不是讲暗黑模式和夜间模式不一样嘛?为什么微信的暗黑模式又去兼容夜间模式了。

这里面有几个小彩蛋,首先就是官方对深色模式的态度,在我看来越来越暧昧了。比如在显示与亮度设置页面里,有一个自动设置外观 —— 日出前保持深色外观的功能。这样,就等于默认将深色模式和夜间模式挂钩。

还有,如果过去我们没有整理 iOS13 的翻译,就不会发现,上面我们展示的那句专注于内容的解释,现在在官网已经被删掉了(你品,你细品)。

再说关于用户认知的问题上面,在 UI 群体中,能了解暗黑模式和夜间模式是不一样的可能就只占 10 分之一,那么对于普通用户来说,这个情况就更不乐观,能有 1% 的用户了解这个概念就不错了。所以,绝大多数用户会直接认为暗黑模式就是夜间模式。

如果暗黑模式直接当成夜间模式用,在深夜的环境里,观感会特别差,因为 —— 明暗对比度过高。

如果在黑底中直接用白字,那么可以说屏幕的文字和背景的对比度就是 100(HSB中 B 的差值),在一个漆黑的环境中会非常应验 「让内容脱颖而出」 的效果,刺激性会非常强烈,文字将变得非常尖锐,比如 QQ 暗黑模式,大家可以在被窝里打开下面这张图感受一下。

新的深色模式版本中,文字和背景的对比度基本控制在 50 左右,降低了一半。

并且,中英文字形在正负形上的差异(简单理解就是中文笔划更复杂),这个感觉会更强烈。比如我们用一个公众号页面举例,使用纯黑底白字,采用相同字号的中英文,看看显示的效果。

还有,纯黑背景色和白色的对比度,会根据屏幕的类型和参数不同而有不一样的感受,比如苹果从 X 后旗舰机型使用 OLED 屏幕,纯黑色区域将不会发光,进一步扩大对比度,使得文字变得更尖锐,更让人难以接受。

如果不是使用 OLED 屏幕的同学光看一个案例可能很难受,所以我们用纯黑的案例来对比一下现在的状态。

是不是发现明显在夜间的情况下黑白模式并不如另一个模式看起来舒适?而这种不舒适的差别并不会随着屏幕亮度降低而变化。

所以色彩并没有符合官方的原因,我的判断就在大环境中无法割裂夜间和深色模式的区别,同时也要让深色模式更适应夜间环境,做出了调整。而又因为它不是真正的夜间模式,所以对比度也不能像 QQ 之前的夜间版本一样将整体环境完全压暗。

你看,真是一个让人矛盾的过程……

为什么深色模式姗姗来迟

最后再简单讨论一个问题,为什么深色模式来得这么晚。很多用户一直嘲讽,不就是换一套皮肤的事嘛,为什么就是不上线。

外行可以看热闹,但是如果是从业人员就应该知道,微信这种体量的应用,上线深色模式绝对不是一个非常容易的事情。

适配黑暗模式首先需要使用苹果新的 iOS 13 SDK(开发者工具)进行编译,等于应用中有大量的代码需要调整,而这种升级调整的结果还会导致沉重的测试压力。有经历过 Darkmode 开发的团队应该都知道这绝对不是改改颜色就能上线的皮肤。

再看到知乎另一个回答中提到的:

另一方面点大家随便听听。使用 iOS 13 SDK 之后,Apple 要求 VoIP 推送必须使用 CallKit,否则应用程序会被终止。而由于众所周知的原因,CallKit 在中国大陆是无法使用的,这样的改动会降低微信语音电话的体验。

原文地址:https://www.zhihu.com/question/378027349/answer/1069072154

再者,抛去大量用户体验调研相关的工作,微信整个生态对于暗黑模式的不友好可以说是无解的。比如说公众号,有大量公众号内部的标题、分割线、引用语句是用图片做上去的,而图片还用的是白底(透明底黑字的也有),于是现在就产生了灾难性的阅读体验。

比如我的公众号:超人的电话亭,其中文章展示的截图。

而且因为公众号发出去是不能修改的,只能删除,那么这部分存量文章将无法更改,体验也无法扭转。而且公众号还支持文字色彩等自定义,那么你在白色背景下添加的颜色,可不会直接适配深色模式,尤其是官方也不可能轻易直接给你们 「适配」 掉。

而在夜间模式,正常访问的文章网页,也和公众号会很像,但是打开以后是白色背景的话,统一的体验在哪里?

再者还有小程序,小程序虽然也可以通过微信官方提供小程序的深色模式适配文档,对应的 SDK,但是小程序不是 APP,其中有大量小程序开发后是缺少维护的。

因为线下门店通过外包方做好一个小程序上线以后,没特殊的原因不会直接去更新它,那么这部分小程序的升级适配无从谈起,会出现打开小程序一个白一个黑的窘境。

最后,再讲一个微信里最高频使用的功能 —— 发表情。深色模式直接造成大量自定义表情报废,无法正常显示的问题,比如看看下面我自己发的表情。

前面提到的,都是不能解决的问题,这就是做深色模式的挑战,因为用户 UGC 内容是不可控的,官方不可能通过算法直接帮用户强行 「适配」。

而这些,就是做深色版的难点。

总结

以上总结内容多数为主观分析,纯粹站在 UI 设计师角度进行专业解读,不带入个人立场。而一定要我自己评价的话,那就是 :赶紧把这模式给我移除!!

再顺便提一点小感想,一个有数亿用户的产品,每一个小调整分量都不轻,都要慎之又慎。同时,你做的每一个决策,都意味着要站在其中一部分用户的对立面,因为你满足不了所有用户的需求。所以,这就是设计师的压力与挑战。

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

你不知道的--save-dev和--save的区别

seo达人

网上对于这两个的区别解释都是统一口径的,一个是开发依赖,一个是线上依赖,打包发布需要用到的要添加到线上依赖,一模一样的回答,误导了很多人。今天自己测试一下这两个命令,记录一下。



–save-dev,会在devDependencies里面添加依赖



-D,会在devDependencies里面添加依赖



–save,会在dependencies里面添加依赖



-S,会在dependencies里面添加依赖



devDependencies和dependencies可以同时存在同一个包的依赖。



如果npm install xxx后面没有输入要保存到哪个里面,devDependencies和dependencies都没有。



我这边直接npm install jquery,node_modules下有jQuery。然后我删除node_modules,执行npm install,node_modules下并没有下载jQuery。



所以,安装依赖的时候如果没有加上要依赖到开发还是线上,只是临时的在node_modules里面帮你下载,而devDependencies和dependencies的依赖都会帮你下载。



然后我在devDependencies下安装依赖:



"devDependencies": {  

    "html-webpack-plugin": "^4.0.3", 

    "jquery": "^3.4.1",  

    "webpack": "^4.42.1", 

    "webpack-cli": "^3.3.11"

}



在入口文件引用和打印jQuery:



import $ from 'jquery'

console.log($)



打包之后,可以使用jQuery。



然后我在dependencies下安装依赖:



"dependencies": { 

    "html-webpack-plugin": "^4.0.3", 

    "jquery": "^3.4.1", 

    "webpack": "^4.42.1", 

    "webpack-cli": "^3.3.11"

}



在入口文件引用和打印jQuery:



import $ from 'jquery'

console.log($)



打包之后,可以使用jQuery。



测试的结果就是,无论是–save还是–save-dev,对于打包都没有任何影响。devDependencies和dependencies两种情况,打包出来的main.js都把jQuery打包进去。这两种情况,如果都没有引用jQuery的情况下,也都不会把jQuery打包。



接着在一个空白的项目里面下载axios,npm install axios -S,打开node_modules文件夹:







发现多出了另外三个依赖,查看axios下的package.json:



"dependencies": {



    "follow-redirects": "1.5.10"



}



查看follow-redirects下的package.json:



"dependencies": {



    "debug": "=3.1.0"



}



查看debugs下的package.json:



"dependencies": {



    "ms": "2.0.0"



}



最后ms的package.json没有dependencies。



而这几个包的devDependencies依赖的包没有一个下载。



接着我在node_modules把follow-redirects、debugs、ms都删了,把axios里面的package.js的dependencies给删了,然后执行npm install,发现没有下载follow-redirects、debugs、ms这几个,也证明了如果node_modules里面有下载的包,是不会重新去下载的。我把node_modules删除,执行npm install,这几个包又都下载下来了。



最后得出 的结论是,–save-dev和–save在平时开发的时候,对于打包部署上线是没有任何影响的。如果你是发布一个包给别人用,而你开发的包依赖第三方的包,那么你如果是–save,那么别人安装你开发的包,会默认下载你依赖的包,如果你是–save-dev,那么别人安装你开发的包,是不会默认帮忙下载你依赖的包。



其实发布的包如果没有必要,很少会默认帮你下载,比如bootstrap,依赖jQuery,怕你原本就下载了引起冲突,也不会在dependencies里面安装jQuery而是:



"peerDependencies": {



    "jquery": "1.9.1 - 3",



    "popper.js": "^1.16.0"



}



表示bootstrap依赖于这两个包,你必须安装,版本不固定,但是一定要安装这两个包,安装的时候会有警告:



peerDependencies WARNING bootstrap@ requires a peer of jquery@1.9.1 - 3 but none was installed



peerDependencies WARNING bootstrap@
requires a peer of popper.js@^1.16.0 but none was installed



当你引用了然后打包,报错:



ERROR in ./node_modules/_bootstrap@4.4.1@bootstrap/dist/js/bootstrap.js



Module not found: Error: Can't resolve 'jquery' in 'C:\Users\wade\Desktop\savedev\node_modules_bootstrap@4.4.1@bootstrap\dist\js'



 @ ./node_modules/_bootstrap@4.4.1@bootstrap/dist/js/bootstrap.js 7:82-99



 @ ./src/index.js



 



ERROR in ./node_modules/_bootstrap@4.4.1@bootstrap/dist/js/bootstrap.js



Module not found: Error: Can't resolve 'popper.js' in 'C:\Users\wade\Desktop\savedev\node_modules_bootstrap@4.4.1@bootstrap\dist\js'



 @ ./node_modules/_bootstrap@4.4.1@bootstrap/dist/js/bootstrap.js 7:101-121



 @ ./src/index.js



以上就是对–save和–save-dev的一些测试,想更快的得出结论其实是自己发布一个包。至于本人的答案是不是存在错误,欢迎指出,因为只是自己简单测试的结果。


视觉设计师与用户体验地图

前端达人

点击查看原图


用户体验地图(Customer Journey Map)是什么?

用户体验地图是从用户的视角出发,去理解用户、产品或者服务交互的一个重要的设计工具。

也可以说是以可视化的形式,来表现一个用户使用产品或者接受服务的体验情况,从体验的过程中来发现用户在整个体验过程中的问题点与情绪点,以此来从中提取出产品的优化点,方便对产品进行迭代,从而保证良好的用户体验。

经典案例

Chris Risdon绘制的欧洲铁路购票的体验地图

点击查看原图



上图中是欧洲铁路公司整个体验地图的一部分。欧洲铁路公司是一家美国经销商,为北美旅客提供一个独立预订火车票去欧洲各地的平台,而无需用户去网站预定。他们已经拥有了一个良好体验的网站和一个屡获殊荣的咨询中心,但他们希望通过所有接触点来优化用户使用过程,这样可以让他们更全面地了解,他们应该专注的投资,设计和技术资源。整体的“诊断”评价系统,包含一系列的重点举措,体验地图只是其中派生的一部分。体验地图帮助建立同理心图,来理解随着时间和空间的推移,用户与欧洲铁路公司服务系统交互时接触点的变化。

在这张体验地图中采用了五个关键组成一个体验地图,一个体验地图可以直观的表示用户操作流、期望、特定的目标、用户情绪状态和整体的体验点,做到整体把控和评估产品体验。

作用 :

点击查看原图



用户体验地图能帮助我们创造出一个有大局观的用户体验,更好的帮助我们理解用户的痛点和需求,帮助Team达成共识,非常有利于跨团队合作。

用户体验地图包含的内容 :

01b5465c17ca39a8012092526f5b27.jpg



其中包括,人群(产品的用户是哪一类人)、 用户的需求(用户想得到什么)、 路径(在某特定的场景下体验的整体过程) 、接触点  (产品与人或人与服务接触的关键点)、行为(用户的行为是什么样的?)、情绪  (体验过程中的感受心情) 、机会点  (过程中可以突破的点,可以成为特色的地方)、 解决方案  (解决用户在体验过程的痛点)、 问题  (解决用户在体验过程的痛点)。

用户画像 :

01c6935c17ca72a80121ab5d78d1c9.jpg


015b475c17ca8aa80120925274b13f.jpg


在准备开始绘制用户体验地图的时候,我们应该要确立用户群体 / 确定产品目标 / 了解用户目标,并作出用户画像。

视觉设计师怎么使用

举例(一):

01e1835c17cabfa80121ab5d29eade.jpg



那我们看看作为一名视觉设计师应该关注哪部分的流程。

视觉设计师的用户体验地图 :

01e7375c17cae4a801209252612bf2.jpg


我们的聚焦点应在上图的这几个部分。

0147a05c17caf9a80121ab5d287c70.jpg


所以当绘制完用户体验地图后,应该再绘制一份视觉设计师看的版本,我们设计师主要关注的视觉的触点。

定量方法(产品方向):

我们在行为和情绪上一般会使用问卷法、后台数据分析法;而在需求和问题上一般会使用焦点小组、访谈法、观察法、日志法和田野调查,下面就为大家来解释下这些方法。

焦点小组:是指从研究产品中所确定的全部用户群(总体)中抽取一定数量的用户来组成样本,根据样本信息推断用户群总体特征的一种调查方法。

访谈法:访谈,就是以口头形式向用户进行询问,根据被询用户的答复搜集客观的、不带偏见的事实信息,以准确地说明样本所要代表的总体的一种方式。

观察法:观察法是指研究者根据一定的研究目的、研究提纲或观察表,用自己的感官和辅助工具去直接观察用户,从而获得资料的一种方法。

日志法:是由用研人员按时间顺序,详细记录自己在一段时间内使用产品的过程,经过归纳、分析,达到分析产品目的的一种工作分析方法。

田野调查:在日常生活中,在一个有一个严格定义的空间和时间的范围内,体验特定用户群的日常生活与思想境界,通过记录自己的生活的方方面面,来展示不同阶段用户群的基本需求。

注意事项(5要点)

1. 在制作地图前,应理清楚产品的前期规划和需求,并且与同事达成共识。

2. 避免以自己的经验或者认知来确定用户体验地图中的接触点,应当真正的从用户的行为中去提取。

3. 不要将一些落后的信息加入到用户体验地图中。

4. 最好先在Team内部脑暴一份地图,再去与所制作的地图进行对比。

5. 用户体验地图不会涉及到实现方案和现实机制,只涉及用户的体验。

团队人员的合理搭配 :

将公司或者团队的PM、RD、运营、Leader等过来,详细的描述这一份用户体验地图,聆听他们的反馈。

在分析用户问题上 :

分为四个等级:ABCD,在对优先级进行排列的同时应该,考虑到产品在每个阶段的侧重点,根据不同的进度和情况,来对优先级进行排列,帮助我们整理问题和提炼最核心的一些体验问题,区分问题还能帮助我们更好的把握产品的优化方向。

视觉设计师应该关注的点 :

01c9015c17cbf7a801209252f6af88.jpg



视觉设计师的任务是什么?是有效的传达出产品的信息、简洁并且优雅的传达、通过视觉设计制造出愉悦的用户体验。用户在很多的场景下都可能接触到企业的产品或者是服务,这个服务接触带给用户的感受更多是偏向于视觉感知方面的。所以我们需要尽可能的列举出企业的产品或者服务与用户可能产生接触的场景、服务触点,再根据服务触点延伸出相关的“视觉触点”,用来梳理出我们需要输出的视觉产物,做出相对应的查漏补缺和优化,输出指导企业的品牌建设工作。而用户体验地图就很适合作为这样的工具。

“体验地图”对于优化视觉体验的意义 :

01fea65c17cc21a80121ab5d431aa7.jpg


整体性:系统性地规划品牌的视觉统一化工作,提升品牌建设工作的全面性和完整度。也可以避免未来工作中不同的品牌 / UI / 运营设计师对于品牌概念的理解不同而带来的设计出入。

01d6455c17cc3ba80121ab5d399fc3.jpg


品牌设计,是用户对于公司产品的直接印象,所以在品牌设计的要求就是:建立特征、保持特征、推广特征、美化特征、对于以上的要求,来提供完整且匹配的设计方案。

运营设计,运营设计的目标就是让用户尽可能的感知到产品的好,把产品的特点通过设计包装传递给用户,一个好的运营设计,应该是在用户看到你的设计作品后,会产生足够好的兴趣和好感,并愿意去关注你的产品。

UI设计,这是产品与用户接触过程中,频率最高、最直观的部分,目的是为了让用户认识到产品的相貌和气质,UI设计需要注意界面视觉层次的强弱、信息划分、用户的视线轨迹、色彩的表达、质感、舒适度等,来让用户觉得这个产品设计真好。

例如 :

OFO,以年轻人为主的共享骑行产品,无论是在品牌/运营/UI的设计上,都能让人感觉时尚、年轻、阳光、且有亲和力。

品牌设计 :


0151145c17cc66a80121ab5ddb966a.jpg

UI设计 :

01386c5c17cc9da80121ab5dd27af4.jpg


运营设计 :

01c5c35c17ccbea8012092520ea55d.jpg

UI设计 :

0105375c17cd2aa801209252066123.jpg


运营设计 :

0105375c17cd2aa801209252066123.jpg

设计师的进阶 :

01ff0e5c17cd5aa801209252db7ebb.jpg

在一开始的初级设计师阶段(也就是1.0阶段),我们需要从交互设计师手中接过交互设计稿,来对它进行气质进行改造,做出独特的视觉设计,也就是将其翻译为高保真稿,然后再与开发同学进行对接,也要保持视觉走查,以防实际效果与预期效果的不符;在这个1.0阶段我们的表现力和创造力,是最为主要的,如何去做出差异化?这是这个阶段的设计师需要考虑的,在这个APP设计趋同的大浪潮下,你如果能够做出不一样的设计,那么你则可以一鸣惊人,从众多水平相当的设计师中脱颖而出,这时你便可以考虑进入下一个阶段,也就是2.0。

0172935c17cd76a80121ab5d42695b.jpg

在高级设计阶段(即2.0阶段),这时候你就需要拥有更好的产品思维和逻辑能力,不仅仅只是从交互设计师拿到交互设计稿,直接上手开做,在这之前,你需要开始了解产品的业务定位、用户人群、产品目标、当前的问题、未来的迭代等,需求方这时候就成你的主要对接对象,需要你具备拆解需求、采集用户的需求、扩展业务、能进行设计验证的能力,能将产品的气质和品牌贯穿于整个产品(UI/运营/品牌),设计是怎么推导的,现在就不是仅仅只在停留在好看的层面上了,毕竟设计师不是画师,而是解决问题的,我们在做了某个设计后,就要去关注它的变化了,看看用户的反馈、商业转化率等等,这都是为你的下一次设计迭代做的参考。



站酷

分享到脉脉


转自:脉脉

原文链接:https://maimai.cn/article/detail?fid=988630001&efid=N-uHKNnf7vXGBmaFd3lZHA&use_rn=1

vue实现移动端悬浮窗效果

前端达人

本文讲述,在使用VUE的移动端实现类似于iPhone的悬浮窗的效果。

相关知识点

touchstart 当在屏幕上按下手指时触发

touchmove 当在屏幕上移动手指时触发

touchend 当在屏幕上抬起手指时触发
mousedown mousemove mouseup对应的是PC端的事件

touchcancel 当一些更高级别的事件发生的时候(如电话接入或者弹出信息)会取消当前的touch操作,即触发touchcancel。一般会在touchcancel时暂停游戏、存档等操作。

效果图

实现步骤

1.html

总结了一下评论,好像发现大家都碰到了滑动的问题。就在这里提醒一下吧。可将该悬浮 DIV 同你的 scroller web 同级。 —- (log: 2018-08-21)

html结构: <template> <div>你的web页面</div> <div>悬浮DIV</div> </template>

<template>
 <div id="webId">
 ...
 <div>你的web页面</div>
 <!-- 如果碰到滑动问题,1.1 请检查这里是否属于同一点。 -->
 <!-- 悬浮的HTML -->
 <div v-if="!isShow" class="xuanfu" id="moveDiv"
  @mousedown="down" @touchstart="down"
  @mousemove="move" @touchmove="move"
  @mouseup="end" @touchend="end"
 >
  <div class="yuanqiu">
  {{pageInfo.totalPage}}
  </div>
 </div>
 ...
 </div>
</template>

2.JS

<script>
data() {
 return {
 flags: false,
 position: { x: 0, y: 0 },
 nx: '', ny: '', dx: '', dy: '', xPum: '', yPum: '',
 }
}

methods: {
 // 实现移动端拖拽
 down(){
 this.flags = true;
 var touch;
 if(event.touches){
  touch = event.touches[0];
 }else {
  touch = event;
 }
 this.position.x = touch.clientX;
 this.position.y = touch.clientY;
 this.dx = moveDiv.offsetLeft;
 this.dy = moveDiv.offsetTop;
 },
 move(){
 if(this.flags){
  var touch ;
  if(event.touches){
   touch = event.touches[0];
  }else {
   touch = event;
  }
  this.nx = touch.clientX - this.position.x;
  this.ny = touch.clientY - this.position.y;
  this.xPum = this.dx+this.nx;
  this.yPum = this.dy+this.ny;
  moveDiv.style.left = this.xPum+"px";
  moveDiv.style.top = this.yPum +"px";
  //阻止页面的滑动默认事件;如果碰到滑动问题,1.2 请注意是否获取到 touchmove
  document.addEventListener("touchmove",function(){
   event.preventDefault();
  },false);
 }
 },
//鼠标释放时候的函数
 end(){
 this.flags = false;
 },
}
</script>

3.CSS

<style>
 .xuanfu {
 height: 4.5rem;
 width: 4.5rem;
 /* 如果碰到滑动问题,1.3 请检查 z-index。z-index需比web大一级*/
 z-index: 999;
 position: fixed;
 top: 4.2rem;
 right: 3.2rem;
 border-radius: 0.8rem;
 background-color: rgba(0, 0, 0, 0.55);
 }
 .yuanqiu {
 height: 2.7rem;
 width: 2.7rem;
 border: 0.3rem solid rgba(140, 136, 136, 0.5);
 margin: 0.65rem auto;
 color: #000000;
 font-size: 1.6rem;
 line-height: 2.7rem;
 text-align: center;
 border-radius: 100%;
 background-color: #ffffff;
 }
</style>

实现好JS逻辑,基本上,问题不大。

本文链接 http://www.luyixian.cn/javascript_show_166242.aspx



再加一点

css之display:inline-block布局

1.解释一下display的几个常用的属性值,inline , block, inline-block

  • inline(行内元素):
    1. 使元素变成行内元素,拥有行内元素的特性,即可以与其他行内元素共享一行,不会独占一行. 
    2. 不能更改元素的height,width的值,大小由内容撑开. 
    3. 可以使用padding上下左右都有效,margin只有left和right产生边距效果,但是top和bottom就不行.
  • block(块级元素):
    1. 使元素变成块级元素,独占一行,在不设置自己的宽度的情况下,块级元素会默认填满父级元素的宽度. 
    2. 能够改变元素的height,width的值. 
    3. 可以设置padding,margin的各个属性值,top,left,bottom,right都能够产生边距效果.
  •  inline-block(融合行内于块级):
    1. 结合了inline与block的一些特点,结合了上述inline的第1个特点和block的第2,3个特点.
    2. 用通俗的话讲,就是不独占一行的块级元素。如图:

图一:1.png

图二:

2.png

两个图可以看出,display:inline-block后块级元素能够在同一行显示,有人这说不就像浮动一样吗。没错,display:inline-block的效果几乎和浮动一样,但也有不同,接下来讲一下inline-block和浮动的比较。

 

2.inline-block布局 vs 浮动布局

    a.不同之处:对元素设置display:inline-block ,元素不会脱离文本流,而float就会使得元素脱离文本流,且还有父元素高度坍塌的效果

    b.相同之处:能在某程度上达到一样的效果

我们先来看看这两种布局:
图一:display:inline-block3.png

图二:4.png

对两个孩子使用float:left,我在上一篇浮动布局讲过,这是父元素会高度坍塌,所以要闭合浮动,对box使用overflow:hidden,效果如下:

>>乍一看两个都能做到几乎相同的效果,(仔细看看display:inline-block中有间隙问题,这个留到下面再讲)

c.浮动布局不太好的地方:参差不齐的现象,我们看一个效果:
图三:

图四:

>>从图3,4可以看出浮动的局限性在于,若要元素排满一行,换行后还要整齐排列,就要子元素的高度一致才行,不然就会出现图三的效果,而inline-block就不会。

 

3.inline-block存在的小问题:

a.上面可以看到用了display:inline-block后,存在间隙问题,间隙为4像素,这个问题产生的原因是换行引起的,因为我们写标签时通常会在标签结束符后顺手打个回车,而回车会产生回车符,回车符相当于空白符,通常情况下,多个连续的空白符会合并成一个空白符,而产生“空白间隙”的真正原因就是这个让我们并不怎么注意的空白符。

 

b.去除空隙的方法:
1.对父元素添加,{font-size:0},即将字体大小设为0,那么那个空白符也变成0px,从而消除空隙
现在这种方法已经可以兼容各种浏览器,以前chrome浏览器是不兼容的
图一:

 

c.浏览器兼容性:ie6/7是不兼容 display:inline-block的所以要额外处理一下:
在ie6/7下:
对于行内元素直接使用{dislplay:inline-block;}5.png
对于块级元素:需添加{display:inline;zoom:1;}

 6.png

4.总结:

display:inline-block的布局方式和浮动的布局方式,究竟使用哪个,我觉得应该根据实际情况来决定的:
a.对于横向排列东西来说,我更倾向与使用inline-block来布局,因为这样清晰,也不用再像浮动那样清除浮动,害怕布局混乱等等。
b.对于浮动布局就用于需要文字环绕的时候,毕竟这才是浮动真正的用武之地,水平排列的是就交给inline-block了。



日历

链接

个人资料

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

存档