华为太空人表盘

最近看到蛮火的太空人表盘,就用html和js去写了一个,时间可以动,如果想要其他数字切换可以自己去改,,只有那几个icon是图片,其他全是布局,可以直接复制,代码都贴在下面了,不过需要自己下载个ttf时钟字体文件,在css里面引入。
这里是完整项目的下载链接

下载链接

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="./css/css.css">
    <script type="text/javascript" src="js/js.js"></script>
    <title>太空人表盘</title>
</head>
<body>
    <div class="box">
        <div class="topleft">
            <img src="./image/1.png" alt="">
            <span>80%</span>
        </div>
        <div class="topright">
            <div class="topright_t">
                <div class="title">空气优质</div>
                <img src="./image/2.png" alt="" class="img">
                <div class="up">
                    <div>
                        <div>晴天</div>
                        <div style="margin-top:10px;">25°C</div>
                    </div>
                    <div style="margin-left: 40px;" id="kongqi">
                        <div><span> 26°</span><img src="./image/3.png" alt="" style="margin-top:10px;"></div>
                        <div><span> 26°</span><img src="./image/3.png" alt="" style="transform:rotate(-60deg);"></div>
                    </div>
                </div>
            </div>
        </div>
        <div class="size">
            <span id="timeh" style=" font-family: MyFont;">15</span>
            <span class="time" style=" font-family: MyFont;">:</span>
            <span id="timem" style=" font-family: MyFont;">39</span>
            <span style="font-size: 60px;margin-left: 5px; font-family: MyFont;" id="times">00</span>
        </div>
        <div class="time_right">
            <div id="span"> <span>十一</span></div>
            <div style="margin-top: 15px;text-align: right;"><span id="zhou">周二</span><span style="margin-left: 5px;"
                    id="md">00-00</span>
            </div>
        </div>
        <div class="time_left">
            <div>80-129</div>
            <div>
                <img src="./image/4.png" alt=""> <span style="transform: scale(1.5,1);" id="heart">93</span>
            </div>
        </div>
        <div class="imgdata">
            <img src="./image/6.png" alt="">
        </div>
        <div class="imgdata1">
            <img src="./image/7.gif" alt="">
        </div>
        <div class="xie">
            <img src="./image/5.png" alt="" style="margin-right:10px"><span style="transform: scale(1,0.7);">6723</span>
        </div>
        <div class="centent"></div>
        <div class="butletf">
            <div class="div1">睡眠</div>
            <div class="div2"><span>7h</span><span>30m</span></div>
        </div>
        <div class="butright">
            <div class="div3">8.66km</div>
        </div>
    </div>
    <script>
        var h = document.getElementById('timeh')
        var m = document.getElementById('timem')
        var s = document.getElementById('times')
        var zhou = document.getElementById('zhou')
        var md = document.getElementById('md')
        var span = document.getElementById('span').getElementsByTagName('span')
        var divs = document.getElementById('kongqi').getElementsByTagName('div')
        var heart = document.getElementById('heart')
        var myDate = new Date();
        // 替换星期
        var arrt = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九");
        var arrtssss = new Array("一", "二", "三", "四", "五", "六", "日",);
        /*获取当前农历*/
        function showCal() {
            var D = new Date();
            var yy = D.getFullYear();
            var mm = D.getMonth() + 1;
            var dd = D.getDate();
            var ww = D.getDay();
            var ss = parseInt(D.getTime() / 1000);
            if (yy < 100) yy = "19" + yy;
            return GetLunarDay(yy, mm, dd);
        }

        //定义全局变量 
        var CalendarData = new Array(100);
        var madd = new Array(12);
        var tgString = "甲乙丙丁戊己庚辛壬癸";
        var dzString = "子丑寅卯辰巳午未申酉戌亥";
        var numString = "一二三四五六七八九十";
        var monString = "正二三四五六七八九十冬腊";
        var weekString = "日一二三四五六";
        var sx = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
        var cYear, cMonth, cDay, TheDate;
        CalendarData = new Array(0xA4B, 0x5164B, 0x6A5, 0x6D4, 0x415B5, 0x2B6, 0x957, 0x2092F, 0x497, 0x60C96, 0xD4A, 0xEA5, 0x50DA9, 0x5AD, 0x2B6, 0x3126E, 0x92E, 0x7192D, 0xC95, 0xD4A, 0x61B4A, 0xB55, 0x56A, 0x4155B, 0x25D, 0x92D, 0x2192B, 0xA95, 0x71695, 0x6CA, 0xB55, 0x50AB5, 0x4DA, 0xA5B, 0x30A57, 0x52B, 0x8152A, 0xE95, 0x6AA, 0x615AA, 0xAB5, 0x4B6, 0x414AE, 0xA57, 0x526, 0x31D26, 0xD95, 0x70B55, 0x56A, 0x96D, 0x5095D, 0x4AD, 0xA4D, 0x41A4D, 0xD25, 0x81AA5, 0xB54, 0xB6A, 0x612DA, 0x95B, 0x49B, 0x41497, 0xA4B, 0xA164B, 0x6A5, 0x6D4, 0x615B4, 0xAB6, 0x957, 0x5092F, 0x497, 0x64B, 0x30D4A, 0xEA5, 0x80D65, 0x5AC, 0xAB6, 0x5126D, 0x92E, 0xC96, 0x41A95, 0xD4A, 0xDA5, 0x20B55, 0x56A, 0x7155B, 0x25D, 0x92D, 0x5192B, 0xA95, 0xB4A, 0x416AA, 0xAD5, 0x90AB5, 0x4BA, 0xA5B, 0x60A57, 0x52B, 0xA93, 0x40E95);
        madd[0] = 0;
        madd[1] = 31;
        madd[2] = 59;
        madd[3] = 90;
        madd[4] = 120;
        madd[5] = 151;
        madd[6] = 181;
        madd[7] = 212;
        madd[8] = 243;
        madd[9] = 273;
        madd[10] = 304;
        madd[11] = 334;

        function GetBit(m, n) {
            return (m >> n) & 1;
        }
        //农历转换 
        function e2c() {
            TheDate = (arguments.length != 3) ? new Date() : new Date(arguments[0], arguments[1], arguments[2]);
            var total, m, n, k;
            var isEnd = false;
            var tmp = TheDate.getYear();
            if (tmp < 1900) {
                tmp += 1900;
            }
            total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + madd[TheDate.getMonth()] + TheDate.getDate() - 38;

            if (TheDate.getYear() % 4 == 0 && TheDate.getMonth() > 1) {
                total++;
            }
            for (m = 0; ; m++) {
                k = (CalendarData[m] < 0xfff) ? 11 : 12;
                for (n = k; n >= 0; n--) {
                    if (total <= 29 + GetBit(CalendarData[m], n)) {
                        isEnd = true; break;
                    }
                    total = total - 29 - GetBit(CalendarData[m], n);
                }
                if (isEnd) break;
            }
            cYear = 1921 + m;
            cMonth = k - n + 1;
            cDay = total;
            if (k == 12) {
                if (cMonth == Math.floor(CalendarData[m] / 0x10000) + 1) {
                    cMonth = 1 - cMonth;
                }
                if (cMonth > Math.floor(CalendarData[m] / 0x10000) + 1) {
                    cMonth--;
                }
            }
        }

        function GetcDateString() {
            var tmp = "";
            /*显示农历年:( 如:甲午(马)年 )*/
            /*tmp+=tgString.charAt((cYear-4)%10); 
            tmp+=dzString.charAt((cYear-4)%12); 
            tmp+="("; 
            tmp+=sx.charAt((cYear-4)%12); 
            tmp+=")年 ";*/
            if (cMonth < 1) {
                tmp += "(闰)";
                tmp += monString.charAt(-cMonth - 1);
            } else {
                tmp += monString.charAt(cMonth - 1);
            }
            tmp += "月";
            tmp += (cDay < 11) ? "初" : ((cDay < 20) ? "十" : ((cDay < 30) ? "廿" : "三十"));
            if (cDay % 10 != 0 || cDay == 10) {
                tmp += numString.charAt((cDay - 1) % 10);
            }
            return tmp;
        }

        function GetLunarDay(solarYear, solarMonth, solarDay) {
            //solarYear = solarYear<1900?(1900+solarYear):solarYear; 
            if (solarYear < 1921 || solarYear > 2021) {
                return "";
            } else {
                solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1) : 11;
                e2c(solarYear, solarMonth, solarDay);
                return GetcDateString();
            }
        }

        date_format()
        function date_format() {
            var myDate = new Date();
            if (myDate.getHours() < 10) {
                h.innerHTML = "0" + myDate.getHours()
            } else {
                h.innerHTML = myDate.getHours()
            }
            if (myDate.getMinutes() < 10) {
                m.innerHTML = "0" + myDate.getMinutes()
            } else {
                m.innerHTML = myDate.getMinutes()
            }
            if (myDate.getSeconds() < 10) {
                s.innerHTML = "0" + myDate.getSeconds();
            } else {
                s.innerHTML = myDate.getSeconds();
            }
            zhou.innerHTML = "周" + arrtssss[myDate.getDay() - 1];
            md.innerHTML = (myDate.getMonth() + 1) + "-" + myDate.getDate();
            span[0].innerHTML = showCal();
        };
        setInterval(() => {
            date_format()
        }, 300);
        // 温度变化
        function date_tow() {
            console.log(divs[0].getElementsByTagName('span')[0].innerText)
            divs[0].getElementsByTagName('span')[0].innerHTML = divs[0].getElementsByTagName('span')[0].innerText == '26°' ? '25°' : '26°';
            divs[1].getElementsByTagName('span')[0].innerHTML = divs[1].getElementsByTagName('span')[0].innerText == '20°' ? '19°' : '20°';
            heart.innerHTML = heart.innerText == 93 ? '94' : '93'
        }
        setInterval(() => {
            date_tow()
        }, 3000);

    </script>
