引言

ps:小白可以一看,大神勿打~

用过 ztree 的盆友们都知道,ztree 功能强大,就功能上来说,追求着“无处不按钮”的体验,但好用不好看。可能有朋友说:“我这棵树只有我自己看,够用就行”

(我听不见,你没追求~)。对于这种更多时候是在背面展示的内容,我们追求一个词:简约,什么叫简约?简约就是:简单中透露着大气,朴实中内敛着奢华。呃~

对不起,扯远了,看最终效果图:

对比一下原型ztree,想要女神女友,还需改版ztree~

正文

对于ztree,我们审查下代码就能发现,它里面的图标是一整张图片,以背景图片配合background-position,来实现的。这样做的好处从性能方面来说储存消耗小,加载快,从更新方面来说

,新版本图标上传图片覆盖就行了,当然前提是你得有个ui或者懂ps和ai的前端,光ps肯定是不够的,图标必须是矢量才能保证清晰度效果。

知道了 ztree 图标是背景图片方式生成的,那么改版ztree我们就有了两个思路:

  第一种:做一张尺寸一样的图片(注意图片里面图标大小也一致 )去覆盖,这样的方便之处在于我们只需要知道背景图片在哪个文件夹

  就能完成改版,不需要去看源码(想想挺方便哈),而条件在上面提过了;

  第二种:注意它是背景图片,如果我们代码中在某图标位置添加文字(当然不能过多,不然会撑大)或尺寸合适的图片并不会改变布局,而是覆盖在背景图片上,

  这样的话我们就可以在背景图片所在的标签里面加上 fontawesome 中对应的类名就可以实现效果了,至于那张背景图,删掉呗~

步骤

找个 demo 看一下 ztree 中各个图片对应的标签(折叠,文件夹,复选框,点线)有什么特别之处,比如说类名 id等,这里我们以 折叠图标为例,下面是源代码:

我们可以看到现在折叠图片是折叠状态的:类名对应 roots_close。

展开源码:

展开对应的类名是:roots_close。

这样看来我们可以想到:对应于不同的状态  -  不同的类名  -  不同的类名对应不同的样式即背景图片位置不同  -  不同的图标。

也就是说我们只需要在不同的状态的时候添加相应的 fontawesome 图标调用类名就可以轻松完全图标修改了,到底是不是这样呢?试试看。

打开 ztree中 jquery.ztree.all.js,查找: root_open :

查找结果显示找不到,这伤害来得太突然,突然就有了一种“朕的大清要亡了的感觉”,冷静,这个不行,查另一个看看,还有个 switch ,查找:

这下就有惊喜了,看图我们可以知道 switch 被定义为了 SWITCH,这样的话我们瞬间就可以想到会不会是 root_close 是由两个

变量通过 _ 组合起来的呢,试一下就知道了, 查找 root :

到了这里,暗松口气外加会心一笑:有了。查找 ROOT,这里我选择了区分大小写查找,因为我们已经知道了它是被定义为了大写 ROOT 参数,后面只会以

ROOT 形式出现在需要它的位置,看代码:

顾名思义,这个方法是用来生成 节点线类名,折叠图标不就是两根线么?所以是它是它就是它。注意上图中的 lineClass 数组,由它的名字我们猜测这是生成图标的数组,但现在它是空的,

为了知道它到底是怎么用的,我们随便添加进去一个类名: testThis ,刷新一下看看:

可以清楚看到在代码中这个 testThis 被添加在了折叠图标的标签类名中,这样的话我们已经解决了折叠图标折叠起来的状态图标,但还没完,还有展开状态(可能有盆友心里已经在问了:还没完吧?还有最后一层的子节点呢?最后一层的子节点应该是没有折叠图标的啊,先保留问题),继续查找 ROOT,通过断点调试,最后我们锁定:

至于为什么锁定在这里,有兴趣的盆友可以自己试一下就知道了,这里不做解释了,这里我们再一次看到了 DOCU ,而且如果细心观察了的话我们发现它总是出现最后(猜测:最后的子节点?)

写下如下代码调试查看结果:

折叠:

展开:

OK,这样我们就完成了折叠图标的替换,通过大同小异的方法,我们一次替换 其余图标,这时我们发现最后一层的子节点上也有折叠图标,这很明显不科学,问题应该是出在

生成折叠图标方法上面:

做出如下处理,重置生成 类数组:

问题得到完美解决。

接下来我们要做的就是完成这次改版,虽然这样也能用,但是如果每次修改都需要到代码里面到处查找修改,这就不符合我们追求的优化维护,怎么办呢?

很简单,最开始的时候我们就注意到了,ztree 几乎将所有元素都定义为了参数来调用,如此我们也可以自己新建一个参数来定义这些类,并赋予默认值,这样

以后要修改就只需要修改默认值就行了,看图:

调用方式: consts.usericon.XXXX,如: consts.usericon.CLOSE .

最终效果图:

注意:ztree本身不提供增加节点按钮,需要自定义方法,这个有兴趣的盆友可以自己了解一下。

