首页

[收录量]史上最全的百度索引量下降原因分析及解决方案

seo达人

 

    索引量是流量的基础,索引量数据的每一个变动都拨动着站长敏感的神经,“索引量下降之后该如何着手分析”一直是各位讨论的热门话题。这次快排科技(vx:seokuaipai)孔宇又拔刀相助了,看看史上最全的百度索引量下降原因分析及解决方案吧。
    一、百度索引下降分析简图
百度索引下降分析简图
    二、导致百度索引量下降的常见原因--网站方原因
    1、内容数据所在的网址url未规范统一:
    1.1:自己站点url规范统一:多域名都可以200状态正常访问网页内容;一域名下出现多种url形式可以访问相同内容,如大小写url、url规则变更等。
    解决方案:选择主域名(或主url),其他域名下的所有url都301重定向到主域名(或主url),并站长工具提交域名改版(或目录url改版)
    1.2:外部平台使用己站数据::
    Ⅰ、市场合作,站点数据调用到其他平台上;内容主动外发,推广人员完整转发自有内容到高质量平台--这两个原因都有可能导致搜索引擎收录了外部平台的内容而拒绝了原网站内容;
    解决方案:使用站长平台链接提交工具的主动推送功能,及时提交网站新出现的链接,延迟将内容调用到其他平台的时间;
    Ⅱ、被镜像,用户通过其他举办主体的域名或url直接可访问己方内容。
    解决方案:关注域名解析安全和服务器安全;绑定唯一可解析的域名或唯一可访问的url;页面内容中链接使用绝对地址;
    2、站点受青睐度下降:
    2.1:网页内容相关
    Ⅰ、内容质量度下降
    解决方案:提高内容质量度,详见百度站长学院相关内容;杜绝简单拷贝,多做整合信息。
    Ⅱ、更新量及频率下降
    解决方案:稳定的更新频率,视内容发展情况,扩充编辑团队,生产更多新内容,让网站索引避免下降,持续增加。(当更新量及频率下降明显,那么配额就会下降,首先表现抓取频次下降,导致索引量下降)
    Ⅲ、时效性信息消失
    解决方案:时效性的信息,大部分一般在数据库不会长期保留,所以需要持续挖掘新的时效信息点,整合相关内容。
    Ⅳ、部分区域出现不良信息
    解决方案:杜绝大量外链软文、恶劣弹窗广告、非法敏感类信息、专门针对搜索引擎作弊的内容等
    Ⅴ、触犯惩罚算法
    解决方案:关注站长工具消息和百度网页搜索动态。按官方公告说明来整改站点,并进行反馈,然后等待算法更新。
    Ⅵ、特型url不被信任
    解决方案:定制各类url的索引查询规则;定位索引量下降的特型url;排查该类url当日、前一日、本周、历史索引情况;找出未被入库的数据可能存在的问题;处理完后,增强该类url与百度数据沟通(途径有sitemap、批量提交url、数据推送等)。
    2.2:站点被搜索引擎信任度下降
镜像
    Ⅰ、非法投票嫌疑(链接工厂等)
    解决方案:珍惜自己页面的投票权,对于劣质网页坚决不投票,尽量减少站点的导出链接。
    Ⅱ、主题变动(如从教育领域跨入医疗领域)
    解决方案:将旧领域的网页进行死链处理后向百度进行提交,封禁相关旧url的被访问权,然后再上线新主题相关内容,加强对百度的数据提交
    Ⅲ、受牵连
    相同ip下非法站点偏多,同一域名所有人举办的网站大都被惩罚且情况恶劣等
    解决方案:离开恶邻,获取搜索引擎的各产品的相关反馈方式,请求给予解禁,等待恢复正常索引。
    Ⅳ、政策性原因
    如香港主机、国外主机站点由于各种你懂的原因,稳定性可能较差
    解决方案:国内主机备案,合法符合政策经营
    3、网页模板相关
    3.1:主体内容区域对蜘蛛的限制:
    解决方案:取消登陆查看信息等限制,让蜘蛛便捷畅快的“采集”到己站数据
    3.2:启用了对蜘蛛不友好的技术:
    解决方案:对需要蜘蛛识别的内容,不要启用对蜘蛛不友好的技术来调用。
    3.3:响应式模板干扰蜘蛛识别页面类型(pc、移动):
    解决方案:提交特定的url对应关系(尽量parrten级);meta标记移动版本url及适合浏览的设备;自主适配;增强pc、移动不同模板源码标签的区分度,帮助百度识别页面类型
    4、源码相关
    源码错误较严重,如编码错误、标签使用错误等;源码改动严重,蜘蛛“采集”数据后重新观察分析;某类url下的TD(网页title、description)变化,如变化比例大、变化页面量大,页面进行更改后会重走建索引库流程,如果页面质量达不到建索引库标准会从线上消失
    解决方案:校验源码,准确的源码是蜘蛛“采集”数据进行分析的基础;link内链结构、url地址形式、页面主题、页面各区域html标记等尽量维持改动前的情况;逐步、分期更换TD(网页title、description),结合页面主题、用户实际需求来制定合理的TD,不欺骗不误导用户。
    5、已入库的url对蜘蛛状态有变化
    5.1:robots声明,禁止蜘蛛抓取
    解决方案:查看百度站长工具robots及抓取情况。
    5.2:url规则变化,原有url无法访问:
    解决方案:特别是linux和win服务器之间的数据迁移,可能会出现大小写url支持变化,确保各类url规则不变化。url必须重构的时候,做好旧新url301重定向,站长工具提交改版需求。
    5.3:提示错误页面:
    解决:由于误删,则可以数据恢复,并维持url对应网页内容的更新变化,提高抓取频次。如果确定要删除,那么提交死链,删除死链后,再robots禁止,这种情况的索引下降无需担忧。?
    5.4:被入侵:
    解决方案:防止url对蜘蛛进行非法跳转操作;防止url对应的网页内容对蜘蛛出现内容大变化,特别是一些违法乱纪的内容
    6、DNS、服务器问题
    6.1:DNS问题:dns不稳定;dns不安全
    解决方案:选择可靠的dns服务;沟通强调对蜘蛛的稳定性;防止dns解析到非正常ip;防止解析的网站ip频繁变动。防止dns管理漏洞,导致被恶意解析;防止dns解析挂靠在小代理等技术能力、管理规范、道德法律约束都欠缺的平台上。
    6.2:服务器问题
    Ⅰ、可访问性差
    解决方案:尽量让目标地区所有运营商来路的用户都能在3秒内打开网站,最佳1秒内;监控网站运行状态,合理设置目标地区的所有运营商监控节点及监控项目、监控频率
    Ⅱ、屏蔽百度ua或ip
    解决方案:多利用百度站长工具,查看百度抓取网页的情况,可见
    Ⅲ、bbs.zhanzhang.baidu.com/thread-15392-1-3.html
    Ⅳ、防刷压力值设定
    解决方案:将蜘蛛解析到专用空间;如出现访问陡增的ip,查看是否为蜘蛛再确定是否禁止访问。
    三、导致百度索引量下降的常见原因--百度方原因
    1、配额再分配
    同类数据量接近索引分配总额,配额量再分配,有升的就会有降的
    解决:超过竞品,争取高额分配。
    2、数据异常错误
    Ⅰ、错误惩罚:应对某类作恶行为而新算法上线,但由于蝴蝶效应,导致部分站点被错误惩罚而清除大量索引。
    解决方案:反馈百度方,请求解除惩罚。
    Ⅱ、地区性数据异常:部分地区数据抓取或查询异常,导致误判站点情况而清除相应索引数据或输出错误索引量,如百度dns系统升级事件。
    解决方案:反馈百度方,由百度检查各地蜘蛛执行情况。
    Ⅳ、接口调用数据错误、数据丢失、数据备份衍生异常
    解决方案:反馈百度方,由百度检查相关数据情况。
