首页

从这 3 个角度,找到提高用户体验的诀窍

资深UI设计者

用户体验是用户在使用产品或者服务中的所有的主观感受。因此我们设计的过程中要以用户为中心进行设计,不能单单为了设计一个产品而设计,只关注产品设计本身的功能性。

在生活中好的用户体验设计的产品让人使用舒适,而用户体验不好的设计往往让人很糟糕。

用户体验比较好的:比如我们坐地铁的过程中很准时,这就是好的用户体验;在吃海底捞时,看到好吃的西瓜,他们会给你打包,这就是好的用户体验。

用户体验比较不好的设计:比如在生活中有些插座设计,一个两孔一个三孔,只能一次插一个,很气人有没有,难道上下错位和间距拉大有这么难吗?再比如蚊香的设计,很容易断,每到夏天不断几个,都不好意思!

提升用户体验的方向

在产品设计中是否满足用户需求我们可以分为 3 个点来进行分析,主要是有用性;易用性;满意度。

1. 有用性

有用性就是产品有用的设计功能,也是产品基础的设计原则。

对于有用性而言,我们在这个过程可以主要在三个方向进行把控,就是:基本需求;期望需求;兴奋需求。

基本型需求

基本型需求是用户必需需求,用户在产品中认为这是必需的功能,(这些基本需求是用户认为必备的,有了用户觉得是应该的,如果没有这些需求,那么用户在使用产品过程中间大部分会直接放弃,选择其他家产品)。

比如淘宝产品中的订单和商品功能就是基本型需求;微信中的聊天和通讯录就是基本型需求;QQ 音乐中的播放页、播放菜单就是基本需求。

期望型需求

基本型需求是用户意愿型需求,用户自己也不知道,但是期望获得的功能。(这类需求就没有基本需求那样必备,是产品中期望需求体验越多越好,用户越满意,反之用户满意度也会下降)。

这类需求是期望型需求,也是我们产品竞争力所在,因此往往人们在谈论哪个产品好不好,通常是期望需求和兴奋型需求。比如淘宝产品中能买到便宜产品,而且符合详情页中描述;比如微信产品中聊天语音/微信/视频,聊天更加方便;比如 qq 音乐中的曲目和歌单数量增加,用户就会很满意,这也是期望需求。

兴奋型需求

兴奋型需求是用户非常期望的需求。(这类需求满意度高,有这些兴奋型需求时即使不太完善,用户也会满意,做得非常好就会让用户兴奋;没有这些需求用户也不会表现得不满意)。

比如淘宝产品能够更多满足用户多样化的生活,各种生活服务提供给用户;商品评价页用户互动,方便用户可以熟悉产品好坏;比如微信产品中暗黑模式,满意希望黑暗模式体验的用户需求;比如 qq 音乐中单曲热评,让我们对歌曲背后的故事,歌友的心路有了了解互动。

此外兴奋性需求在产品中还有一些重要的点,比如微动效、情感化设计等等这些都可以让产品提升很大的用户体验,和宣传力度,因为用户在谈论产品好坏时候比较多的是说产品的兴奋型需求。

需求分析模型

需求分析工具 KANO 模型,主要是帮助我们直观的了解产品不用类型需求实现程度和用户满意度的对比,我们了解这些需求的时候,可以让我们更好的看到这些功能点有哪些影响力。

2. 易用性

易用性就是产品好不好用,容易使用吗。同时我觉得在有用性上产品经理需要考虑得比较多一点,而易用性上就是我们 UI、UE 需要重点负责和掌握的东西。

对于易用性而言,我们可以主要在三个方向进行把控,就是:上手快 ;操作快;负担少。

上手快

上手快就是用户使用产品容易上手,没有啥学习成本。简单的意思就是让用户不怎么动脑去想就知道下一步我要做什么,用户操作满足自己的心智模型。

心智模式是指深植我们心中关于我们自己、别人、组织及周围世界每个层面的假设、形象和故事。并深受习惯思维、定势思维、已有知识的局限。简单理解就是在使用产品中满足我们对产品的认知思维。当然文中介绍的只是心智模型的很一小部分,主要是想让大家多去了解心智模型,更好地在以后的产品设计中运用它们。

比如淘宝的下单弹窗、微信的红包、QQ 音乐的音乐播放,都是用户容易上手,即使小白用户在使用时,根据它们简单的提示就可以操作,没有太多复杂选项,一目了然。

操作便捷

操作便捷就是用户在使用产品中操作效率高,没有太多干扰项目。(这类设计一般就是操作方便,尽可能地减少干扰项目,增加快捷入口等)。

比如淘宝产品中的物流信息,没有太多干扰直接出现在订单的头部位置,提高用户查看商品物流信息的操作效率,提升了用户体验。比如微信聊天中的发送图片功能,直接显示最近图片,快捷发送,提高用户发送图片的操作效率。比如 QQ 音乐的播放直接在首页出现,方便用户选歌切换,操作效率高。

负担少

负担少通常是减少记忆负担,不让用户累着,为用户分忧。

比如淘宝红包展示就是在我的页面里面直接显示;比如微信钱包余额直接在钱包按钮下方显示,不用进入三级页面;比如 qq 音乐自建歌单显示歌单数量,减少用户记忆负担。

3. 满意度

满意度简单理解就是用户需求被满足后的愉悦感。它是相对的概念,就是用户需求和产品完成度之间的衡量。

对于满意度而言,在产品设计上有很多方面,今天我们简单讲一下两个方向的把控:视觉感官的刺激;奖励。

视觉感官刺激

视觉感官刺激主要是超乎用户想象的好看的视觉。而在 UI 设计中主要体现在动效设计、插画等等。

比如淘宝产品中的图标动效,趣味设计,提升用户对产品的情感交流。比如微信聊天中的表情包功能,简单的动作表达用户的心理,好看又好玩。比如 QQ 音乐的加载像音符一样有韵律地跳动着,给用户带来不一样的审美体验。

奖励

奖励是指用户在完成一些操作时给予奖励的设计。超出用户预期,带来愉悦。

比如淘宝用户每次下单/参加活动获得淘气值,满 1000 可以购买 88 会员,原件 888。比如 QQ 音乐的活动中心,用户每日签到累计可以获得会员体验奖励,更优质内容的声音享受激励。

总结

用户体验设计最根本的就是以用户为中心进行设计,本文主要从有用性、易用性、满意度三个维度来把控用户体验设计,但是在日常工作中,因为产品业务的复杂程度,我们要因地制宜地进行设计,深入挖掘我们产品自己的体验设计特色,增加自己的设计市场竞争力。

文章来源:优设    作者:阿韩设计

如果使用 JavaScript 原型实现继承

seo达人

在这篇文章中,我们将讨论原型以及如何在 JS 中使用它们进行继承。我们还将会看到原型方法与基于类的继承有何不同。


继承

继承是编程语言的一个显著特征,随着面向对象编程语言的引入而出现。这些语言大多是基于类的语言。在这里,类就像一个蓝图,对象是它的展现形式。就是说,要创建一个对象,首先我们必须创建一个类,然后我们可以从一个类创建任意数量的对象。


想象一下,我们有一个表示智能手机的类。这个类具有像其他智能手机一样的可以拍照、有GPS定位等功能。下面是使用 c++ 来描述这样的一个类:


class SmartPhone {

 public:

 void captureImages() {}

}


SmartPhone x;

x.captureImages()

我们创建了一个名为SmartPhone的类,它有一个名为capturePictures的方法用来拍照。


如果我们需要一个iPhone类,它可以捕捉图像和一些特殊的功能,比如面部ID扫描。下面是两种可能的解决方案:


1.将捕获图像功能与其他常见的智能手机功能,以及iPhone的特定功能一起重写到一个新类中。但是这种方法需要更多的时间和精力,并且会引入更多的bug。


重用SmartPhone类中的功能,这就是继承的作用,继承也是重用其他类/对象中功能的一种方式。