</body>

</html>

css

```c
@charset 'utf-8';

* {
    margin: 0;
    padding: 0;
    font-family: 'Sans-serif';
}

@font-face {
    font-family: "MyFont";
    /*字体名称*/
    /* src: url ("/11px2bus.TTF");
    src: url ("/11px3bus.TTF");*/
    /* src: url("./11pxbus.TTF"); */
    src: url('./DIGITAL-Regular.ttf');
    /* src: local ("./DIGITAL-Dreamfat.ttf"); */
    /*字体源文件*/
    font-weight: 600;
    font-style: normal;
}

.box {
    width: 800px;
    height: 800px;
    border-radius: 50%;
    border: 50px solid rgb(68, 68, 68);
    margin: auto;
    margin-top: 20px;
    overflow: hidden;
    position: relative;
    background: #DFE6F0;
}

.topleft {
    position: absolute;
    left: 0;
    top: -4px;
    height: 200px;
    width: 312px;
    border: 4px solid rgb(68, 68, 68);
    position: relative;
}

.topleft img {
    position: absolute;
    top: 60px;
    right: 20px;
    width: 70px;
    transform: rotate(-86deg);

}

.topleft span {
    position: absolute;
    left: 50%;
    bottom: 5px;
    font-size: 40px;
    transform: translateX(-50%);
    transform: scale(2, 1.3);
}

.topright {
    position: absolute;
    right: 0;
    top: -4px;
    height: 200px;
    width: 476px;
    border: 4px solid rgb(68, 68, 68);
    border-left-width: 0;

}

.topright .img {
    position: absolute;
    right: 130px;
    bottom: 40px;
    width: 80px;
}

.topright_t {
    position: relative;
    margin-top: 40px;
    width: 100%;
    height: 180px;
    font-size: 37px;
}

.topright .up {
    position: absolute;
    right: 50%;
    bottom: 80px;
    left: 30px;
    font-size: 32px;
    transform: translateY(50%);
    display: flex;
}

/* .topright .up div{ */
.topright .title {
    position: absolute;
    left: 30px;
}

.topright .up div div {
    display: flex;
    align-items: center;

}

.topright .up img {
    width: 40px;
    display: inline-block;
}

.centent {
    position: absolute;
    bottom: 160px;
    left: 0;
    right: 0;
    border-bottom: 4px solid rgb(68, 68, 68);

}

.butletf {
    position: absolute;
    bottom: 80px;
    left: 0;
    right: 312px;
    height: 80px;
    border-right: 4px solid rgb(68, 68, 68);
    /* position: relative; */
    display: flex;
}
.butletf::before{
    content:'距离';
    position: absolute;
    right: -140px;
    font-size: 45px;
    font-weight:500;
}
.butletf .div1{
    height: 100%;
    font-size: 45px;
    width: 50%;
    text-align: right;
}
.butletf .div2{
    height: 100%;
    font-size: 48px;
    margin-left: 50px;
    text-align:right;
    font-weight: 800;
}
.div3{
    height: 100%;
    font-size: 48px;
    width: 48%;
    margin-left: 20px;
    text-align: left;
    font-weight: 800;
}
.butletf::after {
    content: '';
    border: 2px solid rgb(68, 68, 68);
    position: absolute;
    bottom: 0;
    right: 0;
    left: 280px;
}

.butright {
    position: absolute;
    left: 280px;
    right: 0;
    border-left: 4px solid rgb(68, 68, 68);
    bottom: 0px;
    height: 80px;

}

.size {
    position: absolute;
    top: 185px;
    left: 50%;
    transform: translateX(-50%);
    font-family: 'MyFont';

}

.size span {
    display: inline-block;
    font-size: 140px;
}

.size .time {
    position: relative;
    color: #DFE6F0;
}

.time::after {
    content: ":";
    position: absolute;
    left: 50%;
    font-size: 140px;
    transform: translate(-50%, -11%);
    color: black;
}

.xie{
    font-family: 'Sans-serif';
    position: absolute;
    bottom: 162px;
    left: 555px;
    font-size: 42px;
    display: flex;
    align-items: center;
}
.xie img{
    width: 65px;
    height: 85px;
}
/* 日期 */
.time_right{
    font-family: 'Sans-serif';
    position: absolute;
    right: 40px;
    top: 50%;
    font-size: 28px;
}

/* 心率 */
.time_left{
    position: absolute;
    bottom: 180px;
    left: 80px;
    font-size: 30px;
}
.time_left div{
    display: flex;
    align-items: center;
}
.time_left div img{
    width: 60px;
    margin:0 10px;
    margin-left: 20px;
}
.imgdata1{
  
    position: absolute;
    top: 45%;
    left: 38%;

    /* transform: translate(-50%,-50%); */
}
.imgdata1 img{
    width:200px;

}
.imgdata{
    display: none;
    position: absolute;
    top: 40%;
    left: 37%;
    transform:rotate(-60deg);
    /* transform: translate(-50%,-50%); */
}
.imgdata img{
    width:250px;
    animation: run 2s linear infinite;
}

@keyframes run {
    0%{transform:  rotateY(0deg);
    }
    /* 25%{transform:  rotateY(1460deg);
    } */
    50%{transform:  rotateY(180deg);
    }
    /* 75%{transform:  rotateY(5840deg);
    } */
    100%{transform:  rotateY(360deg);
    }
}

在这里插入图片描述
小白一个,多多包涵

  • 31
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 33
    评论
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值