文章来源:快排科技

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

 

GDP“报复性”增长!猪肉价格“报复性”下降!

seo达人

 

中新网客户端北京4月16日电(记者 李金磊)16日,中国一季度经济数据出炉,中国经济取得开门红,GDP、消费、投资、出口等主要指标呈现两位数的增长。同时,就业物价等民生指标总体稳定,猪肉价格出现“报复性”下降。

4月16日,国新办召开一季度经济数据发布会。<a target='_blank' href='http://www.chinanews.com/' >中新网</a>记者 李金磊 摄
4月16日,国新办召开一季度经济数据发布会。中新网记者 李金磊 摄

一季度GDP同比大增18.3%

国家统计局数据显示,初步核算,一季度国内生产总值249310亿元,按可比价格计算,同比增长18.3%。

18.3%,两位数增速,这个数字非常漂亮,在外界看来,这可谓是“报复性”增长。

不过要看到,增速的大幅反弹,主要是受到上年较低基数、员工就地过年工作日有所增加等不可比因素影响。

受到疫情的影响,2020年一季度GDP出现了负增长,同比下降6.8%。此后,中国经济在全球主要经济体中率先恢复正增长,2020年全年增长2.3%。

数据显示,2021年一季度GDP比2020年四季度环比增长0.6%;比2019年一季度增长10.3%,两年平均增长5.0%,这表明我国经济稳定恢复。

资料图。张舰元 制图
资料图。张舰元 制图

主要经济指标取得两位数增速

从消费、投资、出口等主要经济指标来看,同比均取得了两位数的增幅。

具体数据显示,一季度,社会消费品零售总额105221亿元,同比增长33.9%;全国固定资产投资(不含农户)95994亿元,同比增长25.6%;货物进出口总额84687亿元,同比增长29.2%。出口46140亿元,同比增长38.7%;进口38547亿元,同比增长19.3%。

从季度环比看,主要指标继续保持增长,一季度规模以上工业增加值比上年四季度环比增长2.01%,社会消费品零售总额环比增长1.86%,固定资产投资环比增长2.06%。

从两年平均的增速看,一季度国内生产总值两年平均增长5%,规模以上工业增加值两年平均增长6.8%,社会消费品零售总额两年平均增长4.2%,固定资产投资两年平均增长2.9%,货物进出口总额两年平均增速也接近10%。

“所以,综合这些指标来判断,可以说,总体经济处于稳定恢复的状态中。”国家统计局新闻发言人刘爱华16日在新闻发布会上说。

再来看收入、就业、物价等民生指标,总体上是收入涨、失业率降、物价持平的态势。

——居民收入继续增加

数据显示,一季度,全国居民人均可支配收入9730元,同比名义增长13.7%,两年平均名义增长7.0%;扣除价格因素同比实际增长13.7%,两年平均增长4.5%。

按常住地分,城镇居民人均可支配收入13120元,同比名义增长12.2%,实际增长12.3%;农村居民人均可支配收入5398元,同比名义增长16.3%,实际增长16.3%。全国居民人均可支配收入中位数8014元,增长12.7%。

企业效益的改善为居民收入增加奠定了基础。在企业利润方面,1-2月份,规模以上工业企业利润总额同比增长1.79倍,两年平均增长31.2%;规模以上服务业企业扭亏为盈,实现利润总额达到了1690亿元,上年同期是亏损的。

招聘会资料图。<a target='_blank' href='http://www.chinanews.com/'>中新社</a>记者 武俊杰 摄
招聘会资料图。中新社记者 武俊杰 摄

——城镇调查失业率下降

就业是民生之本。一季度,全国城镇新增就业297万人,完成了全年预定目标任务的27%。

3月份,全国城镇调查失业率为5.3%,比2月份下降0.2个百分点,比上年同期下降0.6个百分点。

不过,刘爱华提醒,3月份16-24岁年轻人的调查失业率是13.6%,比上年同期上升,说明年轻人就业还面临一定的困难。这可能和春节节后大量年轻人进入劳动力市场,带来摩擦性的失业有关系,一定程度上可能也反映了就业市场在趋于活跃。但年轻人就业问题的解决还需要一段时间的消化,这方面总量的压力确实是存在的。

图为4月9日,山西太原一超市,消费者在选购猪肉。<a target='_blank' href='http://www.chinanews.com/'>中新社</a>记者 张云 摄
图为4月9日,山西太原一超市,消费者在选购猪肉。中新社记者 张云 摄

——猪肉价格大幅下降

从物价看,一季度居民消费价格同比持平,其中3月份由上月的下降0.2%转为上涨0.4%,涨势比较温和。

近日多地猪肉价格重新回到了十几元的时代。刘爱华称,在一系列保供稳价的措施作用下,生猪产能得到了显著恢复。今年一季度,生猪存栏同比增长了29.5%,连续六个季度环比增加。在生猪产能恢复的作用下,个别地区猪肉价格回落比较多,从全国居民消费价格来看,3月份当月猪肉价格同比下降18.4%,环比也是下降的。综合生产、供应改善的情况来看,猪肉价格进一步回落是有基础的。

刘爱华称,另外一方面,粮食价格最近也比较稳定。今年以来粮食生产形势比较好,冬小麦苗情是略好于往年水平的,从这方面来讲,粮食安全也是有保障的。所以,不管是从猪肉价格还是从粮食价格来看,CPI上涨的压力不大。(完)

来源:中国新闻网 

 

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

 

学会这 7 个技巧,画出完美图标

高劲

图标是 UI 设计中最基础也是很重要的部分,辅助人们更好的理解功能内容。随着扁平化设计风格的普及,图标的风格越来越简约,看似简单的图形,实际要准确的表达含义,也是需要注意一些方法的。以下是图标设计技巧的分享内容:

设计图标是一个艺术创作的过程,里面也有很多需要被关注而不可忽视技巧。要知道如何设计好图标,是对于 UI 设计师来说是不可或缺的重要技能。

在我设计图标的时候,我个人认为有以下7个规则:

简单

