浅谈Ant Design Pro 菜单自定义 icon


Posted in Javascript onNovember 17, 2020

Ant Design Pro 官方文档说明 在菜单中使用自定义的 icon

由于 umi 的限制,在 router.config.js 是不能直接只是用组件的,Pro 中暂时支持 使用 ant.design 本身的 icon type,和传入一个 img 的 url。只需要直接在 icon 属性上配置即可,如果是个 url,Pro 会自动处理为一个 img 标签。

如果这样还不能满足需求,可以自定义 getIcon 方法。

如果你想使用 iconfont 的图标,你可以使用ant.desgin的自定义图标.

1. getIcon方法

/* eslint no-useless-escape:0 */
const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
export function isUrl(path) {
 return reg.test(path);
}
import { isUrl } from '../utils/utils';
 
const getIcon = icon => {
 if (typeof icon === 'string') {
 if (isUrl(icon)) {
 return <Icon component={() => <img src={icon} alt="icon" className={styles.icon} />} />;
 }
 if (icon.startsWith('icon-')) {
 return <IconFont type={icon} />;
 }
 return <Icon type={icon} />;
 }
 return icon;
};

这个getIcon 来自于 AntD Pro 源代码 getIcon 很全面,既可以用 Icon(使用AntD 提供的icon),又可以用 IconFont(使用www.iconfont.cn仓库的icon),还可以用静态资源文件(<img src={....} /> 转换成 icon);

实际项目中很多时候是需要替换成公司设计师设计的icon,因此我将他做了个简单的转换

const MenuIcon = ({imgStyle, imgSrc}) => (
 <Icon
 component={() => (
 <img
 style={{width: '1em', height: '1em', ...imgStyle}}
 src={imgSrc}
 alt="icon"
 />
 )}
 />
);
 
// example 
// imgStyle 是由于UI切图 尺寸经常不够准确 img位置需要微调
const menuData = [
 {
 name: '首页',
 icon: <MenuIcon imgSrc={require('../assets/menu.png')} imgStyle={{marginBottom: 5}} />,
 path: 'home',
 },
]

注意:img width height 设置为 1em ,让它自适应parent组件的大小,实现菜单打开/关闭时,图片的缩放,如果给具体数值则没有缩放效果!!!

2. 使用ant.desgin的自定义图标(使用 svg).

利用 Icon 组件封装一个可复用的自定义图标。可以通过 component 属性传入一个组件来渲染最终的图标,以满足特定的需求。

代码来自于 antd 官方文档 icon 自定义图标

import { Icon } from 'antd';
 
const HeartSvg = () => (
 <svg width="1em" height="1em" fill="currentColor" viewBox="0 0 1024 1024">
 <path d="M923 283.6c-13.4-31.1-32.6-58.9-56.9-82.8-24.3-23.8-52.5-42.4-84-55.5-32.5-13.5-66.9-20.3-102.4-20.3-49.3 0-97.4 13.5-139.2 39-10 6.1-19.5 12.8-28.5 20.1-9-7.3-18.5-14-28.5-20.1-41.8-25.5-89.9-39-139.2-39-35.5 0-69.9 6.8-102.4 20.3-31.4 13-59.7 31.7-84 55.5-24.4 23.9-43.5 51.7-56.9 82.8-13.9 32.3-21 66.6-21 101.9 0 33.3 6.8 68 20.3 103.3 11.3 29.5 27.5 60.1 48.2 91 32.8 48.9 77.9 99.9 133.9 151.6 92.8 85.7 184.7 144.9 188.6 147.3l23.7 15.2c10.5 6.7 24 6.7 34.5 0l23.7-15.2c3.9-2.5 95.7-61.6 188.6-147.3 56-51.7 101.1-102.7 133.9-151.6 20.7-30.9 37-61.5 48.2-91 13.5-35.3 20.3-70 20.3-103.3 0.1-35.3-7-69.6-20.9-101.9z" />
 </svg>
);
 