这里是我们如何从SmartPhone类中继承capturePictures方法,使用 c++ 实现如下:


class Iphone: public SmartPhone {

 public:

 void faceIDScan() {}

}


Iphone x


x.faceIDScan()


x.captureImages()

上面是一个简单的继承示例。 但是,它表明继承可以使我们以某种方式重用代码,从而使所生成的程序更不易出错,并且花费更少的时间进行开发。


以下是关于类的一些重要信息:


继承该功能的类称为子类

被继承的类称为父类

一个类可以同时从多个类中继承

我们可以具有多个继承级别。 例如,类C继承自类B,而类B继承自类A

值得注意的是,类本身并没有做任何事情。在从类创建对象之前,实际上没有完成任何工作。我们将看到它为什么不同于JavaScript。


大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】。


原型是什么?

在 JS 中,所有对象都有一个特殊的内部属性,该属性基本上是对另一个对象的引用。 此引用取决于对象的创建方式。 在 ECMAScript/JavaScript规范中,它表示为[[Prototype]]。


由于[[Prototype]]链接到一个对象,所以该对象有自己的[[Prototype]]引用。这就是建立原型链的方式。


这个[[Prototype]]链是 JS 中继承的构建块。


__proto__ 对象

为了访问对象的[[Prototype]],大多数浏览器都提供__proto__属性。访问方式如下:


obj.__proto__

需要注意的是,这个属性不是 ECMAScript 标准的一部分,它实际上是由浏览器实现的。


获取和设置原型方法

除了__proto__属性外,还有一种访问[[Prototype]]的标准方法:


Object.getPrototypeOf(obj);

对应的有个类似的方法来设置对象的[[Prototype]]:


Object.setPrototypeOf(obj, prototype);

[[Prototype]]和.prototype属性

[[Prototype]] 只不过是一种用来表示物体原型的标准符号。 许多开发人员将其与.prototype属性混淆,这是完全不同的事情,接着我们来研究一下.prototype属性。


在 JS 中,有许多创建对象的方法。一种方法是使用构造函数,像这样使用new关键字来调用它:


function SmartPhone(os) {

 this.os = os

}


let phone = new SmartPhone('Android')

在控制台打印 phone 对象:


{

 os: "IPhone"

 __proto__{

   constructor: ƒ SmartPhone(os)

  __proto__: Object

 }

}

现在,如果我们希望在phone对象上有一些方法,我们可以在函数上使用.prototype属性,如下所示:


SmartPhone.prototype.isAndroid = function () {

 return this.os === 'Android' || 'android'

}

再次创建phone对象时,打印 phone 对象如下:


{

 os: "Android"

 __proto__{

   isAndroid: ƒ()

   constructor: ƒ SmartPhone(os)

  __proto__: Object

 }

}

我们可以在对象的[[Prototype]]中看到isAndroid()方法。


简而言之,.prototype属性基本上就像由给定的构造函数创建的[[Prototype]]对象的蓝图。 在.prototype属性/对象中声明的所有内容都会在对象的[[Prototype]]中弹出。


实上,如果将 SmartPhone.prototype 与phone 的[[Prototype]]进行比较,就会发现它们是相同的:


console.log(Object.getPrototypeOf(phone) === SmartPhone.prototype);

// true

值得注意的是,我们还可以在构造函数中创建方法:


function ObjectA() {

 this.methodA = function () {}

}


let firstObj = new ObjectA()

console.log(firstObj)

这种方法的问题是当我们初始化一个新对象时。所有实例都有自己methodA的副本。相反,当我们在函数的原型上创建它时,对象的所有实例只共享方法的一个副本,显然使用原型的方式效率会过高。


大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】。


当我们访问属性时这里发生了什么?

当我们访问一个属性以获取它时,会发生以下情况:


JS 引擎查找对象上的属性,如果找到了该属性,然后返回它。否则,JS 引擎将通过查看[[Prototype]]来检查对象的继承属性,如果找到该属性,则返回它,否则,它会查找 [[Prototype]]的[[Prototype]]。 找到属性或没有[[Prototype]]时,该链结束,这意味着我们已经到达原型链的末端。


当我们设置/创建属性时,JS 总是在对象本身上进行设置。 即使[[Prototype]]链上存在相同的属性,下面是一个例子:


function MyObject() {}

MyObject.prototype.propA = 10; // 在原型上创建属性


let myObject = new MyObject();

console.log(myObject.propA); // [[Prototype]]上的属性

// 10


myObject.propA = 20; // 对象的属性

console.log(myObject.propA);

// 20

在上面的示例中,我们创建了一个构造函数,该函数的[[Prototype]]上具有属性propA。 当我们尝试对其进行读取操作时,会在控制台中看到该值。 但是,当我们尝试在对象本身上设置相同的属性时;JS 使用给定值在对象上创建一个新属性。 现在,如果我们不能直接访问[[Prototype]]上的属性。


值得注意的是,普通对象的[[Prototype]]链的末尾是内置的Object.prototype。 这就是为什么大多数对象共享许多方法(例如toString())的原因。 因为它们实际上是在Object.prototype上定义的。


使用原型继承的各种方法

在 JS 中,无论我们如何创建对象,只有原型继承,但这些方式还有一些区别,来看看:


对象字面量

在JavaScript中创建对象的最简单方法是使用对象字面量:


let obj = {}

如果在浏览器的控制台中打印obj,我们将看到以下内容:


clipboard.png


基本上,所有用文字面量创建的对象都继承了Object.prototype的属性。


需要注意的是__proto__对象引用了创建它的构造函数。 在这种情况下,constructor属性指向Object构造函数。


使用对象构造函数

另一种不太常见的创建对象的方法是使用对象构造函数。JS 提供了一个名为Object的内置构造函数方法来创建对象。


let obj = new Object();

这种方法的结果与对象字面量的方式相同。它从Object.prototype继承属性。因为我们使用Object作为构造函数。


Object.create 方法

使用此辅助方法,我们可以创建一个带有[[Prototype]]的对象,如下所示:


let SmartPhone = {

 captureImages: function() {}

}


let Iphone = Object.create(SmartPhone)


Iphone.captureImages()

这是在 JS 中使用继承的最简单方法之一。猜猜我们如何在没有任何[[Prototype]]引用的情况下创建对象?


构造方法

与 JS 运行时提供的对象构造函数相似。 我们还可以创建自己的构造函数,以创建适合我们需求的对象,如下所示:


function SmartPhone(os) {

 this.os = os;

}


SmartPhone.prototype.isAndroid = function() {

 return this.os === 'Android';

};


SmartPhone.prototype.isIOS = function() {

 return this.os === 'iOS';

};

现在,我们想创建一个iPhone类,它应该有'iOS'作为它 os 属性的值。它还应该有faceIDScan方法。


首先,我们必须创建一个Iphone构造函数,在其中,我们应该调用SmartPhone构造函数,如下所示:


function Iphone() {

  SmartPhone.call(this, 'iOS');

}

这会将Iphone构造函数中的this.os属性设置为’iOS‘。


之所以调用SmartPhone.call方法,是因为我们需要更改 this 值以引用Iphone。 这类似于在面向对象的世界中调用父级的构造函数。


接下来的事情是,我们必须从SmartPhone构造函数继承方法。 我们可以在此处使用Object.create朋友,如下所示:


Iphone.prototype = Object.create(SmartPhone.prototype);

现在,我们可以使用.prototype为Iphone添加方法,如下所示:


Iphone.prototype.faceIDScan = function() {};

最后,我们可以使用Iphone创建一个对象,如下所示:


let x = new Iphone();


// calling inherited method

console.log(x.isIOS()):

// true


ES6 class

使用ES6,整个过程非常简单。 我们可以创建类(它们与C ++或其他任何基于类的语言中的类不同,只是在原型继承之上的语法糖),然后从其他类派生新的类。


下面是我们如何在ES6中创建类:


class SmartPhone {

 constructor(os) {

   this.os = os;

 }

 isAndroid() {

   return this.os === 'Android';

 }

