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

news2024/11/25 8:21:32

【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',// 图标组件,推荐使用input
	url: '/layui/font/iconfont.svg',// Layui的字体 svg 路径
	type: 'fontClass',// 图标数据类型:fontClass/unicode,推荐fontClass
	page: false,// 是否分页:true/false,推荐且默认分页
	limit: 24,// 每页显示数量,默认16(默认4*4)
	search: false,// 是否开启搜索:true/false,推荐且默认true
	cellWidth: '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',// 图标组件,推荐使用input
	type: '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.coloradmin.cn/o/719013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始 Spring Boot 59:Hibernate 日志

从零开始 Spring Boot 59&#xff1a;Hibernate 日志 图源&#xff1a;简书 (jianshu.com) Hibernate 支持多种日志模块&#xff0c;本文介绍如何在 Spring Boot 中使用 Log4j2记录 Hibernate 日志。 实际上本文是我在写上篇文章时遇到的各种坑和最终解决的记录。 首先需要添加…

《黑马头条》 内容安全 feign 延迟任务精准发布

04自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后&#xff0c;开始审核文章 2 审核的主要是审核文章的 内容&#xff08;文本内容和图片&#xff09; 3 借助 第三方提供的接口审核文本 4 借助第三方提供的接口审核图片&#xff0c;由于图片存储到minIO中&…

C#核心知识回顾——8.ArryList、Stack栈、队列、哈希表

1.ArryList ArrayList array new ArrayList();//1.增array.Add(0);array.Add("1");array.Add(false);ArrayList arrayList new ArrayList();arrayList.Add(123);//范围增加(类似于拼接&#xff09;array.AddRange(arrayList);//插入(指定位置)array.Insert(1, &qu…

coxph-基准累积风险函数

右删失数据下的coxph拟合后&#xff0c;得到回归参数和基准累积风险函数&#xff0c;其中基准累积风险函数使用breslow估计得到&#xff1a; 代码&#xff0c;只是为了说明这个问题 res.cox <- survival::coxph(survival::Surv(time, status 2) ~ X1 X2,data auxData)bh…

LLM应用的技术栈与设计模式详解

大型语言模型是构建软件的强大新原语。 但由于它们是如此新&#xff0c;并且其行为与普通计算资源如此不同&#xff0c;因此如何使用它们并不总是显而易见的。 在这篇文章中&#xff0c;我们将分享新兴 LLM 应用程序的参考架构。 它展示了我们所见过的人工智能初创公司和先进科…

AOP简介

问题1&#xff1a;AOP的作用是什么&#xff1f; 问题2&#xff1a;连接点和切入点有什么区别&#xff0c;二者谁的范围大&#xff1f; 问题3&#xff1a;请描述什么是切面&#xff1f; 1.1 AOP简介和作用【理解】 AOP(Aspect Oriented Programming)面向切面编程&#xff0c;…

Vue3----吸顶导航

安装vueuse&#xff1a; npm i vueuse/core 1. 准备吸顶导航组 2.获取滚动距离 <script setup> // vueUse 中 useScroll import { useScroll } from vueuse/core const {y} useScroll(window) </script><template><div class"app-header-sticky&…

iostat命令和vmstat命令

1、iostat命令(磁盘) 1.1、介绍 iostat是I/O statistics&#xff08;输入/输出统计&#xff09;的缩写&#xff0c;iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况&#xff0c;同时也会汇报出 CPU使用情况。同vmstat一样&#xff0c;iostat也有一…

前端基础环境搭建

前端基础环境搭建 序nvm编辑器下载问题 PostMan接口测试工具 序 毕业了第一次写博客&#xff0c;因为入职啦。浅记录下今日工作内容。 刚入职必然是需要搭建好基础的环境。需了解并配置Node.js/NVM/NPM/Git/前端编辑器/Postman等等。 nvm nvm&#xff08;node.js version ma…

数据结构--树的定义与基本术语

数据结构–树的定义与基本术语 数的基本概念 树:从树根生长&#xff0c;逐级分支 非空树 \color{purple}非空树 非空树的特性: 有且仅有一个根节点 没有后继的结点称为“叶子结点”(或终端结点) 有后继的结点称为“分支结点”(或非终端结点) 除了根节点外&#xff0c;任何一个…

4.Squid代理服务器应用

文章目录 Squid代理服务器应用代理服务器代理的工作机制代理服务器的概念代理服务器的作用 Squid代理服务器作用Squid代理的类型 部署Squid安装Squidsystemctl创建squid系统运行构建传统代理服务器构建透明代理服务器Squid部署反向代理服务器 ACL访问控制Sarg图形化日志 Squid代…

11个每个Web开发人员都应该拥有的VS Code扩展

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的&#xff0c;我们出的钱 体验地…

机器学习算法基础学习 # 集成学习之随机森林

随机森林(Random Forests) 是集成学习算法的一种。集成学习是通过组合多个学习器来完成学习任务。随机森林是结合多颗决策树来对样本进行训练和预测。随机森林通过随机扰动而令所有的树去相关。 随机森林可以使用巨量的预测器&#xff0c;甚至预测器的数量比观察样本的数量还多…

Matlab绘图系列教程-Matlab 34 种绘图函数示例(上)

Matlab绘图系列教程&#xff1a;揭秘高质量科学图表的绘制与优化 文章目录 Matlab绘图系列教程&#xff1a;揭秘高质量科学图表的绘制与优化第一部分&#xff1a;入门指南1.1 简介关于本教程的目的与范围Matlab绘图在科学研究中的重要性 1.2 准备工作安装Matlab及其工具箱 1.3 …

干货 | 石化产品机器学习价格模型开发和SEI石化产品价格分析体系构建

以下内容整理自大数据能力提升项目必修课《大数据系统基础》同学们的期末答辩汇报。 我们的报告将分为六个部分&#xff0c;第一部分是研究背景与内容。受疫情影响以来&#xff0c;石化行业市场日趋饱和&#xff0c;竞争激烈&#xff0c;同时利润也受到压缩&#xff0c;大部分石…

谈个人信息保护

一、互联网生存指南&#xff1a;通过哪些方法来加强个人信息保护&#xff1f; 1.密码管理&#xff1a;选择安全可靠的密码&#xff0c;并避免使用容易猜测的密码。不要在不同的网站和应用程序使用相同的密码&#xff0c;以防止未经授权的访问。 2.双重身份验证&#xff1a;使…

AIMAX集群配置sdfstudio容器记录

AIMAX集群配置sdfstudio容器记录 一、登录二、测试三、通过Filezilla传输数据四、通过第三方私有镜像直接创建环境方式1 从dockerhub中下载方式2 上传github中的dockerfile方式3 上传dockerhub中的第三方镜像1. 在ubuntu在安装docker2. 下载第三方镜像3. 修改hosts4. 下载证书5…

【重拾计划】[NOIP1998 提高组] 车站

今日题目 [NOIP1998 提高组] 车站 题目描述 火车从始发站&#xff08;称为第 1 1 1 站&#xff09;开出&#xff0c;在始发站上车的人数为 a a a&#xff0c;然后到达第 2 2 2 站&#xff0c;在第 2 2 2 站有人上、下车&#xff0c;但上、下车的人数相同&#xff0c;因此…

python字典:揭秘无序元素的奥秘之旅

前言 在编程中&#xff0c;数据的组织和管理是一个关键的方面。对于处理和操作数据&#xff0c;Python 提供了许多强大的数据结构&#xff0c;其中最常用和灵活的之一就是字典(Dictionary)。 无论您是初学者还是有经验的开发者&#xff0c;掌握字典的基本知识是非常重要的。本…