最后附上整个demo给需要的朋友参考一下,有疑问可以留言互相交流,多谢各位看官,抱拳~

下载demo

Ztree改版 - 将图标字体化 - fontAwesome的更多相关文章

  1. ZTREE改版 -- 增删减 -- 图标字体化 完整改版

    引言 这次主要更新增删改功能以及修复存在的一些bug:图标能动态改变,回调函数添加 ZTREE改版功能完善 前面文章对于改版过程做了较详细的解释,这里就不多加赘述了,直接看效果图: 增加按钮: 修改节 ...

  2. (转载)app ico图标字体制作

    图标字体化浅谈   在做手机端Web App项目中,经常会遇到小图标在手机上显示比较模糊的问题,经过实践发现了一种比较好的解决方案,图标字体化.在微社区项目中,有很多小的Icon(图标),如分享.回复 ...

  3. 学习WPF——使用Font-Awesome图标字体

    图标字体介绍 在介绍图标字体之前,不得不介绍图标格式ICON ICON是一种图标格式,我们操作系统中各种应用程序都包含一个图标 比如QQ程序的图标是一个可爱的企鹅,我的电脑是一个显示器图标 ----- ...

  4. fontawesome图标字体库组件在服务器上显示不出来图标的解决

    这个组件在我所开发的网站中被大量使用,为网站增色不少.在本地测试的时候所有图标都能显示出来,可一到服务器上就显示不出来了.网上查列出了可能的原因.其一,IIS没有注册字体类型.经过检查,不存在这个问题 ...

  5. 学习WPF——使用Font-Awesome图标字体(一)

    一.运行效果图 二.图标字体文件下载 http://fontawesome.dashgame.com/(这个网址可以下载图标字体文件) http://www.fontawesome.com.cn/(这 ...

  6. 在WPF中使用FontAwesome图标字体

    原文:在WPF中使用FontAwesome图标字体 版权声明:原创内容转载必须注明出处,否则追究相关责任. https://blog.csdn.net/qq_36663276/article/deta ...

  7. wpf 使用Font-Awesome图标字体

    wpf 使用Font-Awesome图标字体 1.http://fontawesome.io/ 中下载Font-Awesome字体 然后把字体文件fontawesome-webfont.ttf 拷贝到 ...

  8. CSS 让 fontawesome 图标字体变细

    一句 CSS 让 fontawesome 图标字体变细 自从 iOS 某个版本发布之后,前端的流行趋势是什么都越来越细…字体越来越细…图标线条也越来越细.而老物 fontawesome 粗壮的线条风格 ...

  9. Extjs 使用图标字体来美化按钮)

    1. 使用Font Awesome,下载地址http://www.bootcss.com/p/font-awesome/#icons-new 2. 把font和css目录放到 Ext的app目录下面 ...

随机推荐

  1. Mapper 动态代理方式

    Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mapper接口开发 ...

  2. Redis 学习笔记-5种数据类型的基本操作

    1.string类型 基本操作列表: GET 获取指定键对应的值 SET 设定键值 DEL 删除指定键对应的值(对所有数据类型都有效) > set hello world OK > get ...

  3. 自学ConcuurentHashMap源码

    自学ConcuurentHashMap源码 参考:https://my.oschina.net/hosee/blog/675884 http://www.cnblogs.com/ITtangtang/ ...

  4. Java基础总结--数组

    ---数组的定义---组织存储一组数据1.存放相同类型数据的集合--就是一种容器本质上变量也是一种容器--区别就是只存储了一个数据的容器--面对容器,而不是分散的数据eg.买一盘鸡蛋--蛋托其实就是容 ...

  5. js 两个日期比较相差多少天

    var day1 = new Date("2017-9-17"); var day2 = new Date("2017-10-18"); console.log ...

  6. js判断元素滑动方向(上下左右)移动端

    每天学习一点点. 1 var startx, starty; //获得角度 function getAngle(angx, angy) { return Math.atan2(angy, angx) ...

  7. Java设计模式探讨之单例模式

    单例模式是在平时的项目开发中比较常见的一种设计模式,使用比较普遍,网上的资料也是一抓一大把,小Alan也来凑凑热闹,为以后充实点设计模式相关的内容做个简单的开篇. 单例模式是一种创建对象的模式,用于产 ...

  8. JavaScript 中的对象引用

    ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型.也有其他的叫法,比如原始类型和对象类型,拥有方法的类型和不能拥有方法的类型,还可以分为可变类型和不可变类型,其实这些叫法都是依据这两 ...

  9. 最长公共子序列Lcs(打印路径)

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的).   比如两个串为:   abcicba abdkscab   ab是两个串的子序列,abc也是,abca也是,其中abca是这 ...

  10. C#语言支持的特性,.NET却不支持,那么C#不被.NET支持的部分又是如何在.NET上运行的呢?

    阅读<C#高级编程>系列丛书中,介绍C#与.NET的关系,提到C#是语言,.NET是平台(C#不是.NET的一部分),说".NET支持的一些特性,C#并不支持",这个可 ...