 isIos() {

   return this.os === 'iOS';

 }

};

现在,我们可以创建一个派生自SmartPhone的新类,如下所示:


class Iphone extends SmartPhone {

  constructor() {

    super.call('iOS');

  }

  faceIDScan() {}

}

我们不是调用SmartPhone.call,而是调用super.call。 在内部,JavaScript引擎会自动为我们执行此操作。


最后,我们可以使用Iphone创建一个对象,如下所示


let x = new Iphone();


x.faceIDScan();


// calling inherited method

console.log(x.isIos()):

// true

该ES6示例与先前的构造方法示例相同。 但是阅读和理解起来要干净得多。


原文:https://javascript.info/proto...


代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。

jquery,ajax请求并处理跨域

前端达人

自己写了段jquery的ajax请求,并输出到页面的表格中



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery实现JSONP</title>
</head>
<body>
<div id="mydiv">
    <button id="btn">点击</button>

    <div id="container">
        <!--每个条目-->
        <div class="item">
            <div class="item-title">作业名字</div>
            <div>
                <span class="item-content">创建时间</span>
                <span class="item-content">发布老师</span>
            </div>
        </div>
    </div>
</div>
</body>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script type="text/javascript">
    $(function(){
        $("#btn").click(function(){

            $.ajax({
                async : true,
                url : "xxxxxxxxxxx",
                type : "GET",
                dataType : "json", // 返回的数据类型,设置为JSONP方式
                jsonp : 'callback', //指定一个查询参数名称来覆盖默认的 jsonp 回调参数名 callback
                jsonpCallback: 'handleResponse', //设置回调函数名
                data : {
                    q : "javascript",
                    count : 1,
                    city:'北京'
                },
                success: function(response, status, xhr){
                    // console.log('状态为:' + status + ',状态是:' + xhr.statusText);
                    // console.log(response);

                    var group = response.hourly_forecast;

                    console.log(group,111111111)
                    console.log(group.length,222222222222)

                    //拼接字符串
                    var str = '';
                    //对数据做遍历,拼接到页面显示
                    for(var i=0;i<group.length;i++){
                        str += '<div class="item">'+
                                '<div class="item-title">'+ group[i].date +'</div>'+
                                '<div>'+
                                '<span class="item-content">'+ group[i].hum +'</span>'+
                                '<span class="item-content">'+ group[i].pop +'</span>'+
                                '</div>'+
                                '</div>';
                    }
                    //放入页面的容器显示
                    $('#container').html(str);

                }
            });
        });
    });

    function handleResponse(response){
        // 对response数据进行操作代码
        alert("jsonp success!");
    }
</script>
</html>


jquery中ajax处理跨域的三大方式


一、处理跨域的方式:

1.代理

2.XHR2

HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问。但ie10以下不支持

只需要在服务端填上响应头:

header("Access-Control-Allow-Origin:*");

/*星号表示所有的域都可以接受,*/

header("Access-Control-Allow-Methods:GET,POST");

        

3.jsonP

原理:

 ajax本身是不可以跨域的, 通过产生一个script标签来实现跨域。因为script标签的src属性是没有跨域的限制的。

其实设置了dataType: 'jsonp'后,$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议。JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。

 ajax的跨域写法:

(其余写法和不跨域的一样):

比如 


设计中该如何运用材质?

资深UI设计者

在很多设计作品中,我们不难发现对于材质的运用是十分广泛的,合理地运用材质可以很大程度地提升作品的质感、细节感!但是相反,如果使用不得当它也可以毁掉一个原本不错的作品,很多人对于材质的理解存在着一定局限性,那么本期内容:设计中材质有哪些运用形式?应该如何合理地运用材质?

材质运用的误区

很多人对于材质并不陌生,但是每次使用后最终结果总是差强人意,这里首先要说的就是材质运用的几个常见误区:

  • 误区一:材质种类用的越多越好,这是很多人容易走进的一个误区,材质的运用要结合画面整体,运用材质的目的是提升设计作品的出彩度,而非刻意使用,过多不同形式的材质会使得画面杂乱。
  • 误区二:不了解材质所传递的信息,其实不同形态的材质所传递的信息是不同的,有些材质也会存在一定的使用局限性。
  • 误区三:一味地追求材质表现,而忽略了主体,材质在很多时候只是辅助画面,提升整体细节感的一种手法,不能因为过度强调材质而抢了主体。

那么应该如何合理地运用材质呢?

背景添加材质

在日常工作中,背景添加材质、肌理的手法是很常用的,但是表现手法上也是有所不同的,表现形式一:将材质、肌理作为背景形象的一部分,也就是将材质做得足够明显,这么做的目的是丰富画面视觉层次变化,增强画面整体对比,比如我们常见的:

通过对比不难发现有无材质对于整体的影响,同样的构图,没有材质变化的画面给人一种很单薄、视觉形象不够鲜明的感觉,但是通过添加材质、肌理,画面整体的丰富度大大提升,背景画面的变化增强,通过材质的变化,也使得主体的视觉形象也更加鲜明;将材质作为背景的组成部分,一定要切记时刻围绕主体展开,主体的位置是不可撼动的。

表现形式二:将材质、肌理作为画面视觉中相对较弱的表现形式,也就是做得不明显,缩小看几乎没有,正常看的情况下又有一定的变化,这种表现形式目的在于增加画面细节感,使得画面不会因为缺少变化而略显单调,比如:

这种表现手法放小了看对于画面的影响并不大,但是如果 1:1 正常比例看,有材质的画面会给人一种细节感丰富、画面充满不同层次的变化感受,这样带给作品更多的可塑性,使得画面给人的视觉感受更深刻,同时也起到了一定的丰富画面的作用。

文字添加材质

对于在文字中叠加材质在一些作品中是很常见的,同样的文字,给予不同的材质也会呈现出不同的视觉感受,更多的目的是提升文字与整体形象的契合度,增强整体视觉冲击力,比如:

材质在很大程度上可以提升文字的立体形象,使得文字在整体的视觉形象更加鲜明,但是对于材质的运用也要做到有所选择,每种材质所传递的视觉信息都有所不同,要让材质与文案、主题相契合才能将材质的效果发挥得淋淋尽致,这一点很重要,比如:

这里只考虑材质对文字的影响,首先我们解读文字「第一战场」,让我们首先联想到的就是破损、狼藉、金属等等,那么在给这一文字添加材质时我们就要结合主题;上面两种的材质分别是木纹和大理石,给人的感觉是太过干净、简约,与战场主题不相符,所以说材质使用不得当,而后面两个的材质分别是破损的石灰墙以及金属,就能在很大程度上加强「战场」这一主题的视觉形象,在视觉上属于强调的作用。

材质使用技巧

材质的选择和使用也是有一定技巧可言的,这里首先要说下:当我们想要使用材质时,应该如何选择呢?

结合整体风格选择,比如画面整体偏简约、干净的感觉,我们就可以尝试:大理石、木纹、石灰墙、花纹、木纹等等;再比如想要炫酷效果,那么我们就可以尝试:金属、破损墙壁、石头等等,也就是说尽可能让材质本身的风格偏向画面整体风格,这样可以让材质更加融合画面,不会给人一种很突兀、刻意的感觉。

结合产品选择,一切的手法、技巧都是要服务于产品、主体的,结合产品选择材质也是很常用的;比如一些化妆品海报,我们可能用到的材质会有:水、植物、大理石、木纹或者产品本身所固有的材质等等,目的是凸显产品的美观、功效,让用户能够在背景及产品之间产生共鸣、联想,这样也能起到对产品的强调辅助作用。

关于使用:通常找到合适的材质后,会锐化一下,目的是增强材质的质感,然后会用不同的图层模式去试,(一般情况下会用「正片叠底、滤色、叠加、柔光的模式」)以便找到最佳的使用形式;当然如果只用材质的纹理感觉,不用材质本身颜色的话,也可以去色后再去选择图层模式。

案例演示