一个图标一个非写实的表现。不需要担心图标不够真实,消除不必要的细节,用基本的形状只保留最基础的部分,让这个图标更容易被理解。

学会这 7 个技巧,画出完美图标

有时候图标会因为有更多细节而传达了更复杂的意思,这反而是样式问题!

一致性

在整个图标系统中,你的图标要保持同一种样式来确保图标完美协调。比如同样的形状,填充,描边粗细,尺寸等。要制定好可以被复用的栅格,规范和样式。

学会这 7 个技巧,画出完美图标

如果可以的话,尽可能重新设计这些图标,而不要混入其他不同风格的图标来使用。

清晰

设计「完美像素」的图标,特别是在图标非常小的时候。这样图标的描边就可以保持锐利,不会有模糊。注意半像素的情况出现,尽量避免小数点参数。

学会这 7 个技巧,画出完美图标

这也可以帮你保持图标的辨识度,在你等比缩放他们的时候保持清晰。

空间

确保你的图标的所有形状有足够的空间。笔画和空间过于狭小会使图标更难被理解。

学会这 7 个技巧,画出完美图标

最少给2px的负空间

视觉调整

确保你的图标看起来是正确的,适当的调整元素的对齐来达到视觉上的平衡。

学会这 7 个技巧,画出完美图标

不要只关注参数,如果有需要就用上你的眼睛来衡量,轻微移动这些元素。

布局规格

所有图标保持同样的尺寸,在图标周围定义一个可调整的内边距范围,尽量让元素设计在这个范围内。不要挤满所有元素。

学会这 7 个技巧,画出完美图标

当图标需要额外控件时可以超出这个内边距范围。

测试验证

在设计阶段,你的图标可能看起来是完美的,但还是需要将图标放到实际的界面环境中,测试他们是不是完美,有没有可以调整的细节问题。

学会这 7 个技巧,画出完美图标

确保每个新增的图标和其他图标显示一致。

你在设计图标过程中,有用到以上的这些技巧吗?可以在评论区告诉我,你是怎么怎么设计图标的。


文章来源:优设网    作者:布莱恩臣



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



深度解析B端导航设计-交互篇

涛涛

一起深度用案例解析B端导航设计中的交互





hello各位在B端奋斗的小伙伴们,你是否会时常因为面对导航多种多样的形式从而面对需求时无从下手,你又是否因为虽然见过了很多的案例仍然不得导航设计的要领和精髓,没关系,今天我们就一起来解决这个在B端设计中困扰我们多时的难题,从交互的角度结合案例对导航进行一个立体的剖析


如果你准备好了那么就请系上安全带现在就发车


要探讨一个概念那么首先需要知道的是其精准的定义,才能展开研究,而所谓的导航(Navigation)的精准定义可以阐述为:是一种对信息的分类,帮助用户找到想要的信息、完成预期的任务



如果你觉得这个定义很抽象,那么不妨从这个角度去理解,如果说任何界面上的功能都能够找到在我们物理世界的隐喻的话,那么导航映射的就是我们物理世界中的路牌、导览、线路示意图等,因为立足于其功能而言,导航的作用用一种大白话的说法就是:告诉用户你从哪里来,你在哪里,你可以去哪里



由此我们对导航有了一个较为准确的把控,那么请在座的各位快速回答我一个问题,你能够告诉我以上6个内容那些不是导航吗?


3

2

1


OK公布答案,如果你的答案是2和6那么恭喜你,你对导航的理解是较为优秀的,2和6的名称大家想必也不陌生那就是:菜单,但是不夸张的说日常的工作中仍旧有不小数目的一波同学搞不清楚这二者的区别,那么如何对二者进行一个有效的区分呢


同样是从定义来入手,参照前面我们给导航进行的定义方式,菜单就是:是一种对动作的分类和集合,

帮助用户快速达到某个功能,也就是说当你对菜单的某一个栏目进行点击时会立马生成一个具体的动作,而导航则是对信息的分类与合集






那么明白了这点我们就可以对导航进行分类了,提到导航的分类大家一定会脱口而出一堆词汇如:顶部导航、底部导航、左侧导航、舵式导航、标签导航、菜单导航……没错这的确是一种分类,但他只是导航在外观这个维度的分类,并不是我们今天从交互、结构层去讨论的重点



而立足于结构来对导航进行分类又将是如何呢?较为科学的来说是以下几类:

全局导航

局部导航

辅助导航

内嵌导航

友好导航

远程导航

下面我们来对这6类导航进行一步一步的具体分析


1.1 全局导航



所谓全局导航是指他可以覆盖整个产品的通路,往往表现为产品的一级分类(而且大部分情况都是一级分类),他不一定包含全局信息,但是一定可以让用户可以去到其目标的关键节点


1.2 局部导航



所谓局部导航是指在同一个框架中,可以到这个节点上的上下级通路,他一定存在于严格的父子级关系中


1.3 辅助导航



所谓辅助导航就是提供用户在全局/局部导航不可达到相关内容的快捷途径(这个快捷途径在本产品内)


1.4 内嵌导航



所谓内嵌导航也叫上下文导航,是指嵌入页面自身内容的导航,通常同在上下文超链接、引导搜索等


1.5 友好导航



所谓友好导航是指它可以为用户提供一个便利的前进途径,在需要的时候能够找到入口信息,通常在不需要的时候成隐藏状态


1.6 远程导航



所谓远程导航是指不包含在产品结构中,以独立的方式存在产品内,通常表现为网站地图、索引表(地址选择、品牌选择)等


1.7 导航的常用UI表现形式


在从结构的层面了解了导航的基本类型之后,顺便给大家提一提导航的外观,这里并不展开说,大家需要知道的是导航的外观使用遵循的是“同构异型”的准则,什么意思呢?同样的结构(比如同一组数据集:商品、商品名称、商品价格)可以嵌套进入不同的外观如:卡片式、列表、详情……这个视具体的业务情况、使用场景而定



常用的导航外观基本分为以上七种外观即:菜单栏、树状表、顶栏、选项卡、面包屑、文字链接、步骤





知道了导航的结构分类和使用场景,那么不妨来给大家一些关于导航本身的小贴士作为原则参考解决大家在实战中的一些问题


2.1 导航尽量扁平、保持稳定就算要多一次点击



对于B端产品来说稳定相当重要!因为B端产品对于用户来说使用和学习成本、门槛较大,如果你很频繁地对其路径进行修改调整,用户就会因为产品不符合操作的习惯、心智模型对产品很容易滋生负面情绪,对于产品本身来说这样的伤害是需要尽量避免的


2.2 最好便于拓展



还是从稳定的方面来说,我们需要保证的是导航的变化不会因为产品的变化而发生很大的变化,举个很简单的例子就是当我们的产品的功能增多时,尤其是二级导航的项目增多,导致原来如果是横向布局的导航不得不改成纵向布局的导航,这就所谓的因为产品的变化发生很大的变化,所以在选择导航布局的时候就需要打下一个很好的基础便于日后的拓展


