<template>
|
<div class="light" :class="{normal: !warn && !danger, warn: !danger && warn, danger, mini: mini}">
|
<em><i></i></em>
|
</div>
|
</template>
|
|
<script>
|
export default {
|
name: 'Light',
|
props: {
|
// 警告
|
warn: {
|
type: Boolean,
|
default: false
|
},
|
// 危险
|
danger: {
|
type: Boolean,
|
default: false
|
},
|
// 最小尺寸
|
mini: {
|
type: Boolean,
|
default: false
|
}
|
}
|
}
|
</script>
|
|
<style scoped lang="scss">
|
$cycle-size01: 16px;
|
$cycle-size02: 6px;
|
$normal-color: #00CC99;
|
$shadow-color: #00CCa9;
|
$warn-color: #FFCC33;
|
$warn-shadow-color: #FFCbe3;
|
$danger-color: #FF3300;
|
$dange-shadowr-color: #FF3310;
|
@mixin light-status ($cycle-bg) {
|
em {
|
background: $cycle-bg;
|
i {
|
background: mix($cycle-bg, #000030, 0.5);
|
}
|
}
|
}
|
.light {
|
display: inline-block;
|
border-radius: 50%;
|
em {
|
width: $cycle-size01;
|
height: $cycle-size01;
|
border-radius: 50%;
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
i {
|
display: block;
|
width: $cycle-size02;
|
height: $cycle-size02;
|
border-radius: 50%;
|
}
|
}
|
&.mini {
|
em {
|
width: 12px;
|
height: 12px;
|
}
|
}
|
// 正常
|
&.normal {
|
@include light-status($normal-color);
|
animation: shine-normal infinite 1s;
|
}
|
// 警告
|
&.warn {
|
@include light-status($warn-color);
|
animation: shine-warn infinite .8s;
|
}
|
// 危险
|
&.danger {
|
@include light-status($danger-color);
|
animation: shine-danger infinite .5s;
|
}
|
}
|
@keyframes shine-normal {
|
0% {
|
box-shadow: 0 0 5px $shadow-color;
|
}
|
25% {
|
box-shadow: 0 0 10px $shadow-color;
|
}
|
50% {
|
box-shadow: 0 0 15px $shadow-color;
|
}
|
100% {
|
box-shadow: 0 0 20px $shadow-color;
|
}
|
}
|
@keyframes shine-warn {
|
0% {
|
box-shadow: 0 0 5px $warn-shadow-color;
|
}
|
25% {
|
box-shadow: 0 0 10px $warn-shadow-color;
|
}
|
50% {
|
box-shadow: 0 0 15px $warn-shadow-color;
|
}
|
100% {
|
box-shadow: 0 0 20px $warn-shadow-color;
|
}
|
}
|
@keyframes shine-danger {
|
0% {
|
box-shadow: 0 0 5px $dange-shadowr-color;
|
}
|
25% {
|
box-shadow: 0 0 10px $dange-shadowr-color;
|
}
|
50% {
|
box-shadow: 0 0 15px $dange-shadowr-color;
|
}
|
100% {
|
box-shadow: 0 0 20px $dange-shadowr-color;
|
}
|
}
|
</style>
|