结合本期内容,做了一个简单的化妆品的海报,充分利用材质的不同表现形式,用分析的角度去观察,第一步,通过运用 C4D 软件,做一个简易场景:

简易场景搭建完成,因为只是黑白稿的场景,那么接下来就要通过分析产品确定材质的选择:

产品的感觉是干净、简约的,那么就围绕这个整体感觉,展开材质的贴合及制作,这里我选择纹理相对不复杂的大理石为主要材质,结合用到木纹、金属作为丰富画面的材质:

这样一个画面给人的感觉是轻飘飘的,因为没有影子,没有将画面做出光感的效果,而且整体缺少色感,这里我选择把原本无色的材质换成有色材质,目的是增加画面整体色感,其次将投影、倒影做好,光源定在左侧,最终呈现的效果:

最终的呈现几乎是用不同材质做出来的一个场景,虽然这里用到了很多不同颜色的材质,但是最终用到的材质属性只有三种:大理石、木纹 、金属,而且依旧贯彻干净、简约的视觉感受,将同种材质的不同形态运用在一起会给人视觉联系的作用,不会给人一种杂乱的感觉!

总结

材质对画面是辅助、丰富、增加细节感的作用,合理地运用材质可以提升设计作品的视觉层次、增强画面质感!但是不管是哪种形式的材质,都要做到切合主题,要让设计的每个元素做到有理有据,切记不要因为材质的过于凸显而抢了主体。

文章来源:优设    作者:

又发现一个!摄影师出品的免费可商用图库!

资深UI设计者

大家平常都习惯去哪些免费图库网站找图呢?虽然有一些老牌、图片数量充足的图库,像是 Unsplash、Pixabay、Pexels,但后来经过人工智能和大数据学习的搜寻工具更深得我心,也能通过算法将质量较低、不适合使用的图库图片先排除掉,大幅节省搜寻时间。如果在寻找图片素材时想尽量避免使用和其他人重复的内容,试试看由摄影师亲自拍摄的小型图库或许是个不错的方法。

往期回顾:

本文要介绍的「DesignersPics」是一个持续更新、每个月都会加入新相片的图库,由摄影师 Jeshu John 亲自拍摄修图,收录各种类型的相片,包括建筑、商业活动、概念、美食和饮料、大自然、人物、科技等等,照片数量不多,但有一定的独特性。

DesignersPics 的相片都具有非常高的分辨率和画质,可自由下载用于个人或商业用途,例如网站、投影片、包装、标签、HTML/PSD 模版、T-Shirts、广告横幅、商店或办公室装饰等等,无需标示出处来源。

DesignersPics

网站链接:http://www.designerspics.com/

使用教学

开启 DesignersPics 从右上角的「Categories」选择要浏览的相片分类,或是直接从首页以日期方式浏览,网站亦提供搜寻功能,不过图库本身相片量不多,浏览上不会耗费太多时间。

每张相片会有预览图、标题和免费下载的按钮。

进入图片页面,还能看到图片尺寸、大小等等信息,点选「Download」就能下载取得 .jpg 格式的图片文件。虽然 DesignersPics 没有硬性规定必须标示作者来源,但如果你喜欢可以协助推广。

值得一试的三个理由:

  • 由 Jeshu John 亲自拍摄,每个月都会更新加入新的相片素材
  • 相片都具有大尺寸及高画质,免费下载取得 .Jpg 格式

  • 可自由使用于个人或是商业用途

文章来源:优设    作者:Pseric

用户行为分析和以用户为中心的设计

ui设计分享达人

用户行为分析,认识用户满足用户最直接要求为设计中心

用户行为分析

一、了解用户需要什么
二、遵循用户的习惯
1、用户的生活背景及文化背景
2、用户的生理状况与需求状况
2、以“自我为中心”的心理
二、颠覆用户的习惯
1、改变一些有独特性的页面设计
2、发展中的知识和技术


用户行为是指用户在使用产品时的行为,针对网站而言,就是用户在进入网站后所有的操作。网站用户行为分析,就是在获得网站王文量基本数据的情况下,对有关数据进行统计、分析,从中发现用户访问网站的规律,并将这些规律与产品目标及策略相结合,从中发现目前网站存在的问题,为进一步改善网站,满足用户需求,提升用户体验提供依据。


常见的用户分析内容包含以下几个方面内容:

(1)用户在网站的停留时间、跳出率、回访率、新用户、回访次数、回访相隔天数;

(2)注册用户和非注册用户,分析二者之间的浏览习惯;

(3)用户所使用的搜索引擎、关键词、关联关键词和站内关键词;

(4)用户选择什么样的入口形式(广告或者网站入口链接)更有效;

(5)用户访问网站流程,用来分析页面结构和网页覆盖数据;

(6)用户在页面上的网页热点图分部数据和网页覆盖图数据;

(7)用户在不同时间段的访问量情况等;

(8)用户对于网站的设计及字体配色的喜好程度等。


通过研究发现,80%的用户仅仅使用了软件20%的功能,而那些没用的功能不仅浪费开发时间,也使软件更加难以使用。一个成功的软件应该是简练精干的,可以单独职能化的化解决的单个问题,要以满足用户最直接要求为 i设计中心。

很多网站往往为了满足不同用户的需求而增加功能,增加的功能必然需要再界面中用视觉呈现出来,这就会使网页内容越来越多,很多的功能掺杂在一起,如果不经过过滤,必然会违背原来阅读的初衷,所以每一个功能的增加都要慎重。


用户对于互联网功能需求也和对软件的功能要求一样。既喜欢简单的,也喜欢复杂的。而且用户的体验需求也会随时随地的发生变化。这里的复杂不是指很难用、流程超级复杂、容易出错的用户体验,而是指丰富的功能。


首先如何让用户体验更简单呢?当然将复杂的功能去除是最好的,如果实在无法去除某个复杂的功能,那就应该将其隐藏。因为大多数情况下,不常用的功能要比经常使用的功能占据更多的空间。


真正好的用户体验其实是给用户所需的任何功能,为用户设计一款“复杂”的产品,并将这款产品从表现上简化,让基础功能操作简化,给扩展功能保留使用入口即可。这个设计思路最具代表性的例子就是Microsoft Office和Adobe

系列产品。

              


用户的需求并不是一层不变的,短期内用户会因为某种强烈的需求要一个产品。随着市场和行业的不断发展,用户对于一个产品的评价也会随之发生变化。例如肯德基刚进入中国市场,被人们认为是一种的象征,小朋友以吃一次肯德基为荣。随着经济条件的发展,人们对于肯德基的体验就完全不一样了,热量过高,不利于健康。这是一个很典型的对一个产品评价的变迁的过程。


用户的期望值会因为因素而发生变化,有的来自外部的环境,有的来自产品自身,有的来自用户成长。这些影响期望值的因素都会相辅相成的影响。有的时候不是我们的体验或者产品变了,而是用户发生了变化,所以用户体验的设计,除了要考虑产品本身以外,还要考虑用户所需要的。


用户通常会根据个人喜好做事,这就是习惯。习惯没有好坏之分,关键要看根本的是什么。从用户体验的角度来说,任何产品都可以分两种:遵循现有用户习惯的产品和颠覆用户习惯的产品。


在设计网站时可以在技术上创新,在业务模式上改变,也要在以下几点上遵循用户的习惯。


生活和文化背景是必须要遵循的习惯。想去颠覆或是磨灭一个群体甚至是民族的习惯,基本上会付出惨重的代价。例如使用红色表现喜庆,白色表现悲伤,是中华民族几千年的一种传统习惯。如果想去改变这个习惯,使用其他颜色肯定起不到好效果。比如:可口可乐官网就是用红色做的主色调,而红色也与“可口可乐”品牌主色调相统一,点缀少量黄色,非常符合中国的传统文化,也更容易使中国人接受。


