feat: add spin prop for Icon (#477)

Co-authored-by: 刘亚 <liuya54892@outlook.com>
This commit is contained in:
LiuYa 2021-04-13 21:42:50 +08:00 committed by GitHub
parent 021c6364fa
commit 6dd7d0f928
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 3 deletions

View File

@ -1,5 +1,9 @@
<template> <template>
<svg :class="[prefixCls, $attrs.class]" :style="getStyle" aria-hidden="true"> <svg
:class="[prefixCls, $attrs.class, spin && 'svg-icon-spin']"
:style="getStyle"
aria-hidden="true"
>
<use :xlink:href="symbolId" /> <use :xlink:href="symbolId" />
</svg> </svg>
</template> </template>
@ -23,6 +27,10 @@
type: [Number, String], type: [Number, String],
default: 16, default: 16,
}, },
spin: {
type: Boolean,
default: false,
},
}, },
setup(props) { setup(props) {
const { prefixCls } = useDesign('svg-icon'); const { prefixCls } = useDesign('svg-icon');
@ -52,4 +60,8 @@
vertical-align: -0.15em; vertical-align: -0.15em;
fill: currentColor; fill: currentColor;
} }
.svg-icon-spin {
animation: loadingCircle 1s infinite linear;
}
</style> </style>

View File

@ -1,9 +1,9 @@
<template> <template>
<SvgIcon :size="size" :name="getSvgIcon" v-if="isSvgIcon" :class="[$attrs.class]" /> <SvgIcon :size="size" :name="getSvgIcon" v-if="isSvgIcon" :class="[$attrs.class]" :spin="spin" />
<span <span
v-else v-else
ref="elRef" ref="elRef"
:class="[$attrs.class, 'app-iconify anticon']" :class="[$attrs.class, 'app-iconify anticon', spin && 'app-iconify-spin']"
:style="getWrapStyle" :style="getWrapStyle"
></span> ></span>
</template> </template>
@ -39,6 +39,7 @@
type: [String, Number] as PropType<string | number>, type: [String, Number] as PropType<string | number>,
default: 16, default: 16,
}, },
spin: propTypes.bool.def(false),
prefix: propTypes.string.def(''), prefix: propTypes.string.def(''),
}, },
setup(props) { setup(props) {
@ -99,6 +100,12 @@
.app-iconify { .app-iconify {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
&-spin {
svg {
animation: loadingCircle 1s infinite linear;
}
}
} }
span.iconify { span.iconify {