2.3 清晰可见,操作易懂



这是站在一个外观和交互共同的层面去看,导航的大小一定要足够,而且其位置一定要是用户认为足够清晰的,确保在视觉反馈的的层面对于用户来说是友好的,其次就是所有的可交互区域需要有积极的响应,与内容区要有对比,可以将其称为界面的热情度,这也是一个优秀界面的自我修养


2.4 导航项可以重复



一个页面中允许出现两个主导航,同一个界面中允许出现两个同样的导航项,并不是说一个项在导航中只能够出现一次,并没有那么死板


2.5 不要让用户有惊喜



这对于To B 的设计来说十分重要,不同于To C的产品,B端产品的一个重点就是要符合用户的预期,所以我们一定要避免“因为有趣所以这设计”这个思路


2.6 导航的反馈需要保持一致



界面上面所有的界面编排,所有的组件,所有的控件,所有的模式都是可以找到隐喻的,比如文字链和带“跳转”的文字链,它代表的隐喻是不一样的,所以我们就需要赋予其不同的外观和交互响应对应户进行反馈


2.7 导航不一定是有层级关系的



回到最初导航的定义,它的本质是对信息进行分类,让用户快速完成任务,这也是导航的本职工作,很多时候不一定要拘泥于这个项目它应该严格存在于哪个层级之中这样的思路进行设计,而是根据用户的需求,如何将这个项目合理的分类于最适合的集合之中


2.8 按权重布局的三种导航样式



这是一个立足于外观的点,根据大量的案例分析和眼动测试,目前市面上最为常见的按照信息权重布局的导航可分为:横向式、纵向式、纵横式,由于这部分我们不展开说,所以直接在上图整理了每种布局的特征、优劣势和应用场景






知道了上面的分类和注意事项之后,下面我们用一个具体案例来对导航的交互层面设计进行一个深度体验(因为此内容十分精彩也涉及到机密,所以不在这里做具体展示,以示意的方式来叙述),总共分为六步,看看这是否也是你工作场景中比较头疼的呢


3.1 搞清楚每一个导航项的定义


需要搞清楚导航项的定义是因为导航项的定义决定了你的目标界面是什么,所谓的目标界面就是导航所引导你到的哪一个分类的信息处



所以我们首先先来整理一下导航中每个导航项的界面定义,这也是我们日常工作中对导航梳理十分重要的一步



当问题被罗列出来之后我们就会自然而然的产生各种各样的疑问,比如导航分类之间存在有的存在流程上的关系,但是有的分类却并不属于流程,这是为什么呢?再比如有的导航分类和导航项之间名字一样但内容却不一样这又是为什么呢……(想一想这是不是我们工作中也经常遇到的疑问呢)这都是后面我们需要去优化的地方


3.2.搞明白用户的使用路径


保留住上面的问题,我们来做第二步,这一步我们需要搞明白用户的使用路径,因为这样我们可以很好的给任务类产品做一级分类



通过基于不同角色的用户体验地图我们可以得出不同的用户操作路径,于是便可以很顺畅的得出这一套操作流程的大框架



基于业务中的任务链路推导出每一步的操作路径,于是我们就可以将用户的操作路径就可以提炼为一级导航


3.3.区分一下权限


得出了一级导航,下面我需要角色的权限进行一下区分,这也是B端产品的必备属性



于是我们为每一个导航项进行了角色权限的梳理对应,那么一级导航中每个导航分类所对应的角色也瞬间一目了然,这里面多说一句,当用户用不同权限的账号登录产品时,能看到不同的内容这才是一个优秀的拥有权限设计的导航


3.4.区分一下界面数据性质


到了这一部分对于一些完全没有接触过数据的同学来说理解起来可能会一些难度,我们首先需要知道的是:“相同的数据来源,可以帮我们区分界面性质,而且相同的数据来源,往往会有一组相同的界面来围绕


在此需要记住三个概念:

1.元数据:数据属性的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能,例如一件商品、一个客户

2.记录集:指定数据库中检索到的数据集合,例如订单列表、发货列表

3.关系列表:对来描述对象和对象的关系,比如你和我是好友,你和我在同一个企业微信群



于是我们为导航项进行数据性质的区分归类,也就是说相同数据类型的实体往往围绕着某个元数据并且包含系列的界面,当我们这里整理完后发现,相同数据性质的实体(这里可以理解为导航项)貌似可以归类在一起,这是我们作为分类的一个依据



根据相同的数据性质将导航项归入应该归入的二级导航中,此时不妨和最初的版本进行对比,我们的一级二级导航相对而言已经通过改版清晰了很多


3.5.搞明白用户的使用频次


这一步其实是比较好理解的,很简单的法则:“高频次高优展示,低频次降低权重甚至隐藏”这是针对于二级导航中每个导航项的排布进行的设计。这里不妨把频次由高到低量化成为:实时关注、每天关注、每月关注、很少使用、极少使用这个几个概念,分别用五角星、三角形、矩形、圆形、菱形进行代表


而关于使用频次的高低甄别一般我们可以通过用户调研和数据埋点的两种常用方式来进行,这里并不展开讲



于是我们可以将使用频次作为一列新的参考放入导航项的表格中,瞬间清晰明了



根据使用频次调整每个导航项的顺序


3.6.设计合适的导航布局



这一步涉及的就是外观了,不妨回顾一下2.8中对于导航的三种常见布局,根据产品的操作复杂程度等综合需求,我们选择了第二种形式成为最终形式




文章来源:站酷  作者:核糖bro


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





用左导航还是顶导航?

涛涛

做中后台产品的设计,基本都逃不开导航布局这个大框架。

基于用户的 Z 字形扫描行为,重要的导航应当选择左侧导航或顶部导航

用左导航还是顶导航?我从这4个角度做了一个完整分析!

可是横着竖着有那么大差别吗?被人问道为什么这么选择,该如何回答?

今天给大家些灵感,从以下四个角度分析一下:

  • 科学角度
  • 布局角度
  • 尺寸适配角度
  • 统一性角度

科学角度

JR Kingsburg 曾经做过一次实验(A comparison of three-level menu navigation structures for web design),研究 3 层导航中,哪种组合使用效率更高。

这三层中,每一层都有横向和纵向两种可能性,所以实验总共有 2×2×2=8 种对照组:

用左导航还是顶导航?我从这4个角度做了一个完整分析!

他为这 8 种导航布局做了不同电商原型,让用户来买东西,并记录各种数据,结果发现了很多有意思的数据:

用左导航还是顶导航?我从这4个角度做了一个完整分析!

综合这些数据,看起来整体表现较好都是「左上上」、「左左上」、「左左左」。

科学虽然很严谨,却缺乏灵活度,例如本次试验的场景单一(电商购物),而且用来测试的界面未免也太简陋了吧!

用左导航还是顶导航?我从这4个角度做了一个完整分析!

所以我们再从其他角度思考看看。

布局角度