在设计网站页面时,还要考虑到网站用户群体的基础属性,例如年龄层、身体承受力等。可以将页面中的文字和图片做放大处理,使老年人可以清楚的看到内容。比如一些老年网站,会采用大号字体,强对比色便于阅读,而且在设计的时候也不会使用过多的色彩,虽然整体视觉可能显得简陋不够丰富,但是充分的考虑了老年人人群的特点。


人在评定事情好坏的时候,通常喜欢以自我为中心,所以用户体验设计时,必须满足用户这种需求。使每个用户可以体会到以“自我为中心”的优越感,这样用户就会成为最忠实的客户。例如很多人沉迷于网游就是因为在现实生活中会受到各种各样的限制,而无法实现真正的以自我为中心,而在网游的世界里却可以完全实现。



在设计网站时,设计师通常会根据网站内容把网站划分为不同的区块,然后在分别进行美化。设计师在思维定势中 自我感觉良好,一旦突破了思维定势就会有新的收获。作为用户体验的设计师来说,有下面两个方面可以颠覆。


 在设计网站时,有很多页面都具有独特性,例如注册页、登录页和搜索页。这些页面用户只会访问一次或者几次,而且这些网页本身也是在网站发展的同时逐步完善的。所以,在用户体验的设计中,这些习惯就可以颠覆的。设计师可以根据个人的喜好对这些页面进行设计、优化和修改,而不会影响用户的习惯。


在网站设计中需要结合当前的潮流趋势和的技术来表现网站,这样才能给用户带来全新的体验。页面中流畅恶化便捷的交互应用,可以给用户带来良好的体验。

尊重用户秀感可以快速让用户接受网站,同时也会由于尊重了用户的习惯而减少产品对用户的刺激,会使得用户很难成为网站的忠实用户。另一方面,如果不尊重用户习惯,用户可能很难马上接受。所以在用户体验设计时,要根据网站具体情况自我权衡。

最好的办法就是在网站核心用户体验不变的基础上,增加新功能、设计风格逐步变化、进行网站整体融合。

转自:-zhan k


2020潘通年度流行色经典蓝出炉!附配色方案

ui设计分享达人

2020潘通流行色




一觉醒来,2020 年潘通年度色就这么发布了。

2020年年度潘通色:「经典蓝」

这款被命名为为「经典蓝」(Classic Blue)的色彩沉稳耐看,隽永优雅,按照潘通官方的说法,「经典蓝」仿佛暮色四合时的天空,宁神静心,让人驻足。「经典蓝」是一种稳固可靠的色彩,给人确信感,抚慰着每一个期待稳定者的心灵。

为什么会选择这样一种蓝色,潘通色彩研究所的执行董事 Leatrice Eiseman 在潘通官网上,予以详细的解释。

解读「经典蓝」

「我们生活在一个亟需信念和信任的时代。潘通 19-4052 经典蓝 ,这种色彩正是自信和恒久的外化体现,这种坚实可靠的蓝色调,更能与人产生深层的共鸣,令人心安。一望无际的蓝色能够唤起人类对于广袤无垠夜空的无限遐想,经典蓝鼓励着我们透过显而易见的事实,拓展思维,放飞想象。

经典蓝敦促着我们更加深入地思考,开阔视野,进行更加深入的交流。」

——Leatrice Eiseman 潘通色彩研究所执行董事

从色彩心理学的角度上来看,蓝色色相本身有着信任、信念的含义,也是的色相。在此之前,潘通曾经多次选择蓝色作为年度色, 2000 年的时候选择天蓝色(Cerulean),在 2005 年的时候则选择了蓝绿色(Blue Turquoise),2008 年的年度色叫鸢尾蓝(Blue Iris),2016 年的年度色则是静谧蓝(Serenity)。

相比于这4种蓝色,「经典蓝」更为沉静稳重,没有一点攻击性,也不显得沉重,轻松而易于互动。

「经典蓝」无疑是一个略显保守,但是非常贴合当下语境的色彩。它充满了确信感,让人觉得安全,屏蔽了焦虑。同 2019 年充满前进感的「活力珊瑚橙」相比,「经典蓝」更加内敛和笃定,悄无声息地增加每一个的信心。

除了发布这一年度色彩之外,潘通色彩研究所还专门制定了5套配色方案,这些配色方案应该会在接下来的 2020 年,得到更加广泛的应用。

「经典蓝」的5套官方配色方案

沉思

这是一套舒缓的配色方案,凉爽的蓝色调和同样柔和的暖色组合到一起,给人以沉静的感觉。


呼吸

这套名为呼吸的配色方案当中,加入了更为经典的黑白色,选择了对比更加强烈、更加富有活力的搭配方式。这样的色彩搭配更容易唤起观者的幸福感,让你的设计更加具有田园牧歌的气息。

沙漠暮色

「经典蓝」的灵感来源之一就是夜幕降临时的天空。而这套名为沙漠暮色的配色方案,就与此相关。充满金属质感的潘通色更能够凸显「沙漠」的闪亮质感,而恰为对比色的「经典蓝」让这套配色方案优雅无比。

异域风情

这套配色方案比起之前的配色更加丰富,更显混搭,仿佛加入了天然的调味料。这种健康而自我的色彩搭配方式,让人仿佛身在异域,不同于此地的文化,迥异与此时的感觉,独特却令人着迷。


非传统

打破常规的桎梏,选择异乎寻常的色彩搭配,而足够传统的「经典蓝」恰恰构成了这种搭配方式当中,作为基础的底色。这套配色方案指向时尚,突破规则,如同小品,有趣而俏皮。

「经典蓝」的9套精选配色方案

为了更加方便线上的设计师来使用这些配色方案,优设的小编从官方提供的这些配色方案当中,精心挑选了 9 套适合进行数字设计的配色方案,并且标注上了相应的 HEX 值便于精准取色,请尽情取用:


转自:站酷——hicatherine86 




Emscripten教程之emcc编译命令

seo达人

语法


emcc [options] file ...

这个输入文件file,既可以是clang可以编译的C/C++语言,也可以是二进制形式的llvm bitcode或者人类可读形式的llvm assembly文件。

参数

大部分clang或者gcc的选项(option)都是可以工作的,比如:

# 显示信息 emcc --help # 显示编译器版本信息 emcc --version

如果想看当前Emscripten中clang版本支持的全部选项列表,可以直接使用命令:
clang --help.

emcc修改的或者emcc中新的选项列在下面:

首先是一些编译优化flag,它们-O0,-O1,-O2,-Os,-Oz,-O3。

-O0:
不进行编译优化(这是默认情况)。当你刚开始移植项目是推荐使用它,因为它会包含许多断言。

-O1:
简单优化。推荐你在既想缩短编译时间又想编译优化时使用。它毕竟比-O2级别的优化编译起来快多了。它会进行asm.js和llvm的-O1进行优化,它会relooping,会删除运行时断言和C++异常捕获,它也会使得-s ALIASING_FUNCTION_POINTERS=1。

想要C++异常捕获重新可用,请设置:-s DISABLE_EXCEPTION_CATCHING=0。

-O2:
和-O1类似,不过多了JavaScript级别的优化以及一些llvm -O3的优化项。当你想发布项目的时候,推荐使用本级别优化。

-O3:
和-O2类似,不过比-O2又多了一些JavaScript优化,而且编译时间明显比-O2长。这个也推荐在发布版本的时候使用。

-Os:
和-O3类似,不过增加了额外的优化以减小生成的代码体积,代价是比-O3性能差一点。-Os优化会同时影响llvm bitcode 和JavaScript文件的生成。

-Oz:
和-Os类似,不过进一步减小了代码体积。

-s OPTION=VALUE
传给编译器的所有涉及到JavaScript代码生成的选项。选项列表,请见settings.js

对于某个选项的值,不仅可以直接在emcc命令行里面设定,也可以把他们写成json文件。比如下面,就是将DEAD_FUNCTIONS选项的值放到了path/to/file文件里,emcc里面传这个文件的路径。

-s DEAD_FUNCTIONS=@/path/to/file
note: 1、文件内容可以是:["_func1","_func2"]; 2、文件路径必须是绝对的,不能是相对的。

