|
@@ -0,0 +1,333 @@
|
|
|
+<template>
|
|
|
+ <view class="wrap">
|
|
|
+ <view class="box" :class="{'circle':item === ':','clear':item === ':'&&!close,'active':item === ':'&&twinkle}"
|
|
|
+ v-for="(item,index) in list" :key="index">
|
|
|
+ <block v-if="item === ':'">
|
|
|
+ <view v-if="close" class="circle-box "></view>
|
|
|
+ <view v-if="close" class="circle-box "></view>
|
|
|
+ </block>
|
|
|
+ <block v-else>
|
|
|
+ <view :class="{'box-top':idx === 0 , 'box-bottom':idx === 1 }" v-for="(num , idx) in 2" :key="idx">
|
|
|
+ <view v-if="idx === 0" class="box-top-top" :class="{'active':timeList[item][0]}"></view>
|
|
|
+ <view class="box-top-right" :class="{'active':timeList[item][idx===0 ?1:4]}"></view>
|
|
|
+ <view class="box-top-bottom" :class="{'active':timeList[item][idx===0 ?2:5]}"></view>
|
|
|
+ <view class="box-top-left " :class="{'active':timeList[item][idx===0 ?3:6]}"></view>
|
|
|
+ </view>
|
|
|
+ </block>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ export default {
|
|
|
+ props: {
|
|
|
+ /**
|
|
|
+ * 模式
|
|
|
+ * 1. 时间模式 : 正常模式 : 显示十、分、秒
|
|
|
+ * 2. 时间模式 : 不显示秒
|
|
|
+ * 3. 时间记录模式
|
|
|
+ * 4. 自定义模式 ,随意输入数字数组
|
|
|
+ */
|
|
|
+ mode: {
|
|
|
+ type: Number,
|
|
|
+ default: 1
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 是否开启间隔符号
|
|
|
+ */
|
|
|
+ close: {
|
|
|
+ type: Boolean,
|
|
|
+ default: true
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 间隔符号是否闪烁
|
|
|
+ */
|
|
|
+ twinkle: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ valArr: {
|
|
|
+ type: Array,
|
|
|
+ default: () => {
|
|
|
+ return []
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ // 定义时间显示规律
|
|
|
+ timeList: {
|
|
|
+ '1': [false, true, false, false, true, false, false],
|
|
|
+ '2': [true, true, true, false, false, true, true],
|
|
|
+ '3': [true, true, true, false, true, true, false],
|
|
|
+ '4': [false, true, true, true, true, false, false],
|
|
|
+ '5': [true, false, true, true, true, true, false],
|
|
|
+ '6': [true, false, true, true, true, true, true],
|
|
|
+ '7': [true, true, false, false, true, false, false],
|
|
|
+ '8': [true, true, true, true, true, true, true],
|
|
|
+ '9': [true, true, true, true, true, true, false],
|
|
|
+ '0': [true, true, false, true, true, true, true]
|
|
|
+ },
|
|
|
+ list: [], // 显示时间
|
|
|
+ timer: null,
|
|
|
+ state: 0, //0停止 1启动
|
|
|
+ };
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ // 显示模式1 初始化
|
|
|
+ // if (this.mode < 3) {
|
|
|
+ // clearInterval(this.timer);
|
|
|
+ // this.list = this.strToArr(this.Format(new Date()), this.mode);
|
|
|
+ // this.timer = setInterval(() => {
|
|
|
+ // this.list = this.strToArr(this.Format(new Date()), this.mode);
|
|
|
+ // }, 1000);
|
|
|
+ // }
|
|
|
+ if (this.mode === 3) {
|
|
|
+ this.list = [0, 0, ':', 0, 0];
|
|
|
+ this.state && this.restart();
|
|
|
+ }
|
|
|
+ if (this.mode === 4) {
|
|
|
+ this.list = this.valArr
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ valArr(newVal, oldVal) {
|
|
|
+ this.list = newVal
|
|
|
+ }
|
|
|
+ },
|
|
|
+ beforeDestroy() {
|
|
|
+ clearInterval(this.timer);
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ recover(){
|
|
|
+ this.state = 1;
|
|
|
+ },
|
|
|
+ pause() {
|
|
|
+ this.state = 0;
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 计时器
|
|
|
+ */
|
|
|
+ restart() {
|
|
|
+ this.list = [0, 0, ':', 0, 0];
|
|
|
+ let num = 0;
|
|
|
+ this.state = 1;
|
|
|
+ clearInterval(this.timer);
|
|
|
+ this.timer = setInterval(() => {
|
|
|
+ if (this.state == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ num++;
|
|
|
+ // 倒计时
|
|
|
+ if (num > 9) {
|
|
|
+ this.$set(this.list, 4, 0);
|
|
|
+ num = this.list[3];
|
|
|
+ num++;
|
|
|
+ this.$set(this.list, 3, num);
|
|
|
+ if (num > 5) {
|
|
|
+ this.$set(this.list, 3, 0);
|
|
|
+ num = this.list[1];
|
|
|
+ num++;
|
|
|
+ this.$set(this.list, 1, num);
|
|
|
+ if (num > 9) {
|
|
|
+ this.$set(this.list, 1, 0);
|
|
|
+ num = this.list[0];
|
|
|
+ num++;
|
|
|
+ this.$set(this.list, 0, num);
|
|
|
+ if (num > 5) {
|
|
|
+ this.$set(this.list, 0, 0);
|
|
|
+ // num = this.list[1];
|
|
|
+ // num++;
|
|
|
+ // this.$set(this.list, 1, num);
|
|
|
+ // if (num > 9) {
|
|
|
+ // this.$set(this.list, 1, 0);
|
|
|
+ // num = this.list[0];
|
|
|
+ // num++;
|
|
|
+ // this.$set(this.list, 0, num);
|
|
|
+ // if (num > 5) {
|
|
|
+ // this.$set(this.list, 0, 0);
|
|
|
+ // // 如果时间到底,不循环就打开这段代码
|
|
|
+ // // clearInterval(this.timer);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ num = 0;
|
|
|
+ }
|
|
|
+ this.$set(this.list, 4, num);
|
|
|
+ }, 1000);
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 时间格式化
|
|
|
+ */
|
|
|
+ Format(fmt) {
|
|
|
+ let date = new Date(fmt);
|
|
|
+ var o = {
|
|
|
+ h: date.getHours(), //小时
|
|
|
+ m: date.getMinutes(), //分
|
|
|
+ s: date.getSeconds() //秒
|
|
|
+ };
|
|
|
+ // console.log(o.h, o.m, o.s);
|
|
|
+ return (
|
|
|
+ (o.h < 10 ? '0' + o.h : o.h) +
|
|
|
+ ':' +
|
|
|
+ (o.m < 10 ? '0' + o.m : o.m) +
|
|
|
+ ':' +
|
|
|
+ (o.s < 10 ? '0' + o.s : o.s)
|
|
|
+ );
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 字符串转数组
|
|
|
+ */
|
|
|
+ strToArr(str, num) {
|
|
|
+ if (num === 1) {
|
|
|
+ return str.split('');
|
|
|
+ }
|
|
|
+ if (num === 2) {
|
|
|
+ return [
|
|
|
+ str.split('')[0],
|
|
|
+ str.split('')[1],
|
|
|
+ str.split('')[2],
|
|
|
+ str.split('')[3],
|
|
|
+ str.split('')[4]
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+ @import './mehaotian-numled.scss';
|
|
|
+
|
|
|
+ .wrap {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ width: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+
|
|
|
+ .content-box {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ width: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+ }
|
|
|
+
|
|
|
+ .box {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ width: 100%;
|
|
|
+ margin: 2%;
|
|
|
+ box-sizing: border-box;
|
|
|
+
|
|
|
+ &.circle {
|
|
|
+ width: 20%;
|
|
|
+
|
|
|
+ .circle-box {
|
|
|
+ width: 100%;
|
|
|
+ height: 0;
|
|
|
+ padding-top: 100%;
|
|
|
+ background: #FFF;
|
|
|
+
|
|
|
+ &:last-child {
|
|
|
+ margin-top: 200%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.active {
|
|
|
+ opacity: 0.05;
|
|
|
+ animation: twinkle 1s infinite;
|
|
|
+ }
|
|
|
+
|
|
|
+ @keyframes twinkle {
|
|
|
+
|
|
|
+ 0%,
|
|
|
+ 100% {
|
|
|
+ opacity: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ 50% {
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.clear {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .box-top,
|
|
|
+ .box-bottom {
|
|
|
+ position: relative;
|
|
|
+ width: 100%;
|
|
|
+ height: 0;
|
|
|
+ padding-top: 100%;
|
|
|
+
|
|
|
+ &.box-top {
|
|
|
+ .box-top-top {
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ width: 100%;
|
|
|
+ height: $border-width;
|
|
|
+ @include diffstyle($imgtTansverse);
|
|
|
+ }
|
|
|
+
|
|
|
+ .box-top-right {
|
|
|
+ top: 0;
|
|
|
+ right: 0;
|
|
|
+ width: $border-width;
|
|
|
+ height: 100%;
|
|
|
+ @include diffstyle($imgVertical);
|
|
|
+ }
|
|
|
+
|
|
|
+ .box-top-bottom {
|
|
|
+ bottom: 0;
|
|
|
+ height: $border-width;
|
|
|
+ width: 100%;
|
|
|
+ @include diffstyle($imgtTansverse);
|
|
|
+ }
|
|
|
+
|
|
|
+ .box-top-left {
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ width: $border-width;
|
|
|
+ height: 100%;
|
|
|
+ @include diffstyle($imgVertical);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.box-bottom {
|
|
|
+ margin-top: -$border-width;
|
|
|
+
|
|
|
+ .box-top-right {
|
|
|
+ top: 0;
|
|
|
+ right: 0;
|
|
|
+ width: $border-width;
|
|
|
+ height: 100%;
|
|
|
+ @include diffstyle($imgVertical);
|
|
|
+ }
|
|
|
+
|
|
|
+ .box-top-bottom {
|
|
|
+ bottom: 0;
|
|
|
+ height: $border-width;
|
|
|
+ width: 100%;
|
|
|
+ @include diffstyle($imgtTansverse);
|
|
|
+ }
|
|
|
+
|
|
|
+ .box-top-left {
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ width: $border-width;
|
|
|
+ height: 100%;
|
|
|
+ @include diffstyle($imgVertical);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+</style>
|