const PandaSvg = () => (
 <svg viewBox="0 0 1024 1024" width="1em" height="1em" fill="currentColor">
 <path
 d="M99.096 315.634s-82.58-64.032-82.58-132.13c0-66.064 33.032-165.162 148.646-148.646 83.37 11.91 99.096 165.162 99.096 165.162l-165.162 115.614zM924.906 315.634s82.58-64.032 82.58-132.13c0-66.064-33.032-165.162-148.646-148.646-83.37 11.91-99.096 165.162-99.096 165.162l165.162 115.614z"
 fill="#6B676E"
 p-id="1143"
 />
 <path
 d="M1024 561.548c0 264.526-229.23 429.42-512.002 429.42S0 826.076 0 561.548 283.96 66.064 512.002 66.064 1024 297.022 1024 561.548z"
 fill="#FFEBD2"
 p-id="1144"
 />
 <path
 d="M330.324 842.126c0 82.096 81.34 148.646 181.678 148.646s181.678-66.55 181.678-148.646H330.324z"
 fill="#E9D7C3"
 p-id="1145"
 />
 <path
 d="M644.13 611.098C594.582 528.516 561.55 512 512.002 512c-49.548 0-82.58 16.516-132.13 99.096-42.488 70.814-78.73 211.264-49.548 247.742 66.064 82.58 165.162 33.032 181.678 33.032 16.516 0 115.614 49.548 181.678-33.032 29.18-36.476-7.064-176.93-49.55-247.74z"
 fill="#FFFFFF"
 p-id="1146"
 />
 <path
 d="M611.098 495.484c0-45.608 36.974-82.58 82.58-82.58 49.548 0 198.194 99.098 198.194 165.162s-79.934 144.904-148.646 99.096c-49.548-33.032-132.128-148.646-132.128-181.678zM412.904 495.484c0-45.608-36.974-82.58-82.58-82.58-49.548 0-198.194 99.098-198.194 165.162s79.934 144.904 148.646 99.096c49.548-33.032 132.128-148.646 132.128-181.678z"
 fill="#6B676E"
 p-id="1147"
 />
 <path
 d="M512.002 726.622c-30.06 0-115.614 5.668-115.614 33.032 0 49.638 105.484 85.24 115.614 82.58 10.128 2.66 115.614-32.944 115.614-82.58-0.002-27.366-85.556-33.032-115.614-33.032z"
 fill="#464655"
 p-id="1148"
 />
 <path
 d="M330.324 495.484m-33.032 0a33.032 33.032 0 1 0 66.064 0 33.032 33.032 0 1 0-66.064 0Z"
 fill="#464655"
 p-id="1149"
 />
 <path
 d="M693.678 495.484m-33.032 0a33.032 33.032 0 1 0 66.064 0 33.032 33.032 0 1 0-66.064 0Z"
 fill="#464655"
 p-id="1150"
 />
 </svg>
);
 
const HeartIcon = props => <Icon component={HeartSvg} {...props} />; 
const PandaIcon = props => <Icon component={PandaSvg} {...props} />;
 
ReactDOM.render(
 <div className="custom-icons-list">
 <HeartIcon style={{ color: 'hotpink' }} />
 <PandaIcon style={{ fontSize: '32px' }} />
 </div>,
 mountNode,
);

补充知识:Ant Design Pro Of Vue 项目中路由菜单icon 修改或新增

在 config / router.config.js 中修改,直接从 ant-design-vue-icon 取,只要 icon 组件的 type 值即可。

如:

<a-icon type="user" />

浅谈Ant Design Pro 菜单自定义 icon

以上这篇Ant Design Pro 菜单自定义 icon就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jquery的用鼠标画出可移动的div
Sep 06 Javascript
使用jquery写个更改表格行顺序的小功能
Apr 29 Javascript
jQuery Validate表单验证入门学习
Dec 18 Javascript
JavaScript事件代理和委托详解
Apr 08 Javascript
微信小程序开发(一) 微信登录流程详解
Jan 11 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
Mar 08 Javascript
使用Xcache缓存器加速PHP网站的配置方法
Apr 22 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
Jul 10 Javascript
jQuery中的类名选择器(.class)用法简单示例
May 14 jQuery
基于vue.js组件实现分页效果
Dec 29 Javascript
js实现简易计算器功能
Oct 18 Javascript
vue+vant实现购物车全选和反选功能
Nov 17 #Vue.js
vue使用vant中的checkbox实现全选功能
Nov 17 #Vue.js
Antd-vue Table组件添加Click事件,实现点击某行数据教程
Nov 17 #Javascript
解决Antd Table表头加Icon和气泡提示的坑
Nov 17 #Javascript
ant design的table组件实现全选功能以及自定义分页
Nov 17 #Javascript
ant design pro中可控的筛选和排序实例
Nov 17 #Javascript
antd table按表格里的日期去排序操作
Nov 17 #Javascript
You might like
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
简单谈谈favicon
2015/06/10 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
Vue.js实现立体计算器
2020/02/22 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
英语故事演讲稿
2014/04/29 职场文书
纪律教育月活动总结
2014/08/26 职场文书
庆七一活动总结
2014/08/27 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
浅谈Redis中的RDB快照
2021/06/29 Redis
人民币符号
2022/02/17 杂记
Nginx实现会话保持的两种方式
2022/03/18 Servers