-g:
这是保留调试信息flag。

  • 如果只是编译到bitcode,那就和clang和gcc中的-g一样。
  • 如果是要编译到JavaScript,-g就等于-g3。

-g<level>
控制打印的调试信息数量,每一个level都是在前一个level的基础上编译的:

  • -g0:不保留调试信息。
  • -g1:保留空格,不压缩。
  • -g2:保留函数名。
  • -g3:保留变量名,与-g同。变量名一般不是必须编译后保留的,但是如果保留了,可以推断变量的目的,对吧。
  • -g4:保留llvm 调试信息,这是能调试的最高级别。
note:
优化级别越高,编译时间越长

--profiling:

--profiling-funcs:

--tracing:
启用Emscripten的tracing API。

--emit-symbol-map:

--js-opts<level>:
允许JavaScript优化,有两个值:
0:不允许JavaScript优化器允许;
1:使用JavaScript优化器。
通常用不到我们设置这一项, 因为设置-O后面的level的时候,这个项就能顺便取到一个合适的值。

note:
有些选项会重写这个flag的值,比如EMTERPRETIFY, DEAD_FUNCTIONS, OUTLINING_LIMIT, SAFE_HEAP 和 SPLIT_MEMORY会将js-opts=1,因为他们依赖js优化器。

--llvm-opts<level>:
启用llvm优化。它的取值有有:

  • 0:不使用llvm优化
  • 1:llvm -O1优化
  • 2:llvm -O2优化
  • 3:llvm -O3优化

和--js-opts<level>一样,通常用不到我们设置这一项, 因为设置-O后面的level的时候,这个项就能顺便取到一个合适的值。

--llvm-lto<level>:
启用llvm 连接时 优化。可以取值0,1,2,3。

--closure <on>:
运行压缩编译器(Closure Compiler),可能的取值有,0,1,2:

  • 0:是不启用压缩编译器。
  • 1:启用。
  • 2:启用。

--pre-js <file>
生成代码前,指定一个要把内容添加进来的文件。

--post-js <file>
生成代码后,指定一个要把内容添加进来的文件。

--embed-file <file>
指定一个带路径的文件嵌入到编译生成的js代码里。路径是相对于编译时的当前路径。如果传的是一个目录,则目录下所有文件的内容都会被嵌入到将来生成的js代码中。

--preload-file <name>
异步运行编译代码前,指定一个预加载的文件。路径是相对于编译时的当前路径。如果传的是一个目录,则目录下所有文件的内容都会被预加载到一个.data文件中。

--exclude-file <name>
从 –embed-file and –preload-file后面的目录中排除一些文件,支持使用通配符*。

--use-preload-plugins
告诉文件打包器当文件加载时,运行预加载插件。它用来执行诸如使用浏览器解码器解码图片和音频等。

--shell-file <path>
指定要生成HTML的模板文件。

--source-map-base <base-url>

--minify 0
等于-g1。

--js-transform <cmd>
优化之前,生成代码之后,设定这一条命令。这条命令可以让你修改JavaScript代码。之后,编译器会将修改的和未修改的一起进行编译优化。

--bind
启用bingdings编译源代码。bingings是Emscripten中连接C++和JavaScript代码的一类API。

--ignore-dynamic-linking
告诉编译器忽视动态链接,之后用户就得手动链接到共享库。

--js-library <lib>
定义除了核心库(src/library_*)以外的js库。

-v
打开详细输出。
这个设置为把-v传给clang,并且启用EMCC_DEBUG生成编译阶段的中间文件。它也会运行Emscripten关于工具链的内部的完整性检查。

tip: emcc -v是诊断错误的有用工具,不管你是否附加其他参数。

--cache

--clear-cache

--clear-ports

--show-ports

--save-bc PATH

--memory-init-file <on>
规定是否单独生成一个内存初始化文件。取值包括0和1.

  • 0:不单独生成.mem文件。
  • 1:单独生成.mem文件。

-Wwarn-absolute-paths
启用在-I和-L命令行指令中使用绝对路径的警告。这是用来警告无意中使用了绝对路径的。在引用非可移植的本地系统头文件时,使用绝对路径有时是很危险的。

--proxy-to-worker

--emrun
使生成的代码能够感知emrun命令行工具。当运行emran生成的应用程序时,这样设置就允许stdout、stderr和exit(returncode)被捕获。

--cpuprofiler
在生成的页面上嵌入一个简单的CPU分析器。使用这个来执行粗略的交互式性能分析。

--memoryprofiler
在生成的页面上嵌入内存分配跟踪器,使用它来分析应用程序Emscripten堆的使用情况。

--threadprofiler
在生成的页面上嵌入一个线程活动分析器。当进行多线程编译时,使用它来分析多线程应用程序。
--em-config

--default-obj-ext .ext

--valid-abspath path
设置一个绝对路径的白名单,以防止关于绝对路径的警告。

-o <target>
编译输出的文件格式。target可以取值为:

  • name.js:JavaScript文件;
  • name.html:HTML+js文件。把js单独生成是为了减小页面加载时间。
  • name.bc:llvm bitcode。这是默认值。
  • name.o:和上面一样。
note:
如果你用了--memory-init-file,则还会从js文件中再单独分出一部分代码为.mem文件。

-c
生成llvm bitcode代码,而不是JavaScript。

--separate-asm
把asm.js文件单独生成到一个文件中。这样可以减少启动时的内存加载。

--output_eol windows|linux
规定生成的文本文件的行尾,如果是–output_eol windows,就是windows rn行尾,如果是–output_eol linux,则生成Linux行尾的文本文件。

--cflags

环境变量


emcc会受到几个环境变量的影响,如下:

  • EMMAKEN_JUST_CONFIGURE
  • EMMAKEN_JUST_CONFIGURE_RECURSE
  • EMCONFIGURE_JS
  • EMCONFIGURE_CC
  • EMMAKEN_CXX
  • EMMAKEN_COMPILER
  • EMMAKEN_CFLAGS
  • EMCC_DEBUG

这几个里面比较有意思的是EMCC_DEBUG。比如,如果你在编译之前设置set EMCC_DEBUG=1,那么编译的时候会把编译过程的调试信息和编译各个阶段的中间文件输出到一个临时目录,这算是给开发者提供一些编译期间的帮助或者说调试信息吧。


Emscripten主题系列文章是emscripten中文站点的一部分内容。
第一个主题介绍代码可移植性与限制
第二个主题介绍Emscripten的运行时环境
第三个主题第一篇文章介绍连接C++和JavaScript
第三个主题第二篇文章介绍embind
第四个主题介绍文件和文件系统
第六个主题介绍Emscripten如何调试代码

界面该不该加弹窗?来看高级设计师的总结

资深UI设计者

这几天在工作中处理了一个历史遗留问题:弹窗适配,几经折腾终于落定发包。于是我也趁着这个机会把弹窗体系梳理研究了一遍。

我们常见的弹窗有对话框,提示框,有时候在需求沟通中经常会听到产品同学说,给这里加个弹窗,那里加个提示框吧。实际上,这个弹窗到底该不该加?这个弹窗承载的是提示说明文字内容,还是需要引导用户下一步操作?接下来我们从弹窗的属性来聊聊我们的弹窗到底在什么时候加比较合适?用什么形态展示体验会更好?

弹窗体系:模态与非模态

模态弹窗:是指在用户任务中,终止了用户的上一步行为。也就是说,这个模态弹窗必须要用户操作才可以进行下一步动作。所以在产品设计中,我们通常会用模态弹窗引导用户去做我们要他做的操作。

常见的模态弹窗有这几种:对话框、动作栏、浮层。

对话框:对话框主要是给用户提供选项、相关的操作。另外,在一些对话框中,也可以展现图片、头像、步骤图、其它输入项等。

动作栏:常见的动作栏一般会出现屏幕下方,比如选择某个内容时候,出现的选择。

浮层:弹出窗口,浮动于顶层窗口,气泡。