从占据面积的角度来看,横向导航比纵向导航省地方,因为只要细细一条就好了。

然而,选项数量不多时横向是可以;选项多起来,横向导航就很拥挤了。

毕竟纵向导航方便滚动,横向导航很少有用户会尝试滚动查看的,「…」也不是什么方便的操作。

用左导航还是顶导航?我从这4个角度做了一个完整分析!

所以,如果确定选项少可以选横向,不确定或者数量多建议保险起见选纵向。

尺寸适配角度

任何导航,都要占据屏幕不少空间,这对尺寸适配都是一件麻烦事。哪怕产品并不需要为移动端做响应式布局,只要是网页端,就得考虑窗口尺寸的变化问题。因为设计师的 Mac 和大量用户的 PC 甚至平板电脑之间,展示上的差异真的不小。

横向导航占据空间最小,同时也是最难做尺寸适配的。尤其是如果上面除了导航之外,还放有各种 logo、头像、图标、搜索…各种东西时。横向导航一般都有三种状态:展开、折叠和收起。但是纵向导航就简单了,只需要两个状态:展开和收起。顶多再让展开状态的宽度能够自适应变化或手动拉伸就差不多了。

用左导航还是顶导航?我从这4个角度做了一个完整分析!

这么看来,如果产品需要考虑很多不同尺寸适配的问题,纵向导航是最简单的选择,除非横向导航的内容不多维护起来不麻烦。

统一性角度

我之前为了研究确定按钮放在左边还是放在右边好,做了一系列实验分析,结果得出超出我预期的结论…放哪都没多大问题,统一就好。于是,我想这个问题也可以类比一下。

大部分网站都是横向导航,所以说如果产品是以网页版为主,且用户会经常穿插跳转使用其它网页,那么也使用横向导航比较符合习惯。

而无论 PC 还是 Mac,系统页面的导航在左侧的情况比较多,所以说如果产品是系统软件的话,纵向导航比较符合习惯。

用左导航还是顶导航?我从这4个角度做了一个完整分析!

然而,更更更更更重要的是,千万不要同一个产品不同端或不同子系统的导航不一样!用户很可能一会儿用这个,一会儿用那个,结果操作习惯换来换去,人都弄晕啦!还有,就是改版换导航肯定要让老用户不满,好不容易养成习惯改起来容易吗?所以说,决定导航布局时还是要谨慎才好哦。



文章来源:优设  作者:
体验进阶


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



情境分析法(SCQA)让你用问卷发现更本质的商业问题

鹤鹤

前言

 

在企业工作中,每一个问卷调研都始于一个商业问题,问卷的质量也决定了最终结果是否能对业务起到帮助。本文将从定义问题-问卷设计-数据清洗与分析-报告撰写这四个基本步骤相对完整地阐述企业问卷调研,希望可以给大家提供一些研究方法上的思路。



定义问题:情境分析法(SCQA)


在商业问题解决的过程中,既有公司内部的因素,也有外部行业的因素,影响因素错综复杂;周围的环境也比较容易发生变化,具有很大的不确定性;同时又要保证解决方法的可落地性,产生实际的价值。相对来说,会比较复杂。在进行问卷设计之前,更有必要的是将问题梳理清楚,再决定是否采用问卷这种方式。

 

1.1 结构化思考:使用SCQA描述项目


SCQA是将不确定性考虑在内,一种结构化的问题分析方法,可以比较好地系统思考、查漏补缺。它包含四个环节:

  • 情境(Situation):由大家都熟悉的现状或事实作为起点,包含对象、所处阶段等

  • 冲突(Complication):实际情况往往和我们的目标有冲突,颠覆了稳定的状态。说出行动的原因,包含威胁、机会和等着我们去克服的困难点

  • 问题(Question):基于冲突提出问题,要怎么解决这个困难点

  • 回答(Answer):我们的解决方案是什么,定位出需求点

 

undefined

 

1.2 如何洞悉情境和冲突:搞清楚为什么做调研


假设我们拿到上述案例作为调研项目,可以有两种方式去进行洞悉情境和冲突

一是思考为什么要做这个研究;二是跟相关利益者访谈尽可能多地获取信息。


1)思考为什么要做这个研究:

- 需要回答什么问题?

- 为什么回答这些问题很重要?

- 打算如何使用最终的调研结果?


2)跟相关利益者访谈:

- 核心业务方是谁?其他业务方是?

- 每个业务方的关注点是什么?难点是什么?

- 各个相关方的目标之间是否冲突,是什么冲突?

undefined

根据上述方法,可以得到对应的情境和冲突:


情境:目前有三种产品方案A/B/C,分别对应的价格为100元/1000元/10000元。通过上述思考和信息了解,会知道这个事情和谁有关,在这个事件中承担什么角色。


冲突:B的销量不佳,跟其他方案差异不明显,瞄准客群很有可能有重叠,未成交客户难转化,希望可以方案B进行调整。在用户层,可能其他方案中的功能能满足需求,不需要购买方案B;在公司层,整体收入结构可以更优化、健康;在业务层,系统和流程可能不太合理,有些可能需要重构。


 

1.3 问题拆解其实是建立一个假说/逻辑树的过程


我们可以将问题进行拆解,拆解应遵循MECE原则(相互独立且完全穷尽),这么做的好处是可以把问题进行逐层分解,逐级分析,最大可能保证需要考虑的因素全面不遗漏。

 

undefined

 

案例中的问题,可以从用户方面、竞品方面、成本/利润方面进行拆解,针对每一个层面的问题又可以进行拆分。 

undefined

对问题进行细致拆分之后,针对每个问题有不同的解决方案,有一些问题可以用问卷来解决,有一些问题需要使用其他方式进行解答。

问卷并不能解答所有问题~~

 

undefined



问卷设计


2.1 问卷的用途:定量为主


一般通过问卷来进行大样本的数据收集,主要以用户的基础数据、行为数据和态度数据为主,既可以作为独立的调研项目,可以跟其他方式进行结合,比如说结合访谈、结合企业内部的数据,本文比较推荐的方式是多种方式结合进行交叉验证,提升调研结果的可靠性。


undefined

 

 

2.2 问卷设计的原则

undefined

基于第一部分的定义问题阶段,已经对问题进行了分析,在此基础之上,我们需要确定哪些问题可以由问卷进行解答,并明确问卷的研究目标与参与对象。特别地:利益相关方(项目组成员间)在项目前期应该达成统一,避免后续产生分歧,付出额外的沟通成本不说,还有可能相互甩锅。


undefined


2.3 问卷的基本结构


一份问卷的基本结构包含标题、招募语、甄别题、主问卷、用户基本特征、结束语。


undefined


 

 

2.4有逻辑的设计问题


一份有效的问卷需要从如何提问、如何措辞、如何设置答题逻辑、如何设置题目选项这些方面去考虑,设置有效的问题。以下是问卷设计中的一些基本原则:

undefined

 

2.5 提升回复率的tips


undefined

 

  • 个性化:在说明信件/邮件或邮件开头注明回复者的名字、研究活动的目的、所需时间。向回复者强调他们反馈信息的重要性。需要注意的是,这里出现信息错误,会降低回复率。

  • 控制篇幅:问卷完成时间不要超过10分钟,注意控制问题数量,避免出现需要大量思考、较难回复的题型。

  • 用户激励:奖励参与者油卡/现金红包/优惠券等,昂贵的激励物没有特别显著提高回复率,所以小的激励就可以。


 

数据清洗与分析


3.1 数据清洗原则

undefined


  • 剔除有效范围外的数据:排除异常作答时间值(比如作答时间为10秒),判断为作答不认真。可以根据题项来确定,一般10道题设置筛选出60秒之内的问卷。

  • 剔除连续重复值:在时间范围内,再核查问卷是否出现连续重复值,出现的问卷予以删除。如果问卷数量较大,可以使用STATA软件编码或Excel条件函数判断进行处理。

  • 剔除违背逻辑一致性的数据:在时间范围内,核查问卷是否存在前后逻辑不一致的题,比如总体满意度打分为非常满意,但后续题目都选择了非常不满意。

  • 剔除有缺失值的数据:严格来说应该将有缺失值的用户予以删除,但有时候回收样本量没有那么大,则可保留。


 

3.2 数据分析方法


数据分析方法有非常多,要在众多的分析方法中选择一种也是比较难的事,无论选择什么样高大上的方法都是其次,最重要的是选择的分析方法能说明问题,能体现数据的价值。

比较分析是一个简单的、比较通用的、易于理解的数据分析方法,可以分成趋势分析、特征重要性、分组分析三种。

 

undefined


报告撰写


最后,条理清晰地展现数据信息,表达你的观点。报告写作的过程是一个相对费劲的过程,特别是数据量多的情况下,总是觉得还有一些数据价值没有被挖掘出来,但此时不要拘泥细节,细节可以回头再补,会大大提升效率。


4.1 问卷的报告框架


  • 报告主要发现:将总结放在最前面,阅读者可以通过简短的总结大致了解报告观点,方便他们决定是否需要继续了解详细内容

  • 目录和分目录:报告包含的内容组成部分,让阅读者对报告内容有初步概览

  • 调研背景和目的:陈述整个报告的背景和目的,对调研的范围进行必要说明

  • 单页-详细内容描述:有逻辑的描述项目的发现,总结数据表现,挖掘价值

 

单页-详细内容描述示例:

undefined


问卷调研不止是问卷本身,还包括前期项目组沟通、项目成员分工与配合、后续结果推广、结果推动落地等,前期做好项目组沟通、明确项目分工,建立一个清晰的运行机制,有利于项目组成员对结果的认同,后续也有清晰的路径去分工解决问题。所以,每一个环节都体现工作的价值,都同样重要。希望大家在关注研究方法提升的同时,也可以更多关注更多工作方法提升。

文章来源:站酷  作者:酷家乐UED

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


死磕javascript的手写面试题

前端达人

1.实现lodash的_.get方法

function _getValue(target, valuePath, defalutVal) {
  let valueType = Object.prototype.toString.call(target)
  console.log(valueType)
  // if (valueType == "[object Array]") {
    let paths = valuePath.replace(/\[(\d+)\]/, `.$1`).split('.')
    let result = target
    for(const path of paths){
      result = Object(result)[path]
      if(result == undefined){
        return defalutVal
      }
    }
    return result
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
测试:
let obj = {
  a:{
    b:[
      {
        c:2
      }
    ]
  }
}

console.log(_getValue(obj, 'a.b[0].c')) //2 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.写一个函数判断两个变量是否相等

function isEqual(res1, res2) {
  let a = getTypeOf(res1)
  let b = getTypeOf(res2)
  if(a !== b){
    return false
  }else if(a === 'base'){
    console.log('base',res1,res2)
    return res1 === res2
  } else if(a === 'array'){
    if(res1.length !== res2.length){
      console.log('array',res1,res2)
      return false
    }else{
      //遍历数组的值比较
      for(let i =0;i<res1.length;i++){
        if(!isEqual(res1[i],res2[i])){
          console.log('array',res1[i],res2[i])
          return false
        }
      }
      return true
    }
    return true
  }else if(a === 'object'){
    let ak = Object.keys(a)
    let bk = Object.keys(b)
    if(ak.length !== bk.length){
      return false
    }else{
      for(let o in res1){
        console.log(res1[o])
        if(!isEqual(res1[o],res2[o])){
          console.log('object',res1[o],res2[o])
          return false
        }
      }
      return true
    } 
  }else if(a === 'null' || a === 'undefined'){
    console.log('null')
    return true
  }else if(a === 'function'){
    console.log('function')
    return a === b
  }
}

function getTypeOf(res) {
  let type = Object.prototype.toString.call(res)
  switch (type) {
    case "[object Array]":
      return 'array'
    case "[object Object]":
      return 'object'
    case "[object Null]":
      return 'null'
    case "[object Undefined]":
      return 'undefined'
    case "[object Number]"||"[object String]"||"[object Boolean]":
      return 'base'
    case "[object Function]":
      return 'function'
    default:
      return 'typeError'
  }
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
测试:
let a = {
  a:20,
  b:{
    c:30,
    d:[1,2,3]
  }
}
let b = {
  a:20,
  b:{
    c:30,
    d:[1,2,3]
  }
}
console.log(isEqual(a,b)) //true 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3.数组扁平化的方法

function _flat(arr){
  let result = []
  for(let i = 0;i<arr.length;i++){
    if(Array.isArray(arr[i])){
      result = result.concat(_flat(arr[i]))
    }else{
      result.push(arr[i])
    }
  }
  return result;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
let arr = [1,2,[3,4,[5,6]]]
_flat(arr) //[1,2,3,4,5,6] 
  • 1
  • 2
//es6
function _flat2(arr){
  while(arr.some(item=>Array.isArray(item))){
    arr = [].concat(...arr)
  }
  return arr
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
let arr = [1,2,[3,4,[5,6]]]
_flat2(arr) //[1,2,3,4,5,6] 
  • 1
  • 2

4.深克隆

简单深克隆,不考虑内置对象和函数

function deepClone(obj){
  if(typeof obj !== 'object') return
  let newObj = obj instanceof Array?[]:{}
  for(let key in obj){
      if(obj.hasOwnProperty(key)){
          newObj[key] = typeof obj[key] === 'object'?deepClone(obj[key]):obj[key]
      }
  }
  return newObj
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

复杂版深度克隆 考虑内置对象 比如date regexp 函数 以及对象的循环引用的问题

const isObject = (target) => typeof target === "object"&& target !== null;

function deepClone2(target, map = new WeakMap()) {
  console.log(target)
    if (map.get(target)) {
        return target;
    }
    // 获取当前值的构造函数:获取它的类型
    let constructor = target.constructor;
    // 检测当前对象target是否与正则、日期格式对象匹配
    if (/^(RegExp|Date)$/i.test(constructor.name)) {
        // 创建一个新的特殊对象(正则类/日期类)的实例
        return new constructor(target);  
    }
    if (isObject(target)) {
        map.set(target, true);  // 为循环引用的对象做标记
        const cloneTarget = Array.isArray(target) ? [] : {};
        for (let prop in target) {
            if (target.hasOwnProperty(prop)) {
                cloneTarget[prop] = deepClone(target[prop], map);
            }
        }
        return cloneTarget;
    } else {
        return target;
    }
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

5.数组去重

filter去重

function _unique(arr){
  return arr.filter((item,index,array)=>{
    return array.indexOf(item) === index
  })
} 
  • 1
  • 2
  • 3
  • 4
  • 5

es6 Set

function _unique2(arr){
  return [...new Set(arr)]
} 
  • 1
  • 2
  • 3

includes

function _unique3(arr){
  let newArr = []
  arr.forEach(item => {
      if(!newArr.includes(item)){
        newArr.push(item)
      }
  });
  return newArr
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

双层for循环

function _unique4(arr){
  for(let i =0;i<arr.length;i++){
    for(let j =i+1;j<arr.length;j++){
      if(arr[i] === arr[j]){
        arr.splice(j,1)
        j--
      }
    }
  }
  return arr
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

indexof

function _unique5(arr){
  let newArr = []
  for(let i = 0;i<arr.length;i++){
    if(newArr.indexOf(arr[i] === -1){
      newArr.push(arr[i])
    })
  }
  return newArr
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

6.判断数据的类型

function _typeOf(obj){
  let res = Object.prototype.toString.call(obj).split(' ')[1]
  let mold = res.substring(0,res.length-1).toLowerCase()
  return mold
} 
  • 1
  • 2
  • 3
  • 4
  • 5
_typeOf(5) //number
_typeOf('5') //string 
  • 1
  • 2

7.解析url参数为对象

function getParamsObj(params){
  let paramsStr = params.replace(/^.+\?(.+)/,"$1")
  let paramsArr = paramsStr.split('&')
  let paramsObj = {}

  for(let [key,value] of paramsArr.entries()){
      if(/=/.test(value)){
          let valArr = value.split('=')
          val = decodeURIComponent(valArr[1]) //解码
          val = /^\d+$/.test(val)?parseFloat(val):val //判断是不是数字
          if(paramsObj.hasOwnProperty(valArr[0])){
              paramsObj[valArr[0]] = [].concat(paramsObj[valArr[0]],val)
          }else{
              paramsObj[valArr[0]] = val
          }
      }  

  }
  return paramsObj
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

8.函数柯里化

//从一次传入多个参数  编程多次调用每次传入一个参数
function add(a, b, c, d, e) {
  return a + b + c + d + e
}

function curry(fn) {
   let dFn = (...args)=>{
     if(args.length == fn.length) return fn(...args)
     return (...arg)=>{
       return dFn(...args,...arg)
     }
   }
   return dFn
}
let addCurry = curry(add)
addCurry(1,2,3)(2)(3) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

9.图片懒加载

//添加了两个功能
// 图片加载完成后 移除事件监听
// 加载完的图片从imgList中移除
let imgList = [...document.querySelectorAll('img')]
let length = imgList.length

const imgLazyLoad = function () {
  let count = 0
  let deleteIndexList = []
  imgList.forEach((img, index) => {
    let rect = img.getBoundingClientRect() 
    //获取元素到视图的距离 top元素上边到视图上边的距离 left元素左边到视图左边的距离  right... bottom...
    if (rect.top < window.innerHeight) {
      // img.src = img.dataset.src
      img.src = img.getAttribute('data-src')
      deleteIndexList.push(index)
      count++
      if (count === length) {
        document.removeEventListener('scroll', imgLazyLoad)
      }
    }
  })
  imgList = imgList.filter((img, index) => !deleteIndexList.includes(index))
}
imgLazyLoad()

document.addEventListener('scroll', imgLazyLoad) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

图片懒加载:https://juejin.cn/post/6844903856489365518#heading-19

10节流防抖

函数防抖 触发高频事件 事件在n后执行,如果n秒钟重复执行了 则时间重置

//简易版
function debounce(func,wait){
  let timer; 
  return function(){
    let context = this;
    let args = arguments;
    console.log(timer)
    clearTimeout(timer)
    timer = setTimeout(function(){
      func.apply(context,args)
    },wait)
  }

}
let btn = document.querySelector('button');
function aa(){
  console.log(111)
}
btn.onclick = debounce(aa,2000) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
// 复杂版
// 1.取消防抖  
// 2.立即执行功能(点击之后立即执行函数  但是 wait时间之后在点击才能在立即执行)  
// 3.函数可能有返回值
function debounce(func,wait,immediate){
  let timer,result;

  const debounce = function () {
    const context = this
    const args = arguments

    if(timer) clearTimeout(timer)
    if(immediate){
      console.log(timer)
      var callNow = !timer
      timer = setTimeout(function () {
          timer =null
      },wait)
      if(callNow) result = func.apply(context,args)
    }else{
      timer = setTimeout(function (params) {
        result = func.apply(context,args)
      },wait)
    }
    return result
  }

  debounce.cance = function () {
    clearTimeout(timer)
    timer=null
  }

  return debounce

}

let btn = document.querySelector('button');
function aa(){
  console.log(111)
}
btn.onclick = debounce(aa,2000,true)``` 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

函数节流 触发高频事件 且n秒只执行一次

//使用时间戳
function  throttle(func,wait) {
  var context,args;
  var previous = 0

  return function () {
    context = this;
    args = arguments;
    let nowDate = +new Date()
    if(nowDate-previous>wait){
      func.apply(context,arguments)
      previous = nowDate
    }
  }
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
//定时器
function throttle(func,wait) {
  var context,args;
  var timer;
  return function(){
    context = this;
    args = arguments;
    if(!timer){
      timer = setTimeout(function () {
        timer = null;
        func.apply(context,args)
      },wait)
    }
  }

} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
//组合版 options.leading 为true 立即执行一次 options.trailing为true  结束之后执行一次 默认为true
function throttle(func, wait ,options = {}) {
  var context, args, timer,result;
  var previous = 0;

  var later = function () {
    previous = options.leading === false ? 0 : new Date().getTime();
    timer = null;
    func.apply(context, args)
    if (!timer) context = args = null;
  }

  var throttle = function () {
    var now = new Date().getTime()
    if (!previous && options.leading === false) previous = now;
    context = this;
    args = arguments;

    //下次触发 func 剩余的时间
    var remaining = wait - (now - previous);
    if (remaining <= 0 || remaining > wait) {
      // if (timer) {
      //   clearTimeout(timer);
      //   timer = null;
      // }
      previous = now;
      func.apply(context, args);
      if (!timer) context = args = null;
    } else if (!timer&& options.trailing !== false) {
      timer = setTimeout(later, remaining);
    }
  }

  throttled.cancel = function() {
    clearTimeout(timer);
    previous = 0;
    timer = null;
  }

  return throttle
}

function aa(e) {
  console.log(111)
  console.log(e)
}

let btn = document.querySelector('button');
btn.onclick = throttle(aa, 2000,{
  leading:false,
  trailing:true 

})

转自:csdn论坛 作者:Selfimpr欧

app界面赏析 + icon 图标分享 ——— 北京蓝蓝设计 移动端UI设计资源分享(十八)

前端达人

移动互联网的迅速崛起,让移动网页,移动客户端越来越重要,客户端的页面设计也是一门很大的学问。科技迅速发展的今手机屏幕的尺寸越来越放大化,但却始终 很有限,因此,在APP的界面设计中,精简是一贯的准则。这里所说的精简并不是内容上尽可能的少量,而是要注重重点的表达。在视觉上也要遵循用户的视觉逻 辑,用户看着顺眼了,才会真正的喜欢。


接下来为大家分享精美的app UI设计案例:

jhk-1618475928898.jpgjhk-1618475937124.jpgjhk-1618475946821.jpgjhk-1618475964960.jpgjhk-1618475993734.jpg



icon的设计会贯穿全套设计稿,所以在设计的环节中必不可少,优质的icon设计会帮助品牌和企业更好的树立形象,形成自己的设计语言。

接下来为大家分享一些经典案例:

WechatIMG1677.jpegWechatIMG1678.jpegWechatIMG1679.jpegWechatIMG1680.jpegWechatIMG1681.jpeg




--手机appUI设计--

--icon图标赏析--

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



  更多精彩文章:

       手机appUI界面设计赏析(一)

       手机appUI界面设计赏析(二)

       手机appUI界面设计赏析(三)

       手机appUI界面设计赏析(四)

       手机appUI界面设计赏析(五)

       手机appUI界面设计赏析(六)

       手机appUI界面设计赏析(七)

       手机appUI界面设计赏析(八)

       手机appUI界面设计赏析(九)

        手机appUI界面设计赏析(十)

       手机appUI界面设计赏析(十一)

       手机appUI界面设计赏析(十二)

        手机appUI界面设计赏析(十三)

       手机appUI界面设计赏析(十四)

       手机appUI界面设计赏析(十五)

       手机appUI界面设计赏析(十六)

       手机appUI界面设计赏析(十七)


[链接优化]这几招教你如何做外链轻松上排名

seo达人

 

    在SEO工作中,网站优化完之后,最重要的工作就是增加反向链接了。如何增加反向链接呢?这是很多站长头疼的问题。
反向链接
    一、增加反向链接要注意的问题:
    1、要循序渐进,不要一下子增加非常多:
    如果你很短时间内,迅速的增加了非常多的反向链接,你很容易会被Google放进“沙盒”,也就是说你的网站不会被Google封掉,但是却无法获得很好的排名。所以增加反向链接不要过急,要一步一步地来。
    2、增加反向链接要重质量,不要单纯追求数量:
    如果你的网站像长久的获得好的排名,反向链接的质量会比数量更加的重要,增加反向链接,最好找有相关度近的。
外部链接
    二、如何增加外链
    1、将网站提交到一些专业目录网站;
    2、到交换链接的BBS发布友情链接交换信息;
    3、与行业协会或商业机构联系。这些非营利性的网站的链接权重一般都比较高,所以与这些网站进行链接交换也是非常好的一种手段;
    4、寻找竞争对手网站的反向链接,主动与这些网站进行链接交换:向超越竞争对手,最好的办法就是竞争对手有的反向链接你都有,竞争对手没有的你也有。
    5、发布新闻稿,在新闻稿中合理的加上超链接,当这个新闻被众多网站转载之后,就可以帮助你的网站增加非常多的反向链接:
    6、在论坛签名中加上你的超链接。经常混论坛,发帖子,资源要好好利用;
    7、创建blog,创建blog,丰富blog的内容,在blog中合理的加上你的网站的超链接;
    8、用搜索引擎搜索“提交网站、add url”等相关关键词。搜索到的网页中,可以增加你网站的反向链接;
    9、给自己的增加自助链接申请功能,吸引其他网站主动与你链接;
    10、购买反向链接,有很多站长拥有数量非常多的资源,你可以向他们购买反向链接。
文章编辑:孔宇SEO · 所属栏目:SEO优化蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务
 
 

大风和沙尘已到达北京西北部边界

seo达人

 

据中国天气网微博预报,大风和沙尘已经到达北京西北部边界,即将开始影响北京。

此前报道:

大风携裹沙尘已到河北张家口,傍晚前抵京

北京市气象台刚刚预报,目前,大风携裹着沙尘,已经影响到河北西北部张家口地区,未来继续向东南推进,下午自北向南影响本市,预计傍晚前影响北京大部。

根据预报,今天下午至前半夜本市有沙尘天气,最低能见度6公里左右。随着中午前南风增大,下班前转北风,沙尘下午就影响北京了。明天接着还有大风天气,但沙尘影响不会持续。

气象部门表示,由于上游土壤湿度较3月份增加,加之降水的抑制作用,此次沙尘强度明显弱于3月15日和28日的沙尘暴过程。

根据北京市生态环境监测中心的实况,目前全市空气质量已经达到轻度污染水平。

针对此次天气过程,北京市气象台已于14日10时30分发布大风黄色预警信号、16时30分发布沙尘蓝色预警信号。市森防办与市气象台已联合发布森林火险橙色预警。(来源:北京日报客户端记者 骆倩雯)

注意!沙尘已到内蒙古中部 可能影响北京晚高峰

今天(4月15日)上午9点半左右,今年第三次蒙古气旋东移带来的沙尘天气已经抵达内蒙古中部,并正在向东南移动。今天傍晚前后可能影响到京津冀一带,或对北京晚高峰造成影响。

据气象北京微博消息,今天上午9点30分前后,沙尘天气已经抵达内蒙古中部,并正在逐渐向东南方向移动,内蒙古、甘肃、宁夏等地风沙渐起。

↑内蒙古鄂尔多斯市今天上午已经出现明显沙尘天气。(摄/赵建军)

据中国天气网首席分析师胡啸介绍,预计今天下午,这股沙尘将会逐渐自西向东影响京津冀一带,北京平原地区午后也会逐渐加大,风力普遍可达4~5级,阵风8~9级,伴有扬沙天气,晚高峰可能是核心影响时段,公众出行需关注临近预报,做好防风防沙准备。

此外,据北京日报客户端消息,北京市教委已建议停止全市大中小学校、幼儿园、中等职业学校及校外教育机构停止体育课、升旗、早操、课间操、运动会、体育考试、外出社会实践等室外活动。提醒学生注意安全,减少不必要的外出活动。各单位要加强巡视巡查力度,及时消除各类安全隐患。(来源:中国天气网)


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

日历

链接

个人资料

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

存档