首页

前端Datatables自定义事件(监听Datatables插件一些常见的事件动作)

前端达人

今天开发项目的时候,用Datatables插件做前端分页列表,想在列表发生翻页、排序、搜索、改变单页显示数据条数这些行为的时候做一些其他的操作,看了半天Datatables官网终于找到可以监测到这些事件发生方法:


        
  1. $('#table')
  2. .on( 'order.dt', function () {
  3. console.log( '排序事件' );
  4. } )
  5. .on( 'search.dt', function () {
  6. console.log( '搜索事件' );
  7. } )
  8. .on( 'length.dt', function ( e, settings, len ) {
  9. console.log( '改变单页显示条数事件' );
  10. console.log( 'New page length: '+len );
  11. } )
  12. .on( 'page.dt', function () {
  13. console.log( '翻页事件' );
  14. } )
  15. .DataTable();

遇到问题多看官网,而且英文网站的社区讨论真的有很多有效的提问和回答。

附上datatables的官网:https://datatables.net/,大家遇到问题可以多看看

转载于:https://www.cnblogs.com/fuxin41/p/6782994.html


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

文章来源:博客园

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

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

datatable.js 服务端分页+fixColumns列固定

前端达人

前言

记得还是15年的时候,工作需要,独自写后台管理系统。。记得那时候,最让我头疼的不是后台逻辑,而是数据的列表展示。 列很多的时候,页面显示问题;分页样式问题;表格样式问题;数据加载...很多细节的问题,费时,而且总是达不到我想要的效果...也是那个时候,第一次接触了datatable.js插件,只需要简单的修改配置值,就可以改变表格的方方面面,真的是非常好的体验。。。

不过,因为一些历史原因,和时间问题,那时候对 ajax加载+服务端分页+页面刷新,仍然是一直很迷迷糊糊...刚好最近工作中需要做一个列表管理页,所以就很自然的选择了datatable.js,并且总算把  ajax加载数据+服务端分页+reload这套流程弄通。也许还有很多种方案可以达到效果,但至少这个是肯定可行的.

样式是基于bootstrap风格.

正文

一.前端

需要引的js文件

复制代码
<!-- datatables样式和bootstrap支持样式 --> <link rel="stylesheet" type="text/css" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/plug-ins/28e7751dbec/integration/bootstrap/3/dataTables.bootstrap.css"> <script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-1.10.2.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/plug-ins/28e7751dbec/integration/bootstrap/3/dataTables.bootstrap.js"></script> <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <!--form ajax提交--> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.2.1/jquery.form.js"></script> 
复制代码

 

html部分

复制代码
<!-- search 框start --> <div class="container"> <nav class="navbar navbar-default"> <div class="container-fluid"> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <form class="navbar-form navbar-left"> <div class="form-group"> <input type="text" class="form-control" placeholder="用户姓名" name="userName" id="searchUserName"> </div> & <div class="form-group"> <input type="text" class="form-control" placeholder="律所名" name="officeName" id="searchOfficeName"> </div> & <div class="form-group"> <input type="number" class="form-control" placeholder="状态" name="be_valid" id="searchValid"> </div> <button type="button" class="btn btn-success" onclick="searchData()">搜索</button> </form> <form class="navbar-form navbar-right"> <button type="button" class="btn btn-primary btn-sm btn-warning" data-toggle="modal" data-target="#addModal"> 新增律所 </button> </form> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav> </div> <!-- search 框end --> <div class="container"> <table id="mytable" class="table table-striped table-bordered table-hover" cellspacing="0" width="100%" style="white-space: nowrap;"> <thead> <tr> <th>用户名</th> <th>用户ID</th> <th>邮箱</th> <th>身份</th> <th>律所</th> <th>律所id</th> <th>律所简报</th> <th>律所创建时间</th> <th>限制人数</th> <th>验证码</th> <th>状态</th> <th>备注信息</th> <th>操作</th> </tr> </thead> <tbody></tbody> <tfoot> <tr> <th>用户名</th> <th>用户ID</th> <th>邮箱</th> <th>身份</th> <th>律所</th> <th>律所id</th> <th>律所简报</th> <th>律所创建时间</th> <th>限制人数</th> <th>验证码</th> <th>状态</th> <th>备注信息</th> <th>操作</th> </tr> </tfoot> </table> </div>
复制代码

因为是服务端分页,所以我页面做了搜索框,进行自定义的参数搜索.

 

js部分 

复制代码
<script type="text/javascript"> var oTable;
    $(function(){ LoadData();
    }); function searchData(){
        oTable.draw(true); // oTable.ajax.reload(null,true);  }function LoadData() {
         oTable = $('#mytable').DataTable({ //sDom: 'T<"clear">lfrtip',  oLanguage: {
                sZeroRecords: "对不起,查询不到任何相关数据",
                sInfoEmpty: "记录数为0" },
            sScrollX: "100%",
            sScrollXInner: "110%",
            bScrollCollapse: false, //可滚动 bDestory: true, //数据允许清空 bServerSide: true, //服务端处理分页 bLengthChange: false, //是否允许自定义每页显示条数. iDisplayLength: 20, //每页显示10条记录 bPaginate: true, //是否分页 //sPaginationType: "amaze", //分页样式   "full_numbers" //bJQueryUI: true,//是否将分页样式应用到表格 bProcessing: true, //当datatable获取数据时候是否显示正在处理提示信息。 bFilter: false, //是否启用条件查询 bSearchable: false, //bStorable: false,//是否启用列排序 //bInfo: true, //是否显示分页信息(页脚信息) order: [[7, "desc"]], //默认按照第几列排序,从1开始 bAutoWidth: false, //自动宽度 bStateSave: true, //状态保存,使用了翻页或者改变了每页显示数据数量,会保存在cookie中,下回访问时会显示上一次关闭页面时的内容  ajax:{
                 dataType:'json',
                 type:'POST',
                 url: '/adminUserList',
                 headers: { 'token': window.localStorage.token //取localStorage中的token,用来做安全校验
                 },
                 dataSrc: "aaData",
                 data:function(d){
             //取搜索的参数值,在请求服务端时,附加到请求参数中 var userName=$('#searchUserName').val(); var officeName=$('#searchOfficeName').val(); var be_valid=$('#searchValid').val();

                     d.userName=userName;
                     d.officeName=officeName;
                     d.be_valid=be_valid;
                 }
             },
            columns: [
                {
                    data: "name",
                    bSortable: false },
                {
                    data: "user_id",
                    bSortable: false },
                {
                    data: "email",
                    bSortable: false },
                {
                    data: "level_name",
                    bSortable: false },
                {
                    data: "office_name",
                    bSortable: false },
                {
                    data: "office_id",
                    bSortable: false },
                {
                    data: "officeBriefing",
                    bSortable: false },
                {   data: "office_create_time"},
                {
                    data: "limited_num",
                    bSortable: false },
                {
                    data: "verify_code",
                    bSortable: false },
                {
                    data: "be_valid",
                    bSortable: false },
                {
                    data: "remark",
                    bSortable: false },
                {
                    data: null,
                    render: function (data, type, row) { return '<button type="button" class="btn btn-primary btn-sm" onclick="editShow(\''+data.user_id+'\')">编辑</button>'; },
                    bSortable: false }
            ]
        });

    } </script>
复制代码

二.后端

java服务端代码

复制代码
@ResponseBody
    @RequestMapping(value = "/adminUserList",method = RequestMethod.POST) public AjaxListResponseDTO<AppUserShowDTO> getAdminUserList(
            @ApiParam(required = true, name = "start", value = "开始条数") @RequestParam Integer start,
            @ApiParam(required = true, name = "length", value = "取多少条") @RequestParam Integer length,
            @ApiParam(required = true, name = "userName", value = "用户名") @RequestParam String userName,
            @ApiParam(required = true, name = "officeName", value = "律所名") @RequestParam String officeName,
            @ApiParam(required = true, name = "be_valid", value = "状态") @RequestParam Integer be_valid,
            HttpServletRequest request) throws Exception{// Map<String,String[]> paramMap=request.getParameterMap();  String[] orderTypeArr=request.getParameterValues("order[0][dir]");
        String lawOfficeOrderType=""; if(null!=orderTypeArr){
            lawOfficeOrderType=orderTypeArr[0];
        }

        AjaxListResponseDTO<AppUserShowDTO> responseDTO=new AjaxListResponseDTO<>(); //datatable.js 相关参数 String[] drawStrArr=request.getParameterValues("draw"); if(null!=drawStrArr){
            responseDTO.setSEcho(Integer.parseInt(drawStrArr[0]));
        }

        Page<AppUserShowDTO> appUserShowDTOPage = authUserService.findAllUserAndLawOffice(userName,officeName,be_valid,null!=start?start:0,null!=length?length:20,lawOfficeOrderType,"超级管理员");

        responseDTO.setITotalRecords((int) Math.ceil(appUserShowDTOPage.getTotal()));//实际需要传数据总数,此处值不对
        responseDTO.setITotalDisplayRecords((int) Math.ceil(appUserShowDTOPage.getTotal()));
        responseDTO.setAaData(appUserShowDTOPage.getResult()); return responseDTO;
    }