非模态弹窗:是指不强制用户操作,他的作用相当于内容信息提示,他的出现不打扰用户的当前操作,并且有时间限制,在一定时间里能自动消失。比如「xxx 功能已更新哦」,这种提示是不需要用户点击操作,让用户看到就可以了。

常见的非模态弹窗有这几种:toast/hud、snackbar、notice(通知)

toast/hud:iOS 用户更习惯于在中间感知反馈信息,通常在信息提示完 3 秒左右后会消失,安卓通常会出现在屏幕顶部或者下部,不会遮挡主体内容。需要注意的是 toast 只有文字,hud 是可以带有图标的。

snackbar;可以理解为加强版的 Toast

notice:系统消息、通知推送,也是不干扰用户行为,有消失时间,是非模态的弹窗。

什么场景下使用什么弹框

了解完弹窗体系后,我们就可以针对具体场景来看产品同学说加个弹窗到底合适不合适?我们可以从下面的几个使用场景来看用什么样的弹窗合适。

1. 重要打断用户操作

在一些重要操作,避免用户操作失误。不过目前很多人都觉得这类弹框有利有弊,有的地方出现得不合时宜,打断了用户的使用状态。所以在设计这类弹框时要非常谨慎,得通过多研究确认是否有必要出现。

对话框相对来说比动作栏更重要,因为在视觉中心,更能强烈引起用户的重视,对于十分重要的内容需要打断用户上一步任务的,采用对话框的弹窗,对于不是特别重要信息露出又需要终止用户上一步动作的情况下,一般采用动作栏弹框。

2. 定制化广告弹窗

如功能更新、升级、优惠券弹窗。这一类一般是强制用户看到的,要展示出与众不同的特色,在视觉上比较突出,会使用模态的弹窗浮层形式。

3. 给予一定提示

比如提示用户状态、信息、反馈,确保用户知晓自己所处的状态,并可以做出相应的措施。一般使用非模态的弹窗。

4. 用户操作反馈

出现在用户操作完之后的反馈,比如提醒用户页面正在加载中、保存成功、已删除、已刷新等等。

可以不用弹窗的反馈例子:完成页

比如已支付成功、下载完毕、签到成功,这一类是告诉你上个动作结束了,下一步不需要进行引导了,这种反馈大多数都不采用弹窗形式展现了。

需要注意事项

1. 层级关系

弹框是内容和导航的补充,用于通知、操作菜单、成功或加载状态的 toast,他是写在蒙层上面的一层内容。

2. 适配方式

下面我们需要了解的是这几种弹窗在开发那的实现形式。我们可以理解为 2 种形式:

一种是开发直接用系统的接口,缺点是具有不可定制,形式美观度不够好。

另一种是开发用代码会单独写出一个模态弹框系统,这套系统与整体设计语言具有一致性,可以复用在各个任务中,可以定制化设计。

需要注意的是,代码写出来的模态样式要考虑在不同机型的适配情况,考虑不同机型的边界。这个适配也有两种实现形式,一种是固定宽高尺寸,展示在不同机型尺寸中,另一种是常用的等比例缩放。这个就需要开发与设计进行密切的沟通,能尽量合理地在不同机型展现更加合适,避免出现极限的情况。

我们是这样操作的,为了避免尺寸比例混乱的情况,会设计一个弹窗的宽高尺寸范围,开发同学代码写出的这套弹窗的适配在各个机型中,是在一定缩放比例下,适用各个不同情况下的视觉展示。这套弹窗可以调用在首页引导、升级等各个页面的弹窗设计中。

文章来源:优设    作者:咏舍

设计师要懂的“产品导流”背后知识点。

ui设计分享达人

设计师不仅要低头画图,也要了解“图”背后的逻辑和需求本质 。嗯,下面用直白的语言跟大家聊一波相关知识点。




说到产品导流,大家都不陌生。



身为设计师,应该经常听到产品同学提需求:“在这里给XX功能加个入口吧”,“这个宣传新产品的banner可以再大一些吗”,“这个场景可以宣传下我们的新功能诶”…


很多设计师在不了解背景的情况下往往内心是排斥的,心想怎么老是在犄角旮旯里加这么多小广告啊,都不关心用户体验的嘛,balabala...



但是有谁在吐槽时,深究其背后的原因呢,举起小爪子让大牙康康。比如:什么是产品导流?为什么需要产品导流?它有哪些的形式?如何做效果好又能兼顾产品体验呢?



最近正好在搞相关的事情,所以撸一篇文章,分享一波相关思考。





什么是产品导流? 



“产品导流”指的是:一款产品采用某种形式,增加对另一款产品/功能的曝光,使自己的用户群体(流量)去使用或探索另一款产品/功能。



眉头一紧,感觉上面的描述有点拗口,善良的牙尝试着用大白话,把导流和被导流的关系,分为两种形式解释下:1.父子关系;2.兄弟关系。

1.父子关系


画风是:“爸爸,大腿借我一抱吧”,比如:“抖音”里增加“多闪”入口,“微信”里增加“微视”入口,通过自家体量大的产品(爸爸)给自己导流。



2.兄弟关系


画风是:“外面环境恶劣,是好兄弟,就互导一下吧”,比如:京东的会员可以享受爱奇艺的会员福利,同辈之间互相导流。



所以,这么说就好理解什么是产品导流,和它们之间的关系了吧。






产品为什么需要导流? 


产品之间导流的目的,大致分为两种:1.获得新增;2.企业生态。




1.获得新增



试想你费劲巴拉的搞了个新产品,没人知道,也没人来用,就算你产品做的再妖娆,是不是也白搭,更不用说后续的商业变现之类的。


所以,这个时候如果你有一个相对成熟的产品(爸爸)大腿,让它给你导流,实现一波冷启动,是顺利迈过第一个坎儿的手段。


当然,在目前激烈的竞争环境下,不仅是新产品需要导流,扩大规模和获得新增流量,是每一个互联网企业里产品或运营同学OKR中必不可少且另他们头秃的一项指标。



所以,不管是新产品,还是相对成熟的产品,都需要通过导流的手段,来获得新增用户。





2.企业生态


“产品导流”除了为了获得新增,还有就是为了企业生态的体验闭环。


做成一款产品的公司很牛逼,但是如果能够持续做出一系列牛逼产品的公司,一定有成功的基因,或者有一套做事儿的逻辑。


比如:亚马逊的飞轮效应,要想形成飞轮,打造自己的生态,业务上就得有自己的闭环,并且闭环上的每一个步骤都可以为其它步骤助力,其次就是以第一个飞轮作为根据地,拉动周边其它业务,形成第二个或者更大的飞轮。


这个时候,就需要各个业务线之间的互通及联动(互相导流)了。






比如,阿里也是在打造自己的生态,产品之间相互赋能和联动,一旦建立起来这些基础设施后,壁垒和护城河就非常坚固。



整体来看,“产品导流”不仅有助于新产品获得冷启动,还有助于相对成熟的产品扩大规模,同时从整个企业生态来看,矩阵产品的互相导流,协同发挥优势,也有利于打造体验闭环,建立企业壁垒。





产品导流的形式有哪些? 



目前,市面上导流形式大致有以下几种:1.场景化导流;2.会员制捆绑;3.固定入口扶持;4.广告位推荐。


1.场景化导流


场景化导流,翻译成大白话就是,让导流的过程更加无缝衔接。


这种做法,能兼顾用户体验,同时对导流量也更有利,一般用于“功能”层面的互通。比如,用户正好需要XX产品或功能,你见缝插针的增加导流入口,同时功能和设计元素也跟母产品保持一致,这样用户不会觉得干扰或反感。


类似这种做法的产品比如:QQ&微云,抖音&剪映;视频号&公众号...


QQ&微云


我们用QQ聊天时,好友之间总会有一些分享文件的行为,有“分享”就有“接收”,有“接收”就有“保存”的诉求,在这种场景下,QQ聊天页面里用户长按当前“文件”,就可以将文件保存到“微云”上。






