【Layui】图标选择器 iconPicker 的使用

【Layui】图标选择器 iconPicker 的使用

  • 1.项目前言
  • 2.项目目标
  • 3.项目实现
    • 3.1 图标读取
    • 3.2 图标擦除
  • 4.效果展示
    • 4.1 简单使用
    • 4.2 参数配置
    • 4.3 使用 unicode
  • 5.源码地址

系统:Win10
JDK:1.8.0_333
IDEA:2022.3.3
SpringBoot:2.7.6
Layui:2.8.4
iconPicker:1.1

1.项目前言

之前在写一个系统的时候,实现了目录管理,可以自定义目录。在该项目中,我使用的前端组件库是 Layui,为了实现目录的图标编辑功能,我选择了 Gitee 上的 Layui-IconPicker 项目,可以直接选择 Layui 自带的图标,可以说相当好用和美观了,不过该项目上次维护还是 4 年前,存在一些问题

  1. 该组件的图标来自于 Layui2.4.1
  2. 该组件选择图标后只能修改图标,不能删除图标

所以为了解决以上两个问题,我对该组件做了一些调整,并对使用方式进行了优化

2.项目目标

  1. 因为 Layui 的版本已经升级到了 2.8.4,所以组件里的图标必须同步升级,不过如果只是升级写死的话,后续还得继续维护,比较麻烦,所以我想是否可以直接读取 Layui 的图标库,这样以后只需要升级更新 Layui 库即可,避免了升级带来的麻烦
  2. 第二个就比较简单了,只需要加一个清除所选图标的图像即可,之前在别的组件中有使用过类似的功能,这里只需要实现功能即可

3.项目实现

3.1 图标读取

我在使用 Layui 库的时候发现,后续的 Layui 用的都是 iconfont 阿里巴巴矢量图标库,我们在 IDEA 中打开 font 下的 iconfont.svg 图片(如下图)
在这里插入图片描述

可以发现我们需要的图标信息都在这里,glyph-name 属性对应的是图标的 font-class,unicode 对应的是 图标的 unicode(这里因为编码原因所以和真实 unicode 编号显示不一致,通过转换可以获取真实的 unicode 码),所以我们只需要读取该 svg 的内容即可(如下图)
在这里插入图片描述
这里我们先通过获取该组件的请求路径,然后拼接获取 layui 的父路径,然后获取 /layui/font/iconfont.svg 的 svg 请求路径作为默认路径,当然也可以通过配置 iconfont.svg 的 url 来代替该默认路径

然后通过 ajax 的方式读取 svg 内容,并根据不同的使用图标的方式,读取对应的属性值作为图标库

fontClass: function () {let iconData = [];let icons = this.loadSvgData();for (let i = 0; i < icons.length; i++) {let iconName = icons[i].getAttribute("glyph-name");iconData.push("layui-icon-" + iconName);}return iconData;
}, unicode: function () {let iconData = [];let icons = this.loadSvgData();for (let i = 0; i < icons.length; i++) {let unicode = icons[i].getAttribute("unicode");iconData.push(unicode);}return iconData;
},
//加载图标的Svg数据
loadSvgData: function () {let svg;$.ajax({url: svg_url, type: 'get', dataType: 'xml', async: false, success: function (res) {svg = res;}});if (svg != null && svg != undefined && svg != "") {return svg.getElementsByTagName("svg")[0].getElementsByTagName("defs")[0].getElementsByTagName("font")[0].getElementsByTagName("glyph");} else {return null;}
}

3.2 图标擦除

图标清除的实现就相对比较简单了,定义一个 i 标签,配置上对应的清除图片,然后实现点击该图片的清除功能

clickClear: function () {let item = "#" + CLEAR_ID;$(item).on('click', function () {let el = $(elem);if (isFontClass) {$('#' + TITLE_ID).find('.layui-iconPicker-item .layui-icon').html('').attr('class', "layui-icon");} else {$('#' + TITLE_ID).find('.layui-iconPicker-item .layui-icon').html("");}$('#' + ICON_BODY).removeClass(selected).addClass(unselect);el.val(null).attr('value', null);//清空属性和值// 回调if (click) {click({icon: null});}});return picker;
}

4.效果展示

4.1 简单使用

如果直接简单使用的话,特别方便,只需要定义一个 input 标签,设置 ID

<input type="text" id="icon1" name="icon" class="layui-input">

然后使用 iconPicker 组件进行渲染即可

iconPicker.render({elem: '#icon1',// 图标组件,推荐使用input
});

在这里插入图片描述

4.2 参数配置

有时候可能有些场景下我们需要调整配置,可以根据如下配置参数

iconPicker.render({elem: '#icon2',// 图标组件,推荐使用inputurl: '/layui/font/iconfont.svg',// Layui的字体 svg 路径type: 'fontClass',// 图标数据类型:fontClass/unicode,推荐fontClasspage: false,// 是否分页:true/false,推荐且默认分页limit: 24,// 每页显示数量,默认16(默认4*4)search: false,// 是否开启搜索:true/false,推荐且默认truecellWidth: '28%', //每个图标格子的宽度:'43px'或'20%'click: function (data) { // 点击回调console.log("icon2点击回调" + data);},success: function (res) {// 渲染成功后的回调console.log("icon2渲染成功后的回调" + res);}
});

4.3 使用 unicode

如果需要视同 unicode 类型显示图标,只需要配置 type 参数为 unicode 即可

iconPicker.render({elem: '#icon3',// 图标组件,推荐使用inputtype: 'unicode'
});

不过在获取图标的 unicode 值时,需要对图标数据进行如下处理

form.on('submit(form3)', function (data) {let field = data.field; // 获取表单全部字段值field.icon = '&#x' + field.icon.charCodeAt(0).toString(16) + ';';// unicode值处理console.log(JSON.stringify(field));// 显示填写结果return false; // 阻止默认 form 跳转
});

5.源码地址

Giteehttps://gitee.com/lijinjiang01/LayuiModule
GitHubhttps://github.com/lijinjiang01/LayuiModule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9923.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++初阶之类和对象(下)

类和对象&#xff08;下&#xff09; 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 2. static成员2.1 概念2.2 特性 3. 友元3.1 友元函数3.2 友元类 4. 内部类5.匿名对象6.拷贝对象时的一些编译器优化结语 1. 再谈构造函数 1.1 构造函数体赋值 在创建…

Linux 配置dns覆盖默认127.0.0.53

Linux dns默认127.0.0.53&#xff0c;在/etc/resolve.conf中存在 nameserver 127.0.0.53&#xff0c;手动修改无果&#xff0c;每次重启依旧127.0.0.53&#xff0c;因为这是系统生成的文件&#xff0c;resolvectl命令来查dns的配置。 要修改dns&#xff0c;先暂停dns服务&…

HTTP协议,带你了解HTTP协议

目录 1、HTTP 协议介绍 2、HTTP 协议的工作过程 HTTP 协议的工作过程可以分为以下几个步骤&#xff1a; 3、Fiddler 抓包工具介绍 3.1 抓包工具的使用 3.2 抓包结果 3.3 抓包工具原理 4、HTTP 协议格式总览 5、HTTP 请求&#xff08;Request&#xff09; 5.1 认识 URL…

Flutter 轮播图 flutter_swiper属性说明使用

今天分享的内容是关于图片轮播的实现&#xff0c;使用到的库是flutter_swiper&#xff0c;如果有出现空检查报错的&#xff0c;可以使用flutter_swiper_null_safety 轮播图效果如下&#xff1a; 先贴出基本参数详解&#xff1a; 参数说明itemBuilder列表的构造indicatorLayou…

【物联网无线通信技术】LoRa从理论到实现(SX1268)

文章先从LoRa的物联网通信技术前辈们讲起&#xff0c;慢慢引出了这种功耗又低&#xff0c;距离又远的无线通信技术&#xff0c;然后又似庖丁解牛一般&#xff0c;从物理层到链路层&#xff0c;详细的介绍了LoRa这种技术的组成&#xff0c;最后以一种实际的原理与嵌入式软件实现…

AI 如何应对 DevOps 监控和可观察性挑战

持续监控和可观察性用例 CI异常检测&#xff1a; AI可以分析历史数据以检测持续集成阶段的异常。任何不寻常的变化都可以在进入下一阶段之前进行标记以供审查。IBM Watson AnomalyDetection 等工具可以通过使用 AI 检测模式和异常情况来帮助识别这些异常情况。 代码质量保证&…

在SpringBoot中对es集群的查询操作

在进行查询之前要先给ll索引中插入数据: POST /ll/product/1 {"id":1,"title": "小米手机Mix","category": "手机","brand": "小米","price": 2899.00,"images": "http://ima…

51单片机驱动 mg996r金属舵机 STC89C52单片机直接驱动金属大舵机

/*无论是大舵机&#xff0c;还是小舵机&#xff0c;控制方法都一样会区别在 大舵机只能接P0口&#xff08;此口外接上拉&#xff0c;驱动电流最大&#xff09;小舵机任意口 */ //#include<reg51.h> //#define uint unsigned int //#define uchar unsigned char //sbit S…

Django框架-6

向服务器传参 通过url - path传参 path(articles/<int:year>/<int:month>/<slug:slug>/, views.article_detail),查询字符串方式传参 http://localhost:8000?key1value1&key2value2 ;&#xff08;body&#xff09;请求体的方式传参&#xff0c;比如文…

Mysql数据NULL避坑指南

NULL空值是mysql中一种特殊的数据值&#xff08;即"缺少的未知值"&#xff09;,NULL和字符串空值不是一回事&#xff0c;处理NULL与其他值不同&#xff0c;下面具体阐述相关差异&#xff1a; 一、NULL运算符 1、普通数据使用 > 、 < 、即可做常用的逻辑运算如…

前端学习——jsDay4

函数 函数使用 小练习 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…

Linux文件理解和系统调用

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 文件理解和系统调用 前言正文文件概念文件描述符文件描述符概念文件管理关于 files_struct文件描述符的分配一切皆文件思想 C语言文件操作文件的打开与关闭文件读写 文…