合同小程序前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

200 lines
7.1 KiB

3 months ago
  1. # lime-icon 图标
  2. - 方便快捷的使用[iconify](https://iconify.design/)图标集合。超过150,000个开源矢量图标。
  3. - 插件依赖的`lime-svg`为收费,若不需要svg,可以在代码里注释掉即可
  4. ## 安装
  5. 插件市场导入本插件即可。首次导入可能使用重新编译。
  6. **注意**
  7. * 🔔 本插件依赖的[lime-svg](https://ext.dcloud.net.cn/plugin?id=18519)在 uniapp x app中是原生插件,如果购买(收费为5元)则需要自定义基座,才能使用!uniapp可忽略。
  8. * 🔔 不需要[lime-svg](https://ext.dcloud.net.cn/plugin?id=18519)在lime-icon代码中注释掉即可
  9. ```html
  10. // lime-icon/components/l-icon.uvue 第4行 注释掉即可。
  11. <!-- <l-svg class="l-icon" :class="classes" :style="styles" :color="color" :src="iconUrl" v-else :web="web" @error="imageError" @load="imageload" @click="$emit('click')"></l-svg> -->
  12. ```
  13. ## 使用
  14. ### 使用默认
  15. 插件默认内置了[tdesign icon](https://icones.js.org/collection/tdesign),不需要加`tdesign`前缀
  16. ```html
  17. <l-icon name="circle" />
  18. ```
  19. ### 使用iconify
  20. 到 [icones](https://icones.js.org/) 网站找到需要的图标,通过 `name` 属性来指定需要使用的图标
  21. 由于`uniapp x app`端使用了原生的[lime-svg](https://ext.dcloud.net.cn/plugin?id=18519)插件,这个插件是收费的,请慎重考虑,也可以按[lime-svg](https://ext.dcloud.net.cn/plugin?id=18519)使用的第三点操作可免费使用。。
  22. ![](https://img-cdn-tx.dcloud.net.cn/stream/plugin_screens/263cfd20-39e6-11ee-b4f0-9bc760224a38_1.png?1735701321)
  23. ![](https://img-cdn-tx.dcloud.net.cn/stream/plugin_screens/263cfd20-39e6-11ee-b4f0-9bc760224a38_2.png?1735701324)
  24. ```html
  25. <l-icon name="ri:account-box-fill" />
  26. ```
  27. ### 使用图标URL
  28. ```html
  29. <l-icon name="https://fastly.jsdelivr.net/npm/@vant/assets/icon-demo.png"></l-icon>
  30. ```
  31. ### 图标颜色
  32. 通过 `color` 属性来设置图标的颜色。
  33. ```html
  34. <l-icon name="ri:aliens-fill" color="#1989fa" />
  35. <l-icon name="icon-park-outline:acoustic" color="#ee0a24" />
  36. ```
  37. ### 图标大小
  38. 通过 `size` 属性来设置图标的尺寸大小,可以指定任意 CSS 单位。
  39. ```html
  40. <!-- 不指定单位,默认使用 px -->
  41. <l-icon name="ri:aliens-fill" size="40" />
  42. <!-- 指定使用 rpx 单位 -->
  43. <l-icon name="ri:aliens-fill" size="34rpx" />
  44. ```
  45. ## 私有化iconify
  46. 默认会使用`iconify`的API,如果你想私有化可按以下步骤来
  47. ### 第一步 安装
  48. ```cmd
  49. yarn add @iconify/json @iconify/tools @iconify/utils
  50. ```
  51. ### 第二步 配置
  52. - 需要在根目录新建一个`lime-icons.config.js`文件
  53. ```
  54. // 在根目录新建一个lime-icons.config.js文件
  55. // lime-icons.config.js
  56. module.exports = {
  57. // 输入的文件目录,自有的SVG,如果没有则不需要
  58. input: {
  59. prefix: "my-icons",
  60. dir: '/static/svg',
  61. },
  62. // 输出的配置
  63. output: {
  64. // 输出的文件目录
  65. dir: '/static/icons',
  66. // 输出的文件的格式,如果是JSON则是一个图标合集
  67. // file: 'icons.json',
  68. // 如果是SVG则是每个图标做为单独的文件
  69. file: '*.svg',
  70. },
  71. // 指定使用的图标
  72. icons: [
  73. 'el:address-book',
  74. 'uil:12-plus',
  75. 'icon-park-outline:abdominal',
  76. 'icon-park-outline:acoustic'
  77. ]
  78. }
  79. ```
  80. 在终端执行脚本
  81. ```
  82. node ./uni_modules/lime-icon/generate-icons.js
  83. ```
  84. ### ~~2、自动引入~~
  85. ~~如果使用的是`vue3`,通过配置 `vite.config.js` 达到自动引入~~
  86. 这个方法作废,因有些图标是动态的,在编译阶段不知道图标的名称无法捕获
  87. ```js
  88. import uni from '@dcloudio/vite-plugin-uni';
  89. import limeIcon from './uni_modules/lime-icon/vite-plugin';
  90. import path from 'path'
  91. export default defineConfig({
  92. plugins: [uni(), limeIcon({
  93. // 输出的配置
  94. output: {
  95. // 输出的文件目录
  96. dir: path.join(__dirname, '/static/icons'),
  97. // 输出的文件的格式,如果是JSON则是生成一个图标合集, 例如: /static/icons/icons.json
  98. // file: 'icons.json',
  99. // 如果是SVG则是每个图标做为单独的文件 例如: /static/icons/xx/xxx.svg
  100. file: '*.svg',
  101. },
  102. // 可选
  103. icons: []
  104. })]
  105. })
  106. ```
  107. ### 第三步 挂载图标地址
  108. 如果使用内置的`icon (tdesign icons)`或不私有化`iconify`则不需要进行这一步
  109. **注意,如果使用了`iconify` 的API, 小程序需要去公众平台设置下载白名单 `https://api.iconify.design`**
  110. ```js
  111. // main.js | main.ts | main.uts
  112. // 配置svg指定路径,后期可上传到后端,不占用本地空间,如果使用的是`iconify`也可以不配置这一步
  113. import {limeIcons} from '@/uni_modules/lime-icon'
  114. // 第一个参数是icon host地址,没有则填null
  115. // 第二个参数是icons json合集,没有则填null
  116. // app.use(limeIcons, null, null)
  117. // 示例1 配置icons地址
  118. app.use(limeIcons, 'https://xxx.cn/static/icons', null)
  119. // 示例2 配置icons集合json
  120. import icons from './static/icons/icons.json'
  121. app.use(limeIcons, null, icons)
  122. ```
  123. ### 关于vue2的使用方式
  124. - 插件使用了`composition-api`, 如果你希望在vue2中使用请按官方的教程[vue-composition-api](https://uniapp.dcloud.net.cn/tutorial/vue-composition-api.html)配置
  125. - 关键代码是: 在main.js中 在vue2部分加上这一段即可
  126. ```js
  127. // vue2
  128. import Vue from 'vue'
  129. import VueCompositionAPI from '@vue/composition-api'
  130. // 配置svg指定路径,后期可上传到后端,不占用本地空间,如果使用的是`iconify`也可以不配置这一步
  131. import {limeIcons} from '@/uni_modules/lime-icon'
  132. Vue.use(VueCompositionAPI)
  133. // 示例1 配置icons地址
  134. Vue.use(limeIcons, ['https://xxx.cn/static/icons', null])
  135. // 示例2 配置icons集合json
  136. import icons from './static/icons/icons.json'
  137. Vue.use(limeIcons, [null, icons])
  138. ```
  139. ## API
  140. ### Props
  141. | 参数 | 说明 | 类型 | 默认值 |
  142. | --------------------------| ------------------------------------------------------------ | ---------------- | ------------ |
  143. | name | 图标名称 | <em>string</em> | `` |
  144. | color | 颜色 | <em>string</em> | `` |
  145. | size | 尺寸 | <em>string</em> | `square` |
  146. | prefix | 字体图标前缀 | <em>string</em> | `` |
  147. | inherit | 是否继承颜色 | <em>boolean</em> | `true` |
  148. | web | 原生`app(nvue,uvue)`是否使用web渲染 | <em>boolean</em> | `false` |
  149. ### Events
  150. | 参数 | 说明 | 参数 |
  151. | --------------------------| ------------------------------------------------------------ | ---------------- |
  152. | click | 点击 | |
  153. ## 打赏
  154. 如果你觉得本插件,解决了你的问题,赠人玫瑰,手留余香。
  155. ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png)
  156. ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png)