除此之外,QQ首页点击左上角的侧边栏,能看到一列与“我”相关的功能入口,其中有一项是“我的文件”,点击进去后就能看到“我”在QQ里消费过的历史文件。


同时还有“微云”小程序的入口,点击直接跳转至微云小程序(做的很服帖,跟自体脂肪填充似的,导流过程不会让用户感到突兀)。




除此之外,微云作为基础的云存储能力,也在跟腾讯系的QQ音乐互通,满足用户将下载的歌曲保存到“微云”。





这么做,不仅满足了QQ音乐用户的存储诉求,还提升了QQ音乐的登录率(用户想要使用音乐网盘,必须先登录),同时增加了QQ音乐用户粘性(用户一旦在一款产品上存下自己的东西,就会存在迁移成本),最后还为微云带来了新增用户(更多QQ的用户使用微云进行存储),扩大其规模。


这样的互通/导流手段,就实现了产品间1+1大于2的效果。





抖音&剪映


刷抖音的兄弟们应该经常见很多视频下面有一个小标签,叫“剪映-抖音出品”(意味着博主的那条短视频是用剪映做的)。


很多人看到好玩好看新奇的短视频,都会觉得真香我也要剪同款,因此抖音就是这种恰到好处的投喂给你,点击标签,直接跳转到下载页,如果已经安装了的用户,可以直接进行剪同款。




抖音不仅送你出去,还负责接你回来,一条龙服务给你安排(导)的明明白白的。


比如,当你剪辑完成后,就引导你回抖音里分享,毕竟他们不希望你剪完之后保存到本地然后美滋滋去竞品(快手之类的)分享吧。





他们的目的就是,不管你怎么折腾,也逃不出我大字节的手掌。


包括,最近的视频号,发完视频号还能附带公众号的链接,高频带低频,通过公域流量,帮助作者往私域导流(顺便做个广告,快去关注我的视频号:大牙兄,哈哈哈)。





所以微信现在的导流方式是:视频号能够链公众号,公众号能够挂小程序,小程序又能开直播,直播又能去变现。


整体来看,场景化的进行导流,更适合“功能”层面的互通,满足用户和企业的诉求,还平衡了产品体验,相对更加丝滑。





2.会员制捆绑


会员制捆绑,已经成为互联网常见导流+变现的方式了,指的就是用户在你这买了会员,在别的合作产品里也享有它们的特权福利。利用用户“爱占小便宜”的心理,产品间互相导流。


比如我们常见的方式有:88会员、联合会员...

88会员


开过88会员的同学举个爪!好,放下吧,反正我也看不到。


88会员算是阿里生态体系的重要布局了,也就是你开通了88会员,阿里系的很多产品你可以劈着叉去用,而且很划算。


比如,饿了么会员每年108元,虾米每年128元,优酷每年也差不多180元,还不算其它的,这些价格在用户心中已经是锚定价格,加到一起怎么着也大1000了吧,跟88元一比,稳赚不赔啊!






我们来看看88会员里包含什么,各种阿里系的七大姑八大姨的产品都包含进去了,从吃饭、购物、娱乐、旅行再到看病,生活里的方方面面都包含了。





所以,我身边的人开了88会员后,画风是这样的:明明想用QQ音乐听歌呢,不!我是88会员!我要去用虾米!明明想用美团点个外卖呢,不!我要去饿了么!明明我想去爱奇艺看看视频呢,不!我要去优酷看!(不过他们如果想看“淡黄色长裙蓬松的头发”还是得去爱奇艺)。


可以看出,阿里用这套会员体系,把用户死死的框在(导流)自己的产品矩阵中了,产品群们被自己爸爸carry的明明白白的。





联合会员


联合会员跟上面说的88会员有点类似了,只是88是自己企业内产品的互相导流,而很多联合会员是跨公司,跨界整合资源。 

比如,京东的PLUS京典卡,就是跨公司跟别人合作,有和腾讯视频、酷狗音乐、喜马拉雅、携程、爱奇艺的联合会员。 





其实也能看出,京东和其它产品这么搞,也是对阿里系的反击,没有爸爸,只能兄弟之间互相导流,抱团取暖,一致对外了。



3.固定入口扶持


固定入口扶持,一般出现在规模较大的平台级产品上,它们利用自己的流量优势,在固定位置给自己的子孙/兄弟产品们导流。


扶持下一代,努力做到子又生孙,孙又生子,子子孙孙无穷尽也。



比如:淘宝、支付宝、美团,在首页金刚位给自己企业相关产品导流,同时也补足/丰富自己产品的其它场景。






比如,各家的小程序,也是相对固定的入口给自己的产品或第三方产品进行导流,完善自己的产品生态。






4.广告位推荐


广告位推荐的导流方式应该是大家非常熟悉的了,它区别于上面的导流方式的核心点在于一般是产品/活动的介绍,引导安装之类的,形式大致分为:闪屏、 banner、角标、feed流...




闪屏

闪屏指的是用户在使用产品时,打开的第一个启动页。


用它进行导流的优点就是全屏沉浸展示,用户的目光就聚焦到这里了,但缺点是:时间短,如果在短时间内传达不清晰的话,很容易一闪而过,钱就白花了。



所以,闪屏的导流,最好找重叠用户较高的产品,比如,在汽车之家闪屏投个刮胡刀啊,在亲宝宝闪屏投奶粉啊之类的,用户在短时间内好接受好理解。


投放越精准,对产品体验和对广告主的导流效果越好。





角标

角标导流这种形式,在电商类平台搞活动的时候经常见,各种小角标纷纷出来拉客,角标的着陆页一般都是活动H5类型的居多。




这种形式的优点在于能够一直常驻,不像闪屏,闪一下就没了,它只要用户不手动关闭就一直在这杵着。


但对于设计师的挑战就是,如何在小小的区域里,把被导流的产品/活动核心利益点传递清楚,吸引用户点击。

而且,这种形式也要谨慎使用,如果乱八七糟的飚小角标也挺伤害体验的。





Banner


Banner位的导流大家更常见了,一般都是自己家产品/业务,夹杂着第三方广告推广,无限轮播着进行导流,大家都太熟悉了,我就不啰嗦的说了。





Feed流


一般资讯类或者社区类产品,喜欢用这种方式进行导流,因为用户在其产品上的核心操作就是撸Feed。


所以,撸着撸着给用户投喂一个通过算法推荐的广告,然后再把广告包装成跟Feed内容很相近的设计,吸引(pian)用户点进去,从而进行导流。


比如: 知乎、最右、百度、头条 ...




不得不说第二张“最右”的推荐内容,让我不禁抚摸了下自己的胡子。

不过除了最右给我推“大胸妹子”,百度给我推“游戏”,头条给我推“汽车”,难道在他们的算法中,我是个油腻中年男???


看来他们的人工还不够智能,机器还得再学习学习,大牙对你萌hin失望。





总结  


总的来说,“产品导流”不仅有助于新产品获得冷启动,还有助于相对成熟的产品扩大规模,同时从整个企业生态来看,矩阵产品的互相导流,协同发挥优势,也有利于打造体验闭环,建立企业壁垒。


形式大致分为:1.场景化导流,无缝衔接式的体验,让用户在产品功能间丝滑的流转;2.会员制捆绑,低价获得跨产品福利,利用用户占小便宜的心理跨界导流;3.固定入口扶持,平台型产品常用手段,丰富自己产品场景又能给自己小弟带流量;4.广告位推荐,灵活可配形式多变的导流方式(闪屏、 banner、角标、feed流)但搞不好很伤用户体验。



但是,不管什么导流形式,导进来的用户,只有看到满足他们诉求和预期的着陆页才是最关键的,不然就算给你再大的流量入口,用户搞不明白该走还是会走。


同时,也不能为了导流而不分场景的尬导,这样很容易伤害原有产品的用户体验,捡了芝麻,丢了西瓜。

转自:站酷-苏大牙


日历

链接

个人资料

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

存档