diff --git a/src/assets/iconfont2/demo.css b/src/assets/iconfont2/demo.css new file mode 100644 index 00000000..a67054a0 --- /dev/null +++ b/src/assets/iconfont2/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/src/assets/iconfont2/demo_index.html b/src/assets/iconfont2/demo_index.html new file mode 100644 index 00000000..4b8dda54 --- /dev/null +++ b/src/assets/iconfont2/demo_index.html @@ -0,0 +1,947 @@ + + + + + iconfont Demo + + + + + + + + + + + + + +
+

+ + +

+ +
+
+
    + +
  • + +
    角度
    +
    
    +
  • + +
  • + +
    水平翻转
    +
    
    +
  • + +
  • + +
    垂直翻转
    +
    
    +
  • + +
  • + +
    clothes
    +
    
    +
  • + +
  • + +
    材质
    +
    
    +
  • + +
  • + +
    IC-液化
    +
    
    +
  • + +
  • + +
    上一层
    +
    
    +
  • + +
  • + +
    上一层
    +
    
    +
  • + +
  • + +
    下一层
    +
    
    +
  • + +
  • + +
    上一层
    +
    
    +
  • + +
  • + +
    审批
    +
    
    +
  • + +
  • + +
    用户
    +
    
    +
  • + +
  • + +
    使用次数
    +
    
    +
  • + +
  • + +
    下拉
    +
    
    +
  • + +
  • + +
    编辑
    +
    
    +
  • + +
  • + +
    圆形
    +
    
    +
  • + +
  • + +
    三角形
    +
    
    +
  • + +
  • + +
    图层
    +
    
    +
  • + +
  • + +
    平移
    +
    
    +
  • + +
  • + +
    橡皮
    +
    
    +
  • + +
  • + +
    tx-fill-椭圆形
    +
    
    +
  • + +
  • + +
    直线
    +
    
    +
  • + +
  • + +
    线
    +
    
    +
  • + +
  • + +
    正方形
    +
    
    +
  • + +
  • + +
    图层
    +
    
    +
  • + +
  • + +
    点位
    +
    
    +
  • + +
  • + +
    并集
    +
    
    +
  • + +
  • + +
    并集
    +
    
    +
  • + +
  • + +
    标签
    +
    
    +
  • + +
  • + +
    语言
    +
    
    +
  • + +
  • + +
    撤销 返回 撤回 上一步
    +
    
    +
  • + +
  • + +
    撤销 返回 撤回 上一步
    +
    
    +
  • + +
  • + +
    外套_长款外套1@1x
    +
    
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 默认情况下不支持多色,直接添加多色图标会自动去色。
  • +
+
+

注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1762495405814') format('woff2'),
+       url('iconfont.woff?t=1762495405814') format('woff'),
+       url('iconfont.ttf?t=1762495405814') format('truetype');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + 角度 +
    +
    .icon-angle +
    +
  • + +
  • + +
    + 水平翻转 +
    +
    .icon-flip-horizontal +
    +
  • + +
  • + +
    + 垂直翻转 +
    +
    .icon-flip-vertical +
    +
  • + +
  • + +
    + clothes +
    +
    .icon-clothes +
    +
  • + +
  • + +
    + 材质 +
    +
    .icon-caizhi +
    +
  • + +
  • + +
    + IC-液化 +
    +
    .icon-IC-yehua +
    +
  • + +
  • + +
    + 上一层 +
    +
    .icon-shangyiceng +
    +
  • + +
  • + +
    + 上一层 +
    +
    .icon-shangyiceng1 +
    +
  • + +
  • + +
    + 下一层 +
    +
    .icon-xiayiceng +
    +
  • + +
  • + +
    + 上一层 +
    +
    .icon-shangyiceng2 +
    +
  • + +
  • + +
    + 审批 +
    +
    .icon-shenpi +
    +
  • + +
  • + +
    + 用户 +
    +
    .icon-yonghu +
    +
  • + +
  • + +
    + 使用次数 +
    +
    .icon-usetime +
    +
  • + +
  • + +
    + 下拉 +
    +
    .icon-xiala +
    +
  • + +
  • + +
    + 编辑 +
    +
    .icon-bianji +
    +
  • + +
  • + +
    + 圆形 +
    +
    .icon-circle +
    +
  • + +
  • + +
    + 三角形 +
    +
    .icon-sanjiaoxing +
    +
  • + +
  • + +
    + 图层 +
    +
    .icon-tuceng +
    +
  • + +
  • + +
    + 平移 +
    +
    .icon-move +
    +
  • + +
  • + +
    + 橡皮 +
    +
    .icon-xiangpi_huaban1 +
    +
  • + +
  • + +
    + tx-fill-椭圆形 +
    +
    .icon-tx-fill-tuoyuanxing +
    +
  • + +
  • + +
    + 直线 +
    +
    .icon-zhixian +
    +
  • + +
  • + +
    + 线 +
    +
    .icon-xian +
    +
  • + +
  • + +
    + 正方形 +
    +
    .icon-checkbox-full +
    +
  • + +
  • + +
    + 图层 +
    +
    .icon-tuceng1 +
    +
  • + +
  • + +
    + 点位 +
    +
    .icon-dianwei +
    +
  • + +
  • + +
    + 并集 +
    +
    .icon-bingji +
    +
  • + +
  • + +
    + 并集 +
    +
    .icon-bingji1 +
    +
  • + +
  • + +
    + 标签 +
    +
    .icon-biaoqian +
    +
  • + +
  • + +
    + 语言 +
    +
    .icon-yuyan +
    +
  • + +
  • + +
    + 撤销 返回 撤回 上一步 +
    +
    .icon-fanchehui +
    +
  • + +
  • + +
    + 撤销 返回 撤回 上一步 +
    +
    .icon-chehui +
    +
  • + +
  • + +
    + 外套_长款外套1@1x +
    +
    .icon-a-waitao_changkuanwaitao11x +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    角度
    +
    #icon-angle
    +
  • + +
  • + +
    水平翻转
    +
    #icon-flip-horizontal
    +
  • + +
  • + +
    垂直翻转
    +
    #icon-flip-vertical
    +
  • + +
  • + +
    clothes
    +
    #icon-clothes
    +
  • + +
  • + +
    材质
    +
    #icon-caizhi
    +
  • + +
  • + +
    IC-液化
    +
    #icon-IC-yehua
    +
  • + +
  • + +
    上一层
    +
    #icon-shangyiceng
    +
  • + +
  • + +
    上一层
    +
    #icon-shangyiceng1
    +
  • + +
  • + +
    下一层
    +
    #icon-xiayiceng
    +
  • + +
  • + +
    上一层
    +
    #icon-shangyiceng2
    +
  • + +
  • + +
    审批
    +
    #icon-shenpi
    +
  • + +
  • + +
    用户
    +
    #icon-yonghu
    +
  • + +
  • + +
    使用次数
    +
    #icon-usetime
    +
  • + +
  • + +
    下拉
    +
    #icon-xiala
    +
  • + +
  • + +
    编辑
    +
    #icon-bianji
    +
  • + +
  • + +
    圆形
    +
    #icon-circle
    +
  • + +
  • + +
    三角形
    +
    #icon-sanjiaoxing
    +
  • + +
  • + +
    图层
    +
    #icon-tuceng
    +
  • + +
  • + +
    平移
    +
    #icon-move
    +
  • + +
  • + +
    橡皮
    +
    #icon-xiangpi_huaban1
    +
  • + +
  • + +
    tx-fill-椭圆形
    +
    #icon-tx-fill-tuoyuanxing
    +
  • + +
  • + +
    直线
    +
    #icon-zhixian
    +
  • + +
  • + +
    线
    +
    #icon-xian
    +
  • + +
  • + +
    正方形
    +
    #icon-checkbox-full
    +
  • + +
  • + +
    图层
    +
    #icon-tuceng1
    +
  • + +
  • + +
    点位
    +
    #icon-dianwei
    +
  • + +
  • + +
    并集
    +
    #icon-bingji
    +
  • + +
  • + +
    并集
    +
    #icon-bingji1
    +
  • + +
  • + +
    标签
    +
    #icon-biaoqian
    +
  • + +
  • + +
    语言
    +
    #icon-yuyan
    +
  • + +
  • + +
    撤销 返回 撤回 上一步
    +
    #icon-fanchehui
    +
  • + +
  • + +
    撤销 返回 撤回 上一步
    +
    #icon-chehui
    +
  • + +
  • + +
    外套_长款外套1@1x
    +
    #icon-a-waitao_changkuanwaitao11x
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/src/assets/iconfont2/iconfont.css b/src/assets/iconfont2/iconfont.css index 32375ef9..27459f1d 100644 --- a/src/assets/iconfont2/iconfont.css +++ b/src/assets/iconfont2/iconfont.css @@ -1,18 +1,30 @@ @font-face { font-family: "iconfont"; /* Project id 4292253 */ - src: url('iconfont.woff2?t=1759888699816') format('woff2'), - url('iconfont.woff?t=1759888699816') format('woff'), - url('iconfont.ttf?t=1759888699816') format('truetype'); + src: url('iconfont.woff2?t=1762495405814') format('woff2'), + url('iconfont.woff?t=1762495405814') format('woff'), + url('iconfont.ttf?t=1762495405814') format('truetype'); } .iconfont { font-family: "iconfont" !important; - font-size: 1.6rem; + font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } +.icon-angle:before { + content: "\e60a"; +} + +.icon-flip-horizontal:before { + content: "\e69e"; +} + +.icon-flip-vertical:before { + content: "\ec60"; +} + .icon-clothes:before { content: "\e8d1"; } diff --git a/src/assets/iconfont2/iconfont.js b/src/assets/iconfont2/iconfont.js new file mode 100644 index 00000000..a5ff72ea --- /dev/null +++ b/src/assets/iconfont2/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_4292253='',(c=>{var a=(l=(l=document.getElementsByTagName("script"))[l.length-1]).getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var i,t,o,h,e,n=function(a,l){l.parentNode.insertBefore(a,l)};if(a&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}i=function(){var a,l=document.createElement("div");l.innerHTML=c._iconfont_svg_string_4292253,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?n(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(i,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),i()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(o=i,h=c.document,e=!1,s(),h.onreadystatechange=function(){"complete"==h.readyState&&(h.onreadystatechange=null,m())})}function m(){e||(e=!0,o())}function s(){try{h.documentElement.doScroll("left")}catch(a){return void setTimeout(s,50)}m()}})(window); \ No newline at end of file diff --git a/src/assets/iconfont2/iconfont.json b/src/assets/iconfont2/iconfont.json index 21b485b7..25879380 100644 --- a/src/assets/iconfont2/iconfont.json +++ b/src/assets/iconfont2/iconfont.json @@ -5,6 +5,27 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "8875396", + "name": "角度", + "font_class": "angle", + "unicode": "e60a", + "unicode_decimal": 58890 + }, + { + "icon_id": "15551512", + "name": "水平翻转", + "font_class": "flip-horizontal", + "unicode": "e69e", + "unicode_decimal": 59038 + }, + { + "icon_id": "46016160", + "name": "垂直翻转", + "font_class": "flip-vertical", + "unicode": "ec60", + "unicode_decimal": 60512 + }, { "icon_id": "20183053", "name": "clothes", diff --git a/src/assets/iconfont2/iconfont.ttf b/src/assets/iconfont2/iconfont.ttf index d708a6c9..60d95743 100644 Binary files a/src/assets/iconfont2/iconfont.ttf and b/src/assets/iconfont2/iconfont.ttf differ diff --git a/src/assets/iconfont2/iconfont.woff b/src/assets/iconfont2/iconfont.woff index 2f9fcd35..d63da1b4 100644 Binary files a/src/assets/iconfont2/iconfont.woff and b/src/assets/iconfont2/iconfont.woff differ diff --git a/src/assets/iconfont2/iconfont.woff2 b/src/assets/iconfont2/iconfont.woff2 index e48d0fb0..e3a2cfc6 100644 Binary files a/src/assets/iconfont2/iconfont.woff2 and b/src/assets/iconfont2/iconfont.woff2 differ diff --git a/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue b/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue new file mode 100644 index 00000000..a340bde0 --- /dev/null +++ b/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue @@ -0,0 +1,609 @@ + + + + + diff --git a/src/component/Canvas/CanvasEditor/fabric-canvas-events.text b/src/component/Canvas/CanvasEditor/fabric-canvas-events.text new file mode 100644 index 00000000..9d2692c9 --- /dev/null +++ b/src/component/Canvas/CanvasEditor/fabric-canvas-events.text @@ -0,0 +1,23 @@ +1. 初始化事件 +object:added:当新对象被添加到画布上时触发。 +object:removed:当对象从画布上移除时触发。 +selection:created:当选择对象时触发。 +selection:updated:当选择的对象被更新时触发。 +selection:cleared:当所有对象都被取消选择时触发。 + +2. 鼠标事件 +mouse:down:鼠标按下时触发。 +mouse:move:鼠标移动时触发。 +mouse:up:鼠标释放时触发。 +mouse:over:鼠标移到画布上时触发。 +mouse:out:鼠标移出画布时触发。 +mouse:wheel:鼠标滚轮滚动时触发。 + +3. 触摸事件(在触摸屏设备上) +touch:start:触摸开始时触发。 +touch:move:触摸移动时触发。 +touch:end:触摸结束时触发。 + +4. 键盘事件 +key:down:键盘按键按下时触发。 +key:up:键盘按键释放时触发。 \ No newline at end of file diff --git a/src/component/Canvas/CanvasEditor/index.vue b/src/component/Canvas/CanvasEditor/index.vue index 084b8908..1f44abc7 100644 --- a/src/component/Canvas/CanvasEditor/index.vue +++ b/src/component/Canvas/CanvasEditor/index.vue @@ -34,6 +34,7 @@ import LayersPanel from "./components/LayersPanel/LayersPanel.vue"; import BrushControlPanel from "./components/BrushControlPanel.vue"; import TextEditorPanel from "./components/TextEditorPanel.vue"; // 引入文本编辑面板 import LiquifyPanel from "./components/LiquifyPanel.vue"; // 引入液化编辑面板 +import SelectMenuPanel from "./components/SelectMenuPanel.vue"; // 引入选择工具菜单组件 import SelectionPanel from "./components/SelectionPanel.vue"; // 引入选区面板 import { LayerType, OperationType } from "./utils/layerHelper.js"; import { ToolManager } from "./managers/ToolManager.js"; @@ -619,12 +620,22 @@ function updateCanvasSize() { function updateCanvasColor() { canvasManager.setCanvasColor(canvasColor.value); } - +function createLayerName(){ + const layer = t("Canvas.layer") + // 检查图层名称是否已存在 + let layerIndex = 1; + let layerName = `${layer + " " + layerIndex}`; + while (layerManager.getLayerByName(layerName)) { + layerIndex++; + layerName = `${layer} ${layerIndex}`; + } + return layerName; +} async function addLayer() { - await layerManager.createLayer(t("Canvas.EmptyLayer")); + await layerManager.createLayer(createLayerName()); } async function addTopLayer() { - await layerManager.createLayer(t("Canvas.EmptyLayer"), LayerType.EMPTY, { + await layerManager.createLayer(createLayerName(), LayerType.EMPTY, { insertTop: true, }); } @@ -1173,6 +1184,17 @@ defineExpose({ :activeTool="activeTool" /> + + +
{{ t("Canvas.Scale") }}: {{ currentZoom }}%