吴雨瞳添加了注释

master
wyt 4 months ago
parent b6fa092d4d
commit e95c2a8abe

@ -1,29 +1,41 @@
<template>
<!-- 外部图标容器当是外部图标时显示应用外部图标样式并绑定属性 -->
<div v-if="isExternalClass" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-bind="$attrs" />
<!-- SVG图标容器当不是外部图标时显示应用对应样式并绑定属性 -->
<svg v-else :class="svgClass" aria-hidden="true" v-bind="$attrs">
<!-- 使用use标签引用对应的SVG图标 -->
<use :href="iconName" />
</svg>
</template>
<script lang="ts">
// Vue
import { defineComponent, computed } from 'vue'
//
import { isExternalIcon } from '@/utils/validate'
// SVG
export default defineComponent({
name: 'SvgIcon',
//
props: {
//
iconClass: {
type: String,
required: true
},
//
className: {
type: String,
default: ''
}
},
setup(props) {
//
const isExternalClass = computed(() => isExternalIcon(props.iconClass))
// SVG
const iconName = computed(() => `#icon-${props.iconClass}`)
// SVG
const svgClass = computed(() => {
if (props.className) {
return 'svg-icon ' + props.className
@ -31,12 +43,15 @@ export default defineComponent({
return 'svg-icon'
}
})
//
const styleExternalIcon = computed(() => {
return {
mask: `url(${props.iconClass}) no-repeat 50% 50%`,
'-webkit-mask': `url(${props.iconClass}) no-repeat 50% 50%`
}
})
// 使
return {
isExternalClass,
iconName,
@ -48,6 +63,7 @@ export default defineComponent({
</script>
<style scoped>
/* 基础SVG图标样式设置尺寸、对齐方式等 */
.svg-icon {
width: 1em;
height: 1em;
@ -59,9 +75,10 @@ export default defineComponent({
position: relative;
}
/* 外部图标样式:设置背景色、遮罩尺寸等 */
.svg-external-icon {
background-color: currentColor;
mask-size: cover !important;
display: inline-block;
}
</style>
</style>
Loading…
Cancel
Save