组件库文档 tmui.design
图标 Icon
图标,提供了一个spin功能用于自动旋转图标在Nvue中使用原生动画
3.0.89+开始,允许自定图标,并且作了优化规则
因很多人看不懂规则,我现在重新写了个规则希望大家能看明白。按理是比较简单的。
- 下载字体图标,通过iconfont或者其它方式下载字体图标都行
- 图标的字体名称一定要与前缀相同,以iconfont项目设置为例:前缀
myicon-
,字体名称:myicon
- 下载的图标包应该要包含:class的css文件以及ttf的base64文件(用于nvue安装)
- 引入好css图标,nvue安装好ttf base64图标文件
- 使用图标比如你有个图标名称叫
music
图标它的unicode符号为
.应该这么使用
ts
//这就是自定义图标的使用方法,这样在全平台都可显示。
<tm-icon name="myicon-music-e617"></tm-icon>
如何在nvue下安装base64位的ttf文件?
ts
import { onBeforeMount } from "vue"
// #ifdef APP-NVUE || APP-PLUS-NVUE
//customfont为你的base64的ttf字体内容
import { customfont } from "./customIcon/customiconfont";
var domModule = weex.requireModule("dom");
const animation = uni.requireNativePlugin("animation");
// #endif
// #ifdef APP-PLUS-NVUE
onBeforeMount(() => {
//customfont为你的base64的ttf字体内容
domModule.addRule("fontFace", {
fontFamily: "myicon", //注意这里必须是驼峰命名,跟上面的css样式对照
src: "url('data:font/ttf;charset=utf-8;base64," + customfont + "')",
});
});
// #endif
介绍完毕,如果还看不懂,我也无能为力了
🌶️ 图标 Icon 示例
查看模拟效果+
示例模板
vue
<template>
<tm-app>
<tm-sheet :margin="[32, 32, 32, 16]">
<tm-text :font-size="24" _class="text-weight-b" label="基本示例"></tm-text>
<tm-divider></tm-divider>
<view class="flex flex-row flex-wrap">
<tm-icon :font-size="50" name="tmicon-playcircle-fill"></tm-icon>
<tm-icon color="primary" :font-size="50" name="tmicon-user-fill"></tm-icon>
<tm-icon color="red" :font-size="50" name="tmicon-minus-circle-fill"></tm-icon>
</view>
</tm-sheet>
<tm-sheet :margin="[32, 0, 32, 16]">
<tm-text :font-size="24" _class="text-weight-b" label="图片图标"></tm-text>
<tm-divider></tm-divider>
<view class="flex flex-row flex-wrap">
<tm-icon color="red" :font-size="80" name="https://roundicons.com/wp-content/uploads/2017/09/PIzza-freebie-icon.png"></tm-icon>
<tm-icon color="red" :font-size="80" name="https://roundicons.com/wp-content/uploads/2017/09/Rheindeer-freebie-icon.png"></tm-icon>
<tm-icon color="red" :font-size="80" name="https://roundicons.com/wp-content/uploads/2017/09/Donut-freebie-icon.png"></tm-icon>
</view>
</tm-sheet>
<tm-sheet :margin="[32, 0, 32, 16]">
<tm-text :font-size="24" _class="text-weight-b" label="自定义图标"></tm-text>
<tm-divider></tm-divider>
<view class="flex flex-row flex-wrap">
<tm-icon customicon name="myicon-music-e617"></tm-icon>
<tm-icon customicon name="myicon-news-e618"></tm-icon>
<tm-icon customicon name="myicon-phone-e619"></tm-icon>
</view>
</tm-sheet>
<tm-sheet :margin="[32, 0, 32, 16]">
<tm-text :font-size="24" _class="text-weight-b" label="spin 旋转图标"></tm-text>
<tm-divider></tm-divider>
<tm-icon @click="spin = !spin" :spin="spin" :font-size="50" name="tmicon-shuaxin"></tm-icon>
</tm-sheet>
<tm-sheet :margin="[32, 0, 32, 16]">
<tm-text :font-size="24" _class="text-weight-b" label="rotate-deg 旋转图标角度与spin不能混用"></tm-text>
<tm-divider></tm-divider>
<view class="flex flex-row">
<tm-button :margin="[24, 0]" @click="deg += 90" label="+90deg"></tm-button>
<tm-button :shadow="0" text :border="2" outlined :margin="[24, 0]" @click="deg -= 90" label="-90deg"></tm-button>
</view>
<view class="pa-32">
<tm-icon rotate :rotate-deg="deg" :font-size="50" name="tmicon-angle-down"></tm-icon>
</view>
</tm-sheet>
<tm-sheet :margin="[32, 0, 32, 16]">
<tm-text :font-size="24" _class="text-weight-b" :label="`部分参考图标(共${fontList.glyphs.length}个),前缀【tmicon-】`"></tm-text>
<tm-divider></tm-divider>
<tm-grid :col="4" :width="630">
<tm-grid-item @click="onclick(item)" :height="140" v-for="(item, index) in list" :key="index">
<tm-icon :font-size="42" :name="item.name"></tm-icon>
<tm-text :label="item.text" :font-size="22"></tm-text>
</tm-grid-item>
</tm-grid>
<!-- #ifndef MP -->
<tm-button v-if="!showAll" block label="展示所有图标(过多会卡)" @click="onShowAll"></tm-button>
<!-- #endif -->
</tm-sheet>
</tm-app>
</template>
<script lang="ts" setup>
import { ref, onMounted, onBeforeUnmount, onBeforeMount } from 'vue'
import tmApp from '@/tmui/components/tm-app/tm-app.vue'
import tmSheet from '@/tmui/components/tm-sheet/tm-sheet.vue'
import tmDivider from '@/tmui/components/tm-divider/tm-divider.vue'
import tmIcon from '@/tmui/components/tm-icon/tm-icon.vue'
import tmText from '@/tmui/components/tm-text/tm-text.vue'
import tmGridItem from '@/tmui/components/tm-grid-item/tm-grid-item.vue'
import tmGrid from '@/tmui/components/tm-grid/tm-grid.vue'
import tmButton from '@/tmui/components/tm-button/tm-button.vue'
import fontList from '@/tmui/tool/tmicon/iconfont.json'
// #ifdef APP-NVUE || APP-PLUS-NVUE
import { customfont } from './customIcon/customiconfont'
var domModule = weex.requireModule('dom')
const animation = uni.requireNativePlugin('animation')
// #endif
const spin = ref(true)
let showAll = ref(false)
const deg = ref(0)
const list = ref([])
//演示自定义图标
// #ifdef APP-PLUS-NVUE
onBeforeMount(() => {
domModule.addRule('fontFace', {
fontFamily: 'myicon', //注意这里必须是驼峰命名,跟上面的css样式对照
src: "url('data:font/ttf;charset=utf-8;base64," + customfont + "')"
})
})
// #endif
onBeforeUnmount(() => {
list.value = []
})
onMounted(() => {
uni.showLoading({ title: '...', mask: true })
let ls_list = fontList.glyphs.slice(0, 30)
setTimeout(() => {
for (let i = 0; i < ls_list.length; i++) {
list.value.push({ name: fontList.css_prefix_text + ls_list[i].font_class, text: ls_list[i].name })
}
uni.hideLoading()
}, 100)
})
//显示全部图标
const onShowAll = () => {
showAll.value = true
let ls_list = fontList.glyphs //全部显示
list.value = []
uni.showLoading({ title: '...', mask: true })
for (let i = 0; i < ls_list.length; i++) {
list.value.push({ name: fontList.css_prefix_text + ls_list[i].font_class, text: ls_list[i].name })
}
uni.hideLoading()
}
function onclick(item) {
uni.setClipboardData({ data: item.name }).then(() => uni.showToast({ title: '复制成功', icon: 'none' }))
}
</script>
🌶️ 兼容性
APP-VUE | APP-NVUE | 小程序 | WEB/H5 | VUE3/TS |
---|---|---|---|---|
✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
🌱 参数
本组件含有公共属性 公共属性
参数名 | 类型 | 默认值 | 描述 |
---|---|---|---|
fontSize | [Number] | 34 | 图标大小 |
color | String | '' | 图标颜色 |
name | String | '' | 图标名称 |
spin | [Boolean] | true | 是否使图标旋转 |
unitv3.0.73+ | [String] | rpx | 字号单位 |
rotate | [Boolean] | true | 是否允许单独控制图标旋转的角度 |
rotate-deg | [Number] | 0 | 图标旋转的角度 |
customicon | [Boolean] | false | 当你采用自定义图标名称时,请开启此属性 |
🌹 事件
事件名 | 参数 | 返回数据 | 描述 |
---|---|---|---|
click | 点击事件 | ||
longpress | 长按事件 |
🌽 slot插槽
默认default
🥗 ref方法
无
方法名 | 参数 | 返回值 | 描述 |
---|