复制代码

start(起始条数,注意,是条数而不是页数 )和length(取多少条数据)为datatable默认会传到服务端的2个参数, userName/officeName/be_valid则为我前端自定义的附加参数。

Page是List<T>泛型集合,是开源项目PageHelper-mybatis中的类。

服务端返回给前端的json数据也有格式要求,具体见AjaxListResponseDTO类定义.

复制代码
/** * Created by xinhuiyang on 2017/6/9. */ @Data public class AjaxListResponseDTO<T>{ private Integer sEcho; private Integer iTotalRecords; private Integer iTotalDisplayRecords; private List<T> aaData;
}
复制代码

 

自此,就实现了带搜索功能的服务端分页效果.

三. FixColumn(固定第一列和最后一列效果)

首先,在之前的基础上,需要添加一个js文件引用

<!-- 固定列 插件js -->
<script src="https://cdn.datatables.net/fixedcolumns/3.2.2/js/dataTables.fixedColumns.min.js"></script>

其次,在配置项中添加一项:

复制代码
oTable = $('#mytable').DataTable({ //sDom: 'T<"clear">lfrtip',  oLanguage: {
                sZeroRecords: "对不起,查询不到任何相关数据",
                sInfoEmpty: "记录数为0" },
            sScrollX: "100%",
            sScrollXInner: "110%",
            bScrollCollapse: false, 
            fixedColumns: { //固定列的配置项 leftColumns: 1, //固定左边第一列 rightColumns:1 //固定右边第一列  },
            bDestory: true, 
            bServerSide: true, 
            .....省略......
复制代码

然后,刷新页面...至此,固定列效果就ok了。

 

后言

现在的页面效果,还有2个瑕疵:

其一是后台返回"总条数"不对,我是时间赶,来不及写查询了..大家实际使用时,自己查询一下就行,这个好解决;

其二是前端页面,下角显示页码总数和页脚信息显示有问题(见下图),不知道当后台"总条数"准确时,会不会就ok了。我后面还会找个时间,去修复一下的...当我有解决方案时,会补充在下面的,大家有知道原因和解决方案的,也欢迎评论在下方。

页脚图

1.左边数字没显示出来.  

2.实际83条数据,每页20条,应该最多到5页的,但实际上,可以点任意页,只不过从第6页开始,数据都为空.

 

补充

页面显示不对的问题已经找到原因并且解决.

原因是:后端分页时,需要返回给前端更多的信息,如总数多少,过滤后多少等,所以我代码中的AjaxListResponseDTO类就不符合后端分页时的需求了,需要改动.

修改后的类定义为:

复制代码
/** * Created by xinhuiyang on 2017/6/9. */ @Data
@ApiModel public class AjaxListResponseDTO<T>{

    @ApiModelProperty("必要。上面提到了,Datatables发送的draw是多少那么服务器就返回多少。 这里注" +
            "意,作者出于安全的考虑,强烈要求把这个转换为整形,即数字后再" +
            "返回,而不是纯粹的接受然后返回,这是 为了防止跨站脚本(XSS)攻击。") private Integer draw;

    @ApiModelProperty("必要。即没有过滤的记录数(数据库里总共记录数)") private Integer recordsTotal;

    @ApiModelProperty("必要。过滤后的记录数(如果有接收到前台的过滤条件,则返回的是过滤后的记录数)") private Integer recordsFiltered;

    @ApiModelProperty("必要。表中中需要显示的数据。这是一个对象数组,也可以只是" +
            "数组,区别在于 纯数组前台就不需要用 columns绑定数据,会自动按照顺序" +
            "去显示 ,而对象数组则需要使用 columns绑定数据才能正常显示。") private List<T> aaData;

    @ApiModelProperty("可选。你可以定义一个错误来描述服务器出了问题后的友好提示") private String error;
}
复制代码

相应的,controller部分代码,也要给对应的属性附上正确的值,改动后代码如下:

复制代码
 @ResponseBody
    @RequestMapping(value = "/adminUserList",method = RequestMethod.POST) public AjaxListResponseDTO<AppUserShowDTO> getAdminUserList(
            @ApiParam(required = true, name = "start", value = "开始条数") @RequestParam Integer start,
            @ApiParam(required = true, name = "length", value = "取多少条") @RequestParam Integer length,
            @ApiParam(required = true, name = "userName", value = "用户名") @RequestParam String userName,
            @ApiParam(required = true, name = "officeName", value = "律所名") @RequestParam String officeName,
            @ApiParam(required = true, name = "be_valid", value = "状态") @RequestParam Integer be_valid,
            HttpServletRequest request) throws Exception{ // Map<String,String[]> paramMap=request.getParameterMap();  String[] orderTypeArr=request.getParameterValues("order[0][dir]");
        String lawOfficeOrderType=""; if(null!=orderTypeArr){
            lawOfficeOrderType=orderTypeArr[0];
        }

        AjaxListResponseDTO<AppUserShowDTO> responseDTO=new AjaxListResponseDTO<>(); //datatable.js 相关参数 String[] drawStrArr=request.getParameterValues("draw"); if(null!=drawStrArr){
            responseDTO.setDraw(Integer.parseInt(drawStrArr[0]));
        } int totalCountBeforeFilter=authUserService.countUserByLevel("超级管理员");

        Page<AppUserShowDTO> appUserShowDTOPage = authUserService.findAllUserAndLawOffice(userName,officeName,be_valid,null!=start?start:0,null!=length?length:20,lawOfficeOrderType,"超级管理员");

        responseDTO.setAaData(appUserShowDTOPage.getResult());
        responseDTO.setRecordsTotal(totalCountBeforeFilter);
        responseDTO.setRecordsFiltered((int) appUserShowDTOPage.getTotal()); return responseDTO;
    }
复制代码

然后,页面的页码显示就正确了(如图):

 

 

 

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利;

原文链接:https://www.cnblogs.com/Andrew-XinFei/p/7020055.html


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

文章来源:博客园

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

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

设计师的项目管理意识

seo达人


如今设计师不再仅仅作为一个需求的接收方与执行方,职能更加的全面,在整个产品设计研发流程中也需要我们有更强的参与度。最近工作中得到一些设计同学的咨询并参与围绕着一些项目中的问题进行讨论,比如:项目协同与执行的过程中总感觉节奏乱?对于项目缺乏整体的规划、每次设计过程中付出的成本很高。对结果验证时发现不论设计质量还是效率都还有很大的提升空间。设计感觉做的不错,但项目中的角色话语权不高?多个项目并行不知如何管理操作,有无标准方法,怎么从中创造更大的价值?本文结合日常项目管理当中的一些思考与方法,带大家了解设计师需要有的项目管理意识。

图片

a

01.好的设计能不能管理出来?能收获什么?

首先,我们思考一下,管理是什么?其实简单来说更像是很多标准化、流程化、格式化的方式方法组合,辅助我们更好的达成目标,并为整个设计团队构建一个基础的工作体系。项目中稳定与高效输出都来自于更加科学的管理。设计师链接上下游部门,也需要通过管理来解决诸多设计以外但与设计有联系的事务。对于我们的收获部分可以大致分成以下三点:

图片

· 目标达成层面

引导促成整个产品/项目的目标高质高效达成,使之利益最大化。

· 视角变化层面

能够让我们视角产生改变,能够更全局看待问题,让自己有大局观的同时更加拥有结构化的思维。

· 影响力与服务能力的提升层面

在项目中角色话语权提升,在团队内外有更高的影响力

a

02.项目管理我要管什么?

设计师运用项目管理的方法,个人认为最基本的就是要合理的规划与控制,管人管事,且贯穿在整个项目流程当中,以下几点其实我们可以重点关注。

图片

我们工作当中实际参与的流程,基本可以归纳为启动阶段、计划阶段、执行监控阶段、收尾阶段。

 

· 启动阶段

在这个阶段经常会使用到6W2H方法,它有助于我们思路的条理化,杜绝盲目性,所以此方法能够快速帮助我们确定目标、里程碑、项目成员以及合作模式,例如在此前的二手车大类页改版等大型改版项目中都有所使用。

图片

 

· 规划阶段

需求的梳理、排期、以及任务拆分、资源协调。我们可以尝试使用STAR模型来操作。而这部分在车业务的内部设计需求中也是在iWiki常态化留档的,以SITUATION(背景),TASK(任务),ACTION(行动),RESULT(结果)几个维度构成表的基本结构。

图片
图片

需求规划完毕需要考虑的就是内部资源协调,在专职项目、动态项目、创新项目中协调的原则上可以是:擅长人做擅长事,挑战与执行并存,提效最大化,成长最大化。

 

· 执行监控阶段

在此阶段,我们可能会遇到以下一些问题,产出效率不高、质量不高、反复修改或项目推进缓慢影响业务目标。这些情况或风险在很多项目当中都存在,风险并不一定是坏事,而风险大多数都是可以预测和管理的,我们可以多使用WWH模型和STAR模型结合的方式快速的辅助我们思考、记录、评估、计划、调整。在落实的时候我们会使用到iWork工具进行需求的变更、说明、同步,包括后续的进度跟踪与回溯,在项目的管理上非常直观易用。

图片

图片

 

· 收尾阶段

对于该阶段质量控制方面,我们引入了更规范的走查文档、共建集成体验环节、以及全职能自查环节。常规的设计走查介入方式如下:

图片

改变走查方式之后,增加集成体验环节与每个节点中的输入输出内容,保障每次项目的最终落地质量。

图片

在收尾阶段从项目管理的角度来说另外一个希望提及的是,除了事前有规划、执行有控制、更要注重事后收尾有总结。虽然每一次的项目可能过程会有一些不同、结果目标不同,但是我们在总结复盘的过程中一定要做到以下几点:

1.拒绝形式化,避免假大空反思

2.具备借鉴意义

4.对应解决方案,具体落实到人、功能范围、时间等

w

03.聊聊其它

其实我们可以发现既然是要去管理项目,在每个节点里沟通是非常重要的,可能很多设计师都会遇到一些沟通方面的问题:效率低、无结果、惧怕沟通。其实多数就是在信息通过传输渠道、媒介的时候,发送者与接受者在各阶段所暴露出的不同问题,如下图:

图片

 

· 我们可以怎么做呢?大家可以多从以下几点去思考

1.沟通前的思路整理以及相关案例或设计理论的支持

2.对齐沟通方的关注点与信息交集

3.灵活正确的处理意见与分歧,开放心态、开放式话术、气氛控制、善用询问等

4.总结与使用流程管理进行规划

5.建立设计师个人品牌可信度

以上为对日常设计项目管理工作的一些个人理解,大家可在实际的项目当中灵活应用,如对项目管理方面非常感兴趣的同学也可以去看看PMP相关知识,也欢迎入群多多交流。


 

原文地址:58UXD(公众号)

作者:环铁艺术家

转载请注明:学UI网》设计师的项目管理意识

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

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


文章来源:csdn

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

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




把设计变成终端代码|风火轮背后的故事和规划

seo达人




01.契机

每一个伟大的项目背后总有一个必要的契机和一个有趣的故事,而我们的故事是这样开始的。

在我们团队设计师之间经常会听到这样一些问题:

1、这个项目是谁做的?有没有源文件?
2、这个产品是设计规范是什么?我这样做符合规范吗?
3、之前那谁谁离职了,文件谁能找到?

总体说来就是设计文件管理难,规范一致性统一难,设计师对接协同难

图片


在技术同学之间也会存在一些问题:

1、这部分代码是谁写的,怎么这么乱?
2、技术框架已经落后了,我们现在不这么写了,再优化也没有价值,我们计划重构代码
3、大量重复的UI还原工作,研发变身”切图仔”
4、明明是按照设计稿还原,设计同学总说差1px

图片


而在产品侧的问题却是这样的:
每次都做了很多重复的事,我们版本需求量太有限了,这些问题大大影响了产品节凑和业务扩展的要求。

我们在工作协同开发过程中,一直缺少一个连通器,导致产品、设计、技术沟通协作不便,设计和技术规范落地较难。同时因为缺少容器承载导致各种资源和文件共享不便。因此使得我们重复设计和重复开发内容较多,影响了我们版本需求的吞吐量。

对于一款成熟的产品来说,夯实设计与技术的框架基础地基,这样才能助力我们在上空盖更壮丽的楼阁,基于这种契机,我们希望做一次彻底的改变

1

02.故事

生逢乱世总有一些拯救世界的英雄出现。当我们带着想法和前端专家“存哥”一起聊的时候,没想到我们双方的想法不谋而合,甚至在细节和方向都出奇的一致。经过几次深度的协商沟通,我们快速制定了解决方案,同时招募研发团队,快速的开展项目,带着激情与理想,「58UXD」与「前端技术委员会」发起了共建项目「风火轮」。

图片

主要通过两方面来解决问题:

设计插件提效:通过Sketch插件进入设计师的工作流程,聚合设计资产,解决设计规范落地、设计资产可视化承载,提升设计规范和设计资产的使用率,增强资源共享避免重复设计。

设计协同管理:通过风火轮协作平台进行团队资产、项目管理,实现设计稿在线标注解析,供研发同学在线查看研发。

图片

在这里有的同学就会说,这不就是做了一个蓝湖吗?

那可就想简单了,我们的终极目标是:
“把设计稿变成终端代码”。通过智能解析,将设计稿自动化解析生成代码,提升产研效率。

图片

那么背后的逻辑和我们的思路又是什么呢?

3

03.代码生成

在我们集团设计师Sketch的使用率高达90%,因此我们选择了Sketch作为UI自动生成代码的设计源,通过Picasso解析工具进行智能解析,高精度还原设计稿,支持多种代码格式,满足各种场景需求。

设计稿生成代码的主要流程如下图:

图片

图片

设计稿生成代码的实际效果展示:

图片

图片

为了提升操作效率,我们将Picasso工具在风火轮协作平台直接内置,这样设计师上传设计稿交付需求的同时,风火轮自动将设计稿转换成代码。代码生成的UI界面与设计稿几乎完全一致,并且代码的可用度高,生成代码的结构布局合理、可维护性高,提供了两种模式: 专注于高精度解析的运营版和专注于代码可用度的普通版,并且支持多种格式、尺寸的切图,导出来满足不同平台、不同尺寸屏幕的需求。

图片

 


为了保证智能解析代码的还原度,我们通过以下几个方式来处理解析问题:

1、还原度计算—感知哈希算法

我们将自动生成的UI页面通过puppeteer进行截图,通过感知哈希算法与原图进行像素对比,计算出生成页面的真实还原度。

图片

 

2、样式解析-渐变解析方案

在渐变处理方面,首先根据渐变类型分为线性渐变、径向渐变、环形渐变三种,然后根据渐变值、位置等信息计算渐变方向距离及渐变节点之间的比例,最终生成渐变样式代码。

图片

 

3、图片处理—精准切图方案

为了精准还原图片,我们通过调用sketch API进行图层截图的方式,计算不规则图形的精准位置及大小,精准切图是保证我们的高精度还原页面的关键;

图片

 

为了保证智能解析代码的可用度,我们通过以下三个方式来处理可用度问题:

1、结构重组

由于设计同学输出设计稿是以视觉为主,不太关注分组结构的合理性,因此我们需要将原有的分组去掉,按照符合开发习惯的方式进行重新分组。

图片

 

2、特征分组

针对列表这种重复结构的场景,我们通过特征分组算法识别相似结构,减少代码重复,提升生成代码的合理性

图片

 

3、样式优化-样式精简、样式排序

样式精简及排序,使得生成代码更贴近工程师”手写代码”,代码可维护性更高。

图片

w

04.能力与规划

我们做一下回顾,20年12月30日成功将「风火轮」研发上线以来,历经7个月的时间,用户覆盖了集团85%的产研团队,并且覆盖了大多数的子公司。Sketch Plugin以容器的形式承载了6000+的设计资产和14调业务的设计规范,智能生成了1500+代码。

风火轮上线7个多月的时间,经历的3次版本迭代,上线核心功能点20+;风火轮插件发布了2个大版本,20多个小版本迭代,快速解决了100+的线上BUG,不断完善功能和优化体验。并且建立了完善的用户反馈机制,以最快的的方式解决用户诉求。

目前为止我们生成代码覆盖了常见终端代码格式:Web、Mini Programs、React Native、Flutter、iOS、Android等。代码解析还原精度达99.8%,生成终端代码可用度85%(目前行业顶级)

在未来我们要以解放生产力为目标,继续深耕从设计到代码的路线,以风火轮为媒介,将产品、设计、开发紧密的连接起来,为我们内部协同发光发热。同时也欢迎更多的设计师和研发工程师加入我们,共同构建风火轮生态,编写故事的下一篇章。

图片

原文地址: 58UXD(公众号)

作者:环铁艺术家

转载请注明:学UI网》把设计变成终端代码|风火轮背后的故事和规划

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

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


文章来源:csdn

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

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



用一篇文章,帮你了解风靡平面界的「图画现代主义」

ui设计分享达人

但结束往往是另一种开始,从研究心得来看,任何一种横空出世的风格都能找到过去风格成分,只是当事人是否愿意承认而已,所以旧风格某程度而言能在新风格中获得新生。

新艺术平面风格总结

我们在此大致为新艺术运动做个“结案陈词”,首先这个名称源自法国,含义指“一切新出现的艺术”,单从这个定义来看,它的风格形式其实没有固定规范,但是当大家同处一个时代,经历同样变迁,艺术表达就必然有共性。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

法国“新艺术”平面设计

总体而言,新艺术运动平面设计风格能找到以下几点共性:

  • 崇尚曲线,主张学习自然,花卉枝蔓元素多,但也有一些国家例外。
  • 受日本浮世绘影响深刻,平涂技法是主流。
  • 插画是设计的核心,多数设计师本身都是插画家。

新艺术本质上属于风格群组,包含很多子分类,除了法国、美国等本身称作新艺术之外,其它国家多数有别称,比利时是“先锋派”,德国是“青年风格”,奥地利是“维也纳分离派”,意大利是“自由风格“,英国则是”格拉斯哥派“等等。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

美国地区的“新艺术”平面设计

新艺术风格如果以法国为正统,带给人的主要气质感受是:浪漫、柔美、悠闲。

而德国、维也纳跟英国区因为加入直线,显得阳刚一些,所以这三个地区的风格有时候会划分到“初期现代主义”部分去讨论,这些总结值得大家记下,有助于运用。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

英国区“格拉斯哥”风格平面设计

最简单的例子就是给甲方提供类似风格的设计时,可以谈一点历史故事,有时候有渊源就是有文化的代名词,品牌故事就是如此来的。

在新艺术运动的末期,整个社会发生了很大变化,比如资本主义国家产生内部阶级矛盾,贫富分化,经济急速发展等。

上一期说过,艺术与设计永远是时代的精神折射,在急剧变化的社会中,文化艺术界开始涌现各种现代主义运动,例如表现主义、立体主义、未来主义等,这些运动的发展明细详见史太浓「风格列传」系列,这里不重复去谈。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

表现主义风格平面设计

这些以绘画为核心的现代主义艺术运动对当时的平面设计发展产生巨大影响,逐渐形成本次要谈的主题“图画现代主义“(the Pictorial)。

这是一场发生在平面设计中的运动,以德国地区影响力最大,输出最多大咖,历史上单独将其称作“海报风格”(Plakastil),原因是以海报设计为主要载体,标志、包装、书籍一类都无法体现。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

“海报风格”平面设计

文章本天成,妙手偶得之

“海报风格“的主要特点就是简洁鲜明,主题突出、色彩扁平。

这种风格在过去历史当中难以想象,甲方看来也总感觉钱花得不值,因为留白特别多。

甲方一般也不清楚做减法比做加法难太多,这种特征其实在上一回谈意大利“自由风格“的时候,李昂内托·卡皮尔洛(Leonetto Cappiello )的作品中就已经初步具有。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

李昂内托的海报设计作品

但这种风格真正的奠基人是德国的卢锡安·伯恩哈塔(Lucian Bernhard),后面简称卢锡安,史太浓在翻译外语名字时候希望尽量像中文名,好记一点。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

卢锡安·伯恩哈塔

卢锡安同学也是自学成长的大神,1883 年时候他出生于德国斯图加特(奔驰汽车的总部就在这个城市),父亲经营工艺品生意,家境还不错,但经常出差不在家,回来的时候会带一些有意思的小物品送给卢锡安。

卢锡安从小贪玩,经常闯祸,比如戏弄老师这种事情也经常干,也父亲头疼不已。

但父亲发现儿子其实有艺术天赋,具体表现是喜欢用橡皮泥尝试做一些工艺品,而且对于讲述艺术的书籍、故事特别感兴趣。

在卢锡安 15 岁(1898 年)那年就因为爱摆弄惹得父亲非常生气,情况大致是这样的:当时德国慕尼黑举办室内装饰展览,卢锡安很兴奋的跑去看,现场带有现代气息的设计让他非常入迷,他自信满满的感觉自己可以做出来,于是决定回家实践。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

慕尼黑的室内装饰展览

恰好父亲那时候需要出差几天,机会从天而降,他找来小伙伴协助,将家里按自己的想法从新设计装饰了一遍,比如用鲜艳的油漆刷墙,是劳斯莱斯一类的拼色操作,再将一些他认为风格不符的家具扔掉,从新进行布局。

完成之后其实他并不满意,因为眼前的条件限制了很多想法的实现,我想到假设一个设计师对自己的设计结果不满意,那么去到甲方那边是肯定会出问题的,这叫“墨菲定律”,担心的事情 90%都会发生,到时自己一切的解释都变成掩饰。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

“海报风格”平面设计作品

果不其然,父亲回家看到房子面目全非之后大发雷霆,摩拳擦掌,大骂卢锡安一顿,还准备揍他,卢锡安一气之下离家出走,这一走居然就没有再回过家了。

他跑到德国柏林,在那里找到一份制造工厂的工作,一边做车间工人来保障生活一边自学美术,他内心还是强烈希望日后可以成为一名设计师,虽然还没想清楚具体设计什么。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

“海报风格”平面设计作品

时间很快去到 1905 年,卢锡安已经 22 岁,终于碰到一个改变他一生的机会。

柏林有一个老牌的知名火柴厂叫“普莱斯特“(Priestermatches),100 多年前,火柴还是民生中必不可少的产品,印象中我小时候有很长一段时间都是用火柴生火做饭的(暴露了我的年龄)。

某天这个火柴厂玩起“设计征集“这样的营销,通过刊登报纸向社会征稿,设计主题是新品海报,当时做这类征稿的商家还不多,所以博得不少眼球,另外他们也确实希望通过这种方式获得耳目一新的设计。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

“海报风格”平面设计作品

征集活动被卢锡安知道了,此时他已经自学设计多年,自然希望借此机会浮出水面,成为真正的设计师,万万没想到,还真的成功了。

事情的经过是这样的:当他发现消息时候已经距离截稿时间很近,他赶紧请假几天在宿舍闭关。

刚刚开始的时候他设计得比较复杂,海报的元素很多,最初设想是桌子上有一个烟灰缸跟雪茄烟,边上还有一个跳舞瓷娃娃增加气氛,画完之后他满意的拿给朋友看,朋友的反应却像一盘冷水,因为朋友问他是否一个卖雪茄的广告。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

年轻时候的卢锡安

于是卢锡安回宿舍后将雪茄涂掉,没了雪茄烟后灰缸自然是多余的,去掉,没了烟灰缸后瓷娃娃也很奇怪,去掉,如此这般桌子也没了意义,也去掉。

最后这些元素全部涂没了,只剩下一个蓝色的工厂名字标题,纯黑色背景,而当天晚上再不寄出征集活动就要截稿了。

卢锡安急得不停冒汗,这种体验很多广告设计师都肯定试过,他想了很多替代方案,但此时不管想法如何好都不够时间实现。

最后只能死马当活马治,在黑色背景上刷刷两笔画了两根红色杆黄色头的火柴,匆忙将稿件寄走了,心里感到万分的沮丧,类似约会心仪的女孩但是表现得不好的那种。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

“普莱斯特“火柴厂海报设计

寄出稿件之后他其实就忘记了这件事,我猜测是选择性遗忘,因为心里难受,不抱任何希望,但人生往往是充满惊喜与意外的,一个月后卢锡安收到电报,告知他居然获得活动第一名,电报中还用不少美丽的词汇称赞他为“设计天才“。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

卢锡安的海报设计

领奖金的时候他才知道原来最初他的作品被评委扔到垃圾桶,觉得过于简单,缺乏风格,后来被一位外邀的专家评委捡了起来,看了很久,认为这样的设计主题突出,名的明确,具有很好的传达功能,而且设计方式非常大胆,正是“普莱斯特“火柴厂需要的,应该得第一名。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

卢锡安的海报设计

这一类故事史太浓之前在大师列传就聊过,主人公是扎哈·哈迪德(著名女建筑师),当时也是参加比赛,我总感觉这种事情是为了增加主人公成名传奇性而杜撰,但不管如何,只能说实力跟运气都重要吧。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

扎哈·哈迪德

如此这般,卢锡安一举成名,正式投身设计界,我忽然想设计大咖李永铨在《消费森林&品牌再生》这本书里面说到的一句话:设计有时候就是需要冒险,因为设计就是投资,投资不存在零风险。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

《消费森林&品牌再生》

具有一定试错成本的时候试试,因为万一成了呢。

“海报风格”练成

卢锡安 1905 年这一份传奇的火柴海报设计让风行多年的“新艺术“风格得以”交班“,大家发现平面设计的另一种可能性,就是重视传达,信息明确,形式简练。

入行之后的卢锡安成为“海报风格“领军人物,采用这一类风格设计出很多优秀作品,比如 1912 年为斯蒂勒皮鞋公司(Stiller)设计的产品海报,也属于经典之作。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

斯蒂勒皮鞋公司海报

市场都是喜欢新鲜,爱追热点的,卢锡安开创的这种风格大胆好用,很快成为德国广告界的领军风格,市面上大量平面设计都开始走“海报风格“路线。

其中有一所叫“火雷不老与十米特“(thehollerbraumand schmidt Lithography firm)的石版印刷公司极有先见之明,抢先以丰厚酬金跟卢锡安,还有市面上善于这种风格的五位设计师签订长期合同。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

德国其它“海报风格”设计师的作品

模式类似经纪公司签约明星,市面上的其它公司如果需要找这些设计师工作,必须先通过他们,一般最后也会找他们印刷成品,这样一来让公司大发其财。

五名设计师中有一位叫朱立思·克林杰(Julius Klinger),早期在奥地利维也纳学习设计,所以设计风格受“维也纳分离派”影响不少,具有新艺术运动的曲线特点,随后再在这个基础上转向“海报风格”,有不少出色作品。

用一篇文章,帮你了解风靡平面界的「图画现代主义」

朱立思·克林杰

而这群人在我们下一期的内容中都有重要戏份,因为第一次世界大战马上到来,这次大战改变了很多设计师的命运,有人一飞冲天,有人从此凋零,有时势造英雄,也有英雄造时势。

文章来源:优设   作者:Reman刘斌

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

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

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



十分钟读完大卫·奥格威的《一个广告人的自白》

ui设计分享达人

背景

1我们坚信每一则广告都必须被看成是对品牌形象这种复杂的象征符号作贡献,以及对品牌声誉所做的长期投资的一部分。

2提到的书籍:《如何做广告》、《4A广告公司作业手册》、《广告大师奥格威》、《奥格威谈广告》。

3如果你经常雇佣比你弱小的人,将来我们就会变成一家侏儒公司,相反的,如果你每次都雇佣比你强大的人,日后我们必定成为一家巨人公司。

4奥美的广告文化:我们做广告是为了销售产品,否则就不是做广告;不要推出一个你不愿意你的家人看到的广告;消费者不是低能儿,别侮辱她的智商;我们喜欢知识纪律,你要知道广告的“根茎”在哪;不要奢望所有的策划方案都很有用。

  1. 怎么经营广告公司

通过作者的厨师工作经历,说明如何管理公司,其实很多道理都是相通的,不管是做人还是做工作。

一 、领导者做好公司管理的要点

领导者在专业能力上一定要突出,才能让团队信服你。对待工作要严厉,用强力手腕处理同事间的矛盾。适当夸奖部属,让他们懂得赞扬的可贵。增强使命感,比如让更高层领导评判文案或设计或活动效果。对不称职的人零容忍,和不称职、吊儿郎当的人一起工作,专业人员的士气就会受到影响。严格遵守服务标准,信守承诺。道德问题,坚守底线。保持办公场所的整洁,乱七八糟会产生慵懒的气氛。炫耀特权,激励部属向领导看齐的雄心。对盈利保持热情。勤劳。创造不可或缺性,让别人无法替代你。活力和足够的应变能力,对伙伴有热爱之情,能宽容他们的过失,有化敌为友的才能,有抓住良机的敏锐目光,还有道德。必须懂得如何分配任务。发掘人才,思考你想要的团队成员应当具备什么特质,面试时通过问什么问题,或什么行为能让你判断对方是否胜任。最终还是要让公司在领域内的专业性无法被取代。

  1. 如何挖掘潜力,不让自己的思维被框住

给自己时间做放松的事情,比如听音乐、跑步。在无所事事的时刻,让潜意识长流不断给我传来信息。还要有刻苦的工作精神、开放的头脑、不受任何限制的好奇心。追求更多物质的心。

  1. 怎样争取客户

一、树立公司品牌

与行业相关记者,建立联系。每次发声,必引起轰动。与行业相关人员交朋友。将公司理念和经营指标,告知目标。让广告主看到,转来奥美的客户的戏剧性发展。认真倾听很重要。敢于直言,不怕说出实话,即使可能伤害对方。适当的拍马屁。不做能力之外的事情,以免砸自己的招牌。对客户要有热情,但热情不总是获得成功的最佳因素,有时候拒绝反而激起了客户要求聘用我们的愿望。

第三章 怎样维系客户

一、自身

马上准备预备方案。站在客户的角度思考问题,全面了解客户的情况。让每个客户都感受到被重视。绝不泄露客户的信息给另—个客户。

  1. 用人

把最好的人才为现有的客户服务,而不是让他们去追逐新客户。不任用处事草率,很不随和的人做客户主管。

三、沟通

和客户每个层次的人保持联系。重视客户主管与客户间的关系,适时地进行协调和处理。主动在受到责难前,承认自己的过错。和客户成为朋友。

四、客户

避免和那些—再辞掉自己广告公司的客户合作。不依赖单一的个人来维系客户关系。

  1. 怎样当一个好客户

1消除广告公司的惶恐心理。让他们把主要精力放在创作上。

2选择对的广告公司。招标只是一种参考,很多大公司会把一流人才用于投标竞争,但在工作时却用二流人才;聘用一个懂行的广告经理,让他找最能配合你工作的广告公司。通过吃饭、喝茶时他们的表现来判断其公司的氛围和上下级关系;不要想大公司可以给你提供更多服务,与公司大小无关,为你服务的人员数量是相等的。

3向广告公司全面彻底介绍你的情况。

4不在创作领域与你的广告公司较高低(何必养了狗又自己汪汪叫呢?)

5广告和产品研发同等重要。

6不让一层一层的机构干预广告宣传。

7确保广告公司有利可图。

8不要和广告公司斤斤计较。

9推诚相见,鼓励坦率,有问题就直接说,别让猜。

10定出高标准,销售不好时责怪广告公司,销售好时又不舍得把功劳给广告公司,是不体面的。

11—且经过测试,产品、媒体、标题、插图、尺寸等。

12效率要高。

13不为有问题的产品浪费时间。

14珍惜良才。

15勿使广告预算捉襟见肘。

第五章 怎样创作高水平的广告

一、广告创作是有规律可循的。(教条和创意并不矛盾)

二、好广告的判定标准,不引公众注意广告本身就把产品推销掉(好广告要客户说的不是“多奇妙的广告啊”,而应当是“我从来没有听说过这种产品,我一定要买来试试”)

三、总结的广告创作规律来源。邮购公司的广告经验(类似于公司寄出产品的广告,客户看到后想采购再把广告裁下写上基本信息寄给公司);什么技巧使百货商店成功或者失败。对广告渠道效果的调查;别人智慧的成果。

四、创作广告的11条戒律

1广告内容比表现形式更重要。最重要的是你怎么来说明你的产品,你承诺什么好处。选择正确的承诺的四种方法:将产品送到抽样消费者手里,随附不同的产品承诺,看不同承诺所吸引到的反应的百分比的高低;让消费者看印有不同承诺的卡片,请他们选择出最可能促使他们购买某种产品的承诺;用不同的承诺制作广告,把广告发给消费者,看订货量;同—天报纸刊登不同承诺的同一种产品,从索取赠品数量来看效果。

2广告要有创意。

3讲事实,枯燥的形容词和夸张的承诺无法形成购买。

4不做令人厌烦的广告。

5显得有礼貌,但不装模作样。

6要与时俱进,有现代意识。

7广告需要不断修改。

8创作了—条好广告,不妨重复使用,直到他的号召力减退。因为消费者在不断更新。

9不要说谎,不写那些你不想家人看到的广告。

10让每则广告都为树立品牌做贡献。坚持统一的广告形象。打折以及其他类似的求存方法效果是短暂的,而且会形成坏习惯。

11不要抄袭。

第六章 怎样写有效率的文案

一、标题

标题是大多数平面广告最重要的部分。

写标题的原则:

标题好比商品价码标签,用它向你的潜在买主打招呼,意思就是说卖什么一定要直接说出来。

每个标题都应带出产品给潜在买主自身利益的承诺。

始终注意在标题中加进新的信息。

标题内使用充满感情的文字可以起到加强作用,比如亲爱的、爱、宝贝等。

标题中应当包含品牌名

标题中写进销售承诺。

写能引起读者好奇心的标题

不使用双关语、引经据典或晦涩的词语,标题是以清晰传达为首要目标的。

尽量不在标题中使用否定词。

不写让客户读了莫名其妙的标题。

二、正文

1不要旁敲侧击﹔要直接了当

2不要使用最高级形容词,一般化字眼或陈词滥调。

3长文广告比短文广告更具推销力量。

4使用用户的经验之谈更让客户信服。

5向读者提供有用的咨询或服务。

6不刻意追求高雅和文笔。

7避免唱高调。

8尽量使用简单、通俗的语言。(待商榷)

9不贪图写那种获奖文案。

10优秀的文案撰稿人不会从文字娱乐的角度去写广告文案。

第七章 怎样使用插图和编排文案

1插图应当起到与文字同等重要的作用。

2插图的主题比插图的技巧更为重要。

3插图的使用规则

3.1插图应有“故事诉求”。

3.2照片比绘画更能促销。

3.3男性更注意有男性的广告,女性一样,最吸引女性的是婴儿的照片。

3.4彩色插图好于黑白插图。

3.5避免历史主题。

3.6避免使用人脸局部特写。

3.7尽可能使插图简洁。

3.8不使用老套场景,比如物业弯腰引导,比如三代同堂的全家福。

4广告一定要针对它所要刊登的刊物来设计,在它被排进出版物,你看到它被排进去的样子之前千万不要最后敲定。

5人们读照片下面的文字说明多于读文章本身。

6如何进行文案排版

6.1在标题和正文之间,插入副标题。

6.2 用大一些字号的字排正文第一个词的第一个字母。

6.3第一段控制在11个词以内,所有段落尽可能短。

6.4每行的字数不宜过长,不超过26个字符为宜。

6.5齐头散尾更易吸引读者。

6.6善于使用编号。

6.7大标题排制上,字体变化越多,读者越少。

6.8用小写字母排标题以至整个广告文案。

7路牌广告

7.1要吸引人的眼球,“色情视觉”是一个最有效的方法。

7.2最起作用的路牌广告是用写实的艺术作品或照片制作的。

7.3要保证5秒内对读者产生作用。

7.4 使用强烈、单纯的颜色,传递信息就快些。

7.5文字要尽可能大。

7.6品牌名字要安排得更醒目。

第八章 怎样制作上乘的电视广告

1电视是用画面讲故事的,语言的唯—功能是解释画面所表现的东西。

2电视广告要么带有新商情、要么可以介绍能解决什么问题、要么可以做示范表演、要么就进行感情与情绪的传达。

3避免出现太过俗套的画面内容,比如一群人的豪饮,一家人的喧喧嚷嚷。

第九章 怎样为食品、旅游地和专利药品制作优良广告

一、食品

印刷广告:以食欲为诉求;插图要大,要用彩色,最好是照片,且一张为宜;最好能提供食谱或烹饪方法,单独列出来,照片能体现烹饪最好。

电视广告:示范如何使用;用自问自答的方式、以推销产品为目的,而不是娱乐为目的。

二、旅游地

1树立正面形象至关重要。

2把你的国家最能吸引游客之处拿来做广告。

3为读者树立难以忘却的印象。

4刊登的广告媒介是有条件做长途旅行的人看的。

5国际旅行的最大障碍是费用。

6把旅游地说成是热门旅游点。

7广告的作用是让读者的梦想付诸行动。

8避免采用读者不理解的话题。

三、专利药品

要体现与竞品独有的差异;要含有新信息;要传达严肃的感觉;权威感;应适当讲解病情。

第十章 怎样才能功成名就-对年轻人的进言

1迅速功成名就的行为模式:要有大志,但不可咄咄逼人,以免被围攻;通过学习,迅速提高专业技能,对专业深入了解,甚至超过你的领导;花更多的时间投入工作;重大时机出现时,识别他,抓住他;成为专才,而不是通才。

2一些忠告:有耐心,坚持就会成功;要有做高质量提案的能力,要善于推销你的广告计划;融入每个集体,不轻视和敌对同事;要懂得在小问题上让步,在大问题上就能坚持;管好嘴和文件;私下进行协商和批评;勇于承认错误;提高文字写作能力,快速、简练、流畅的写公司文件。

3如何过有意义的假期:不要待在家里,要换换环境;假期完全不接触工作;多做运动,呼吸新鲜空气;多读书;从容,不要太过疲惫。

第十一章 广告是应予废止

文章来源:站酷  作者:成都荣影MG动画

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

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



服务设计概述及国内外案例分析

ui设计分享达人


我们常说,现在是体验至上的时代,用户对产品的使用不再是单纯的需求满足,更要获得满意的体验。服务设计的发展为我们改善用户的体验提供了新的思路,从本质出发,任何产品都是在提供某种服务,服务的质量从根本上决定了用户的体验。



什么是服务设计


服务设计一直在我们的生活中,我们无时无刻不在体验着各式各样的服务。荷兰一家专业的服务设计机构31 Volts是这样描述服务设计的:“如果有两家紧挨着的咖啡店,出售同样价格的咖啡时,服务设计是让你走进其中一家而不是另一家的原因。”这个描述很生动,同时也说明了服务设计的作用。


其实服务设计的定义还有很多,行业内不同的专家和学者都有自己的理解和解读,不管定义如何,重要的是服务设计的思维方式,可以帮助我们从全局改善服务体验。




服务设计的原则及案例说明


2010年在《This is Service Design Thinking》一书中,作者首次提出了5个服务设计基本原则,这些原则之后也被广泛使用,但随着服务设计的不断发展,其中的一些原则也需要重新去审视和思考,因此在2017年作者将其更新修订为6项。


a.以人为中心(Human-centered)


以人为中心的设计理念在产品设计、交互设计等领域已经得到了广泛的应用,服务设计当然也没有例外,以人为中心就是要站在用户的角度上看待和思考问题,考虑所有被服务影响的人。


在日本,农产品市场存在这样一个问题,农产品批发商无法及时从种植者处了解农产品的相关状况、收获量等信息,因此他们也就无法与要购买农产品的人进行谈判,这样造成的结果可能是粮食的浪费。日本的一家软件公司NJC(Nippon Jimuki Co. Ltd.)发现了这一问题,他们希望利用自身能力(软件方面的优势)去解决这一问题,因此将目标设定为:创建一个可以提供有用数据而又不给农民或农产品批发商带来负担的系统。


最终的产出的结果是Fudoloop这个应用程序,通过Fudoloop,批发商可以提前一天从农民那里收到信息,进而协调买家的各种要求。Fudoloop的使用者分为两种,一种是需要更新农产品信息的农民,一种是从Fudoloop上获取农产品信息的批发商,Fudoloop分别为两种用户进行了设计。

图片来源:Fudoloop



在设计Fudoloop时存在这样一个问题,农产品市场中的相关从业人员普遍年龄较大、受教育程度低、软件使用经验很少,面对这样的用户,显然通常的软件设计并不符合他们的需求,因此Fudoloop的界面设计非常简单且信息突出,从事农产品相关工作的人员可以轻松的使用Fudoloop完成农产品信息的更新,而不会因为学习产生很大的压力。Fudoloop还在大型农业贸易展览会邀请了一些行业内的人员和用户参与到了产品的体验中,并收集了他们反馈的建议,以改善产品。

图片来源:IDEO


NJC在设计Fudoloop时充分坚持了以人为中心的原则,考虑到服务涉及的不同用户,并根据用户本身的特点和需求进行设计。NJC的CMO佐藤贤一是这样评价Fudoloop的:“当简单、以人为本的思想汇聚在一起时,创新就会发生”。



b.协作(Collaborative)


这条原则说的是,不同背景和职能的利益相关者应该参与到服务设计流程中,收集多方诉求,发现不同看待问题的角度,才会更好的解决问题。


在美国旧金山,有一所学校和Revolution Foods这家餐饮公司合作,为学校内的人员提供丰富的、营养的午餐,但是实际来餐厅就餐的人数与预期相差很大,数据显示,有72%可以承担起午餐费用的人并没有来到食堂吃午餐。经过调查发现其中的原因,很多学生等校内人员并不愿意排长队或者匆忙的吃完午餐,因此他们选择了去校外享受午餐的时间。


为了改善这种情况,这所学校请来了全球顶尖的设计咨询公司IDEO,他们与1300多名学生、父母、营养人员、董事会专员、校长、老师和社区团体等利益相关者一起工作,重新去设计了学校的午餐,并且制定了针对三种年龄的就餐体验的建议,完成了饮食、就餐空间、新技术使用等多方面的优化和设计。

图片来源:IDEO


最终,学校完美的改善了午餐服务的体验,这其中包含了所有利益相关者的想法和工作,因此设计成果也被人们所接受,越来越多的校内人员会选择学校的午餐,之后,这种设计模式也被旧金山的许多学校采纳和推出。


所以,服务中涉及到的利益相关者有很多,多收集他们的想法与建议,甚至让他们参与到服务设计中去,问题会得到更好的解决。


c.迭代(Iterative)


迭代是一个不断接受反馈不断优化的过程,如此重复执行,让产品变得越来越好。服务设计也需要迭代,不要避免犯错误,而是从错误中学习和改变,同时也要不断的收集各方的反馈信息,这些信息是服务进行迭代的核心所在。随着互联网的发展,迭代的思维早已渗透到每一个互联网产品,此处就不再过多解释。


d.有序(Sequential)


服务设计应该是一系列相互关联的活动,并且是按照顺序进行的,精准的把控服务每一个环节的节奏,用户才能获得更愉悦的体验。


以外卖为例,用户的使用过程包含订外卖时的商家选择到下单过程,下单后配送外卖,用户收到外卖和用餐后这几个过程,而服务的提供者主要包括商家、平台和外卖小哥,为了保证用户能够获得流畅的服务体验,需要各个服务提供者在服务展开的不同环节推出优质的服务,如下图。


在订外卖时,平台会为用户推出“超值优惠”“限时秒杀”等优惠活动,商家推荐、订单历史等商家选择渠道,以及不同的筛选条件,以上的目的都在于帮助用户快速找到自己期望的、合适的商家。在用户选定商家后,进入到选择商品并下单的过程,一方面,商家会推出优惠的活动、推荐菜品等,另一方面,平台也会给出自己的优惠。


下单后,用户面临的是一个配送过程中的等待时间,为了缓解用户在等待过程中的焦虑情绪,平台会及时更新和推送外卖小哥的状态,如到达商家、取餐中、与用户的距离等,同时会给出用户预期的送达时间,若超过预期时间用户还可进行催单,商家可以联系用户表达歉意,整个过程用户对配送状态是可视的。


用户收到外卖时首先会与外卖小哥接触,包括与外卖小哥提前确定取餐的时间地点,取外卖时的短暂对话等,这些都会影响用户对服务的印象,因此外卖小哥需要保证服务态度的礼貌和友好。收到外卖后,食品包装首先给到了用户对商家的第一印象,然后是餐品是否符合用户预期,让用户满意。


在用户就餐后,首先平台要提供给用户评价的功能,用户可以分享自己就餐的感受,商家也可以通过平台为用户提供更多的优惠,引导用户能够再次回到商家订餐。


从外卖的案例中我们可以看到,服务是一个过程,是需要有序展开的,每一个环节的体验都会影响到用户对服务的印象,在恰当的环节提供恰当的优质服务,才能确保用户的整体体验。


e.真实(Real)


服务本质上是无形的,应该用“物理元素”来可视化,这样可以用户的服务记忆,增强用户对他们所接受服务的感知。


同样以上述外卖为例,商家为用户提供餐食,这部分是借助美团这个平台和外卖小哥来完成的,用户和商家的接触仅仅是送达的餐食,因此无法通过像到店体验一样,让用户感知到商家提供的更多服务。


为了让服务变得更加“有形化”,商家就需要花费更多的心思,如图,商家为了增强用户对服务的感知,一般会在在包装上花费很多功夫,精致的包装让商家的形象更好且更加值得信任,一些有趣的包装还可能让用户的心情变得愉悦。另外,商家也可以通过一张便利贴的温馨问候或者赠送小礼品等方式让用户更真实的感受到服务,通过这样的手段,即使用户并没有真的接触到商家,体验也会变得很好,商家的形象也会提升很多。

图片来源:古田路9号


f.整体(Holistic)


整体就是要着眼于整个用户旅程,考虑用户与服务的每个触点(触点的概念后文会进行介绍),并兼顾多方利益相关者的需求。也就是所谓的全方位服务体验,考虑服务环境的方方面面,没有任何遗漏。这个原则实施起来并不是那么简单,从整体角度思考问题会使问题变得复杂。不过在服务设计中,是有一些方法和工具是可以帮助我们完成整体思考的,比如服务蓝图。




服务设计的常用方法-服务蓝图


a.服务蓝图简介


服务蓝图是一张图表,通过列出在每个阶段发生的、不同角色执行的所有活动,显示了服务的整个过程。如图所示是一个服务蓝图的简单示例,垂直方向上展示服务中的利益相关者,水平方向上为用户的历程,也就是用户经历的不同阶段。在服务蓝图中有两条线,一条是可见线(line of visibility),可见线上方为用户可与之交互的服务,也可以称之为“前台”,可见线下方代表的是后台进程,用户无法看到但需要给用户提供支持,后台进程还可以存在内部交互线,用来表示内部人员的联系。用户与前台服务之间存在另外一条交互线(line of interaction),用来表示用户与服务之间的接触。

图片来源:Service Design Tools


明确了服务蓝图的大致框架之后,还需要注意服务蓝图中一个非常重要的概念——触点。触点就是在服务的各阶段,用户和产品、服务、后台产生的接触,每个触点也是服务可以进行展开和优化的方向。


b.Uber服务蓝图绘制


为了明确服务蓝图的绘制和分析过程,下面将结合下图所示的Uber服务蓝图进行说明。

图片来源:Medium


(1) 明确用户历程


用户使用Uber打车服务主要可以简单分为以下三个阶段:注册(下载APP - 新用户注册),乘车阶段(下单 - 等待车辆到达 - 乘车 - 到达目的地)、乘车后(付款 - 评价)。


(2) 明确利益相关者


用户与之产生互动的前台服务人员为司机,而设计师、开发人员、项目经理等负责后台的服务支持,以保证Uber按照预期的目标运作。


(3) 明确前后台活动


一方面,需要明确和用户接触的前台活动有哪些,Uber打车服务中和用户产生接触的主要为司机及车辆,因此需要确保司机是合格的、车辆内部的环境是干净舒适的,同时司机在与用户接触的过程中需要提供礼貌的问候和交流,满足用户在乘车过程中的要求,完成乘车费用的收取,提醒用户离开前带好随身物品,以及评价乘客等。


另一方面,用户对后台的流程可能并不了解,但需要明确哪些后台活动和支持会对用户产生影响。比如在用户下单时能够自动获取用户定位,告知用户预期的时间和价格,以及发送给用户司机的状态等。


在明确前后台活动时,我们可以以用户历程为线,分步骤进行分析,确保每个环节中涉及到的前后台活动没有被遗漏。


(4)明确关键触点


在服务蓝图中我们可以标注用户与服务的主要接触点,针对触点进行设计是提升服务体验的一个重要和有效的手段。


在Uber打车服务中还有一些需要注意的触点,一是等待时间,这包括用户发起乘车请求后、付款时以及评价司机时,等待时间是造成用户体验较差的一个原因,因此需要注意标注出这些触点,并想办法优化,在服务设计中需要注意相关环节的应尽量简单,减少用户的等待。另外需要注意的是会对体验影响较大的触点,如司机态度不友好、乘客下车时忘记带随身物品等,可能造成失败的服务体验的触点应该精心地去设计,避免这样的情况发生。


通过以上过程我们完成了Uber服务蓝图的绘制,从中可以获取到Uber打车服务的整体概貌及其相互关系。



///


结语


服务设计的思维能够帮助我们从全局的角度去审视和思考,发现更多改善服务的可能性,从而为用户提供更好的体验。因此对于产品和设计等相关人员来说,不能仅仅把目光放在产品本身,而是要从服务的角度去正确看待产品和用户的关系,以用户为中心,找到用户与产品的每一个接触点来进行服务设计,这样才能保证用户在整个流程中都能得到好的体验。

文章来源:站酷 作者:百度MEUX 

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

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

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


好的表格信息展示都有这三个特征

ui设计分享达人

前言


表格作为组织整理数据的手段,可以有效的向用户展示数据信息,是B端产品中出现最高频的模块之一。

下图为典型的B端表格示例:



用户主要通过表格浏览获取信息、对数据进行筛选、排序以及相关业务处理等更多复杂操作、对比数据的差异与变化(关联和区别)。好的表格信息展示设计,应当是能够辅助用户高效便捷的实现以上场景中的诉求。

今天我们就来讨论表格设计中一个重要的问题——【应该如何考虑表格信息展示】。首先抛出结论,我们认为良好呈现信息的表格应当做到疏密适度、高效扫视、精简克制。


///


一、疏密适度


常见的表格信息包含文本、标签、状态样式、数值统计图表、关键信息Icon等。表格单元格是信息填充的基本单元,行高和列宽的定义决定了表格信息的疏密程度,进而决定了表格给用户的直观感受,因而下面分别从行高和列宽两个方向来探讨表格信息展示如何疏密适度。



1、定义合理的表格行高


a、行高模数设定

在具体设定表格行高时,由于表格中以文字信息为主,我认为可以参考文字排版的常用做法,将整个表格的行高分成文字行高、文字与分割线间距离,即上下间距两部分来考虑。文字行高可以设定为字号的1.2~1.8倍,文字与分割线间距离可以设定为字号的1~1.5倍。分为这样的两部分也比较符合开发同学写代码时的习惯(多行行高同理去设定)。



根据用户场景的不同,来选择模数倍数,需保证系统内使用统一的模数。比如,针对用户快速浏览获取大量数据场景时,可以选择1.2倍作为模数,列表更为紧凑,同样扫视范围内,可获取更多信息。


b、为小屏幕考虑一屏显示的行数

表格行高决定屏幕内能呈现的行数,即用户在一屏内能获取信息的数量,主要影响用户纵向对比数据的效率。对于1920*1020(包含该分辨率)以上的大屏用户,对于一屏显示行数的感知不强,但对于1366×768、1280*720等这类小屏,显示行数有限,用户进行纵向数据对比的效率就会有所降低。在设计前,应当充分了解目标用户的行为诉求,了解目标用户设备屏幕分辨率的占比分布情况,有针对性的设置行高。


c、用户自定义行高的场景

B端产品的特点之一是通用化,覆盖用户角色多样。然而用户个体对于表格信息呈现密度的诉求经常是有所差异的。比如个人视力的原因,有些用户喜欢表格行高值大一些,看起来舒适透气,便于阅读。而有些平台用户由于很熟悉线下excel表格模式,希望线上的表格也尽可能像excel那样紧凑,以便他们在一屏内看到更多的数据,进行对比,提升工作效率。产品为了让不同用户都能获得较好的体验,可以考虑把表格疏密度的设置开放给用户,建议不是完全开放给用户去调整尺寸,而是给出一定阶梯度的快速选项,例如舒适、标准、紧凑三种高度来满足用户需求。

例如,Gmail提供默认/标准/紧凑三种表格密度设置,如图:



2、灵活扩展的横向空间


通过对表格固定位置与列宽的调整,扩大表格数据空间,使信息不局促,空间更透气,保证横向扫视易读性。


a、列宽极限值设定

设计师需要根据表格承载内容定义表格的列宽,应包含最大/最小/默认列宽的定义以及使用规则。

我推荐的一个规则是:

规则1:当相对列少【浏览器宽度-页面其他模块 > 全部列的默认宽度和】,则各个列自动等比拉伸,撑满屏幕;

规则2:当相对列多【浏览器宽度-页面其他模块 < 全部列的默认宽度和】,则出横向滚动条,每列宽度为默认宽。

另外需注意最小值设定时应避免信息展示出现【对联式表格】。对联式表格最大的问题在于,一屏内展示的行数有限,当用户纵向对比数据时,需往复滚动多次,记忆压力大;横向扫视时,阅读视线不能一直保持左右横向预览,而是不停上下左右切换,使用体验不佳。



b、横向『偷取』屏幕外空间、行高模数设定

当压缩列宽也无法在有限空间内展示大量的数据指标列时,我们可以借助横向滚动来『偷取』屏幕外更多空间。横向滚动需用户拖动滚动条进行浏览,有一定操作成本,所以要结合业务实际情况选用是否利用屏幕外横向空间。

随着行和列的增加,用户的瞬时记忆会达到极限,超过“7±2原则”的范围,用户需要依靠辅助信息去阅读表格内的数据,防止遗忘某列数据的意义。因而当表格数据列较多横向滚动时,建议为用户固定重要信息列,如标题列、操作列。同时用户浏览表格时是符合F型扫视原则的,建议固定列显示在表格左侧,方便用户从左至右浏览数据、从上至下对比数据时能够清晰定位当前所浏览数据的主体是什么,同时可根据需要快速发起操作。



同理,用户拖拽纵向滚动条来阅读数据时,可固定表格的表头,帮助用户在阅读过程中清晰知晓单元格数据的意义。


c、用户自定义展示信息

针对需展示大量数据的情景,我们除了【偷取】屏幕外空间外,可以根据B端产品提供的数据表格是覆盖全部用户角色的全量数据的特点,让不同用户角色来自定义想要浏览的信息,从而提升表格的可读性。下图为百度信息流推广平台的自定义列功能,用户可根据需要选择展示的数据列,系统将在用户完成选择后,主动帮用户保存自定义内容,下次登录后,表格依然按照用户定义的数据来展示。



///


二、高效扫视


无论是在表格中要明确的定位数据,还是顺序阅读,高效扫视都是B端用户一个很重要的诉求,我们在设计表格时可尝试一些有效手段提升用户浏览获取信息的效率。


1、合理的对齐方式


数据信息本身包含多种格式,可遵守一个基本原则即文字左对齐,符合从左到右的阅读习惯;数据信息右对齐,方便数据大小的直观对比。

具体对齐方式可参考我们建议的方式:

文本字段:可点击字段、普通文本类、数字、字母等,长短参差不齐,左对齐;

格式化字段:日期、时间、部分枚举类等,字符数一致且较短的,左对齐。

数据字段:金额、数据、百分比。带小数点等数据,方便对比为主,右对齐。



2、去除视觉杂音,强调对比关系


a、正确使用分割线,实现对表格行与列的强调

横向分割线可强调行内信息的连续性。垂直分割线在缩减元素之间的距离后也能区分不同元素,更好的强调纵向数据对比。但只要遵循良好的对齐方式,通常不展示纵向分割线,避免信息干扰。因而表格中通常仅使用横向分割线和底色分割,提升表格阅读效率。



b、斑马线作用有限

斑马线即隔行(列)变色。它能让行(列)间界限更为明显,但由于与分割线的作用类似,起到的作用有限,可针对不同场景酌情考虑是否使用。比如针对不同类型的数据(如总和、平均值)使用不同底色来区分,可以更突出强调该数据。要注意的是,隔行(列)换色的两种颜色不能反差过大,否则看来太“跳跃”。

对同一类数据而言,分割线就已经能够明显区隔,所以可不使用斑马线,但需要给出单行的悬浮状态,强化横向导视,避免出现列数过多引起数据错行的问题。



3、突显重要内容的视觉重量


前面我们提到表格呈现的数据信息除文本外,还有其它一些可视化数据。可视化一方面提升了列表视觉表现力,增加差异化,另一方面让内容更加突出,提升阅读效率。例如:数据列中数据异常时,最好可以醒目的形式突显,让用户一进入页面就能快速注意到异常状况。



///


三、精简克制


体验好的表格一定是克制的,克制应表现在信息的适度隐藏以及内容折行与截断展示原则。


1、适度隐藏信息


a、隐藏低频操作

当表头需要承载排序、表头筛选、提示等功能时,不建议一股脑的将所有功能展示出来。用户对表头的诉求是定位数据指标﹥执行操作的,因此可根据具体业务定义展示哪些操作,将其它操作隐藏,有需求时用户主动触发再展示。比如,百度搜索推广平台的推广管理页面提供了全局筛选,所以表头筛选对于用户而言是相对低频的操作,我们选择隐藏表头筛选的图标,当用户鼠标HOVER表头单元格时再展示。



对于表格行内的操作我们也应当进行优先级排序,为用户专门设置操作列展示高频核心的操作,其它相对低频的次要操作可隐藏在相关数据单元格中,用户有诉求时hover对应单元格即可快速发起操作。



b、隐藏辅助信息

表格中的有些数据指标是综合纬度的,当用户关注点定位于该指标时,需要通过细分数据来理解、分析。指标的细分纬度信息虽能起到辅助用户更好理解数据指标的作用,但如果全部拿出来在表格列展示,会让表格变得臃肿不易读,此时可以考虑采取一定设计手段去隐藏这些信息,把触发展示的自由度交给用户,也更符合用户逐级查看的场景。例如,百度搜索推广平台中关键词列表中,质量度指标是由多条数据共同决定的,我们采用了将细分指标聚合在气泡卡片中,当用户HOVER质量度得分数据时展示出来。



再比如,有父子层级关系的数据,可以通过父子折叠表格将子信息默认隐藏,用户根据需要,去展开查看详细的子信息。



2、设定折行与截断规则


B 端业务的数据信息复杂多样,信息内容的长度高度是多样不可控的,很多内容会超出我们限定的最大列宽,最大列高,我们应当给出折行与截断原则去约束内容的展示,而非总是为具体情况而做特殊设计,破坏体验的一致性。

截断折行原则设定时要细分,不能简单粗暴的一刀切,比如一行截断这种,如日期、时间等固定格式内容,拖动列宽后文字应折行而非截断展示,避免影响用户误读。再比如很多业务实体标题字段是格式化的,即标题前面部分可能都是一致的,这时候如果简单的截断,用户就需要逐一Hover才能找到定位到要找的数据。因而折行与截断原则,我们建议是给出三种:单行截断、双行截断以及自适应截断,根据具体业务情景选择。



文章来源:站酷    作者:百度MEUX

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

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

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



js高效修改对象数组里的对象属性名

前端达人

有些时候,我们前端从后端拿过来的JSON对象数据,某些字段并不是前端想要的,需要对一些字段名进行重命名。一般修改对象数组的对象属性名,最简便的就是通过遍历对象数组的方法进行修改,但是用这个方法,如果处理的数据量很大,它的执行效率是非常低的。下面介绍一个更高效的方法,即通过正则的方法进行过滤修改。

JSON.parse(JSON.stringify(data).replace(/name/g, 'new_name')) //data为数组,name为修改前,new_name为修改后

解释:1)JSON.stringify()把json对象转成json字符串;

          2)使用正则的replace()方法替换属性名;

          3)JSON.parse()把json字符串又转成json对象。

修改多个属性:当要修改多个属性名时,多次调用replace方法,可以链式调用。如下面说明

JSON.parse(JSON.stringify(data).replace(/name1/g, 'new_name1').replace(/name2/g, 'new_name2').replace(/name3/g, 'new_name3')...)




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

文章来源:博客园

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

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

js中push(),pop(),unshift(),shift()的用法小结

前端达人

1、push()、pop()和unshift()、shift()

这两组同为对数组的操作,并且会改变数组的本身的长度及内容。

不同的是 push()、pop() 是从数组的尾部进行增减,unshift()、shift() 是从数组的头部进行增减。

var arr = [1, 2];

2、push()和unshift()

向数组的 尾部/头部 添加若干元素,并返回 数组的 新长度

arr.push(3,4);         //返回 arr 的新长度 4

arr ;                        // arr = [1,2,3,4];

arr.unshift(0,0.5);    // 返回 arr 的新长度 6

arr ;                       // arr = [0,0.5,1,2,3,4];

3、pop()和shift()

从数组的 尾部/头部 删除1个元素(删且只删除1个),并返回 被删除的元素;空数组是继续删除,不报错,但返回undefined;

arr.pop();      //返回 4;

arr ;          // arr = [0,0.5,1,2,3];

arr.pop();      //返回 3;

arr ;         // arr = [0,0.5,1,2];

arr.shift();      // 返回 0 ;

arr ;        // arr = [0.5,1,2]

PS: pop()和shift() 不接受传参,即使传了参数也没什么卵用~~;

arr.pop(3) ;           // 返回 2;永远返回最后一个;

arr ;        // arr = [0.5,1];

arr.shift(1);    // 返回 0.5; 永远返回第一个;

arr ;        // arr = [1];

arr.pop() ;     // 返回 1;

arr ;        // arr = [];

arr.shift()     // 返回 undefined;

arr ;        // arr = [];

 


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

文章来源:博客园

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

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

日历

链接

个人资料

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

存档