1. Effect display
http://xiazai.jb51.net/202103/yuanma/Watch_jb51.rar 2. Source code
<html> <head> <title>Astronaut Dial</title> <meta charset="UTF-8"> <link href="./assets/css/style.css" rel="external nofollow" rel="stylesheet"> <script src="./assets/js/timeGeneration.js"></script> </head> <body> <div class="jun-meter"> <div class="jun-time-hh" id="hh"></div> <div class="jun-time-hl" id="hl"></div> <div class="jun-time-rect"></div> <div class="jun-human"></div> <div class="jun-time-mh" id="mh"></div> <div class="jun-time-ml" id="ml"></div> <div class="jun-time-sh" id="sh"></div> <div class="jun-time-sl" id="sl"></div> <div class="jun-date" id="date"></div> <div class="jun-calendar-date" id="calendarDate"></div> </div> </body> <script> function WatchMeter() { // Initialize dom this._initDom() // Update this.update() this.date = new TimeGeneration() this._render(this.date.getDate(), this.date.getCalendarDate(), this.date.getTime()) } // Modify the prototype WatchMeter.prototype = { constructor: WatchMeter, // Initialize Dom _initDom: function () { this.elem = {} this.elem.hh = document.getElementById('hh') this.elem.hl = document.getElementById('hl') this.elem.mh = document.getElementById('mh') this.elem.ml = document.getElementById('ml') this.elem.sh = document.getElementById('sh') this.elem.sl = document.getElementById('sl') this.elem.date = document.getElementById('date') this.elem.calendarDate = document.getElementById('calendarDate') }, // Update update: function () { var _this = this setInterval(function () { _this._render(_this.date.getDate(), _this.date.getCalendarDate(), _this.date.getTime()) }, 1000) }, // Rendering_render: function (date, calendarDate, time) { this._setNumberImage(this.elem.hh, time[0]) this._setNumberImage(this.elem.hl, time[1]) this._setNumberImage(this.elem.mh, time[2]) this._setNumberImage(this.elem.ml, time[3]) this._setNumberImage(this.elem.sh, time[4]) this._setNumberImage(this.elem.sl, time[5]) this.elem.date.innerText = date[2] + " " +date[0] + "-" +date[1] this.elem.calendarDate.innerText = calendarDate }, // Set the digital image_setNumberImage: function (elem, value) { elem.style.backgroundImage = "url(./assets/img/" + value + ".svg)"; } } var myWatchMeter = new WatchMeter() </script> </html>
// Generate Lunar and Gregorian calendar time function TimeGeneration() { } TimeGeneration.prototype = { constructor: TimeGeneration, WEEKDAY_NAME: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], NUMBER_STRING: "one two three four five six seven eight nine ten", MONTH_STRING: "Month, Tuesday, Wednesday, Thursday, Friday, Saturday, Saturday, August, September, Winter", MONTH_ADD: [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], CALENDAR_DATA: [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], _getBit: function (m, n) { return (m >> n) & 1; }, // Get the time array getTime: function () { var time = new Date(); return [parseInt(time.getHours() / 10), parseInt(time.getHours() % 10), parseInt(time.getMinutes() / 10), parseInt(time.getMinutes() % 10), parseInt(time.getSeconds() / 10), parseInt(time.getSeconds() % 10)] }, // Get the Gregorian calendar date array getDate: function () { var date = new Date(); return [ date.getMonth() + 1, date.getDate(), this.WEEKDAY_NAME[date.getDay()] ] }, // Get the lunar calendar date string getCalendarDate: function () { var calendar = new Date(); var tmp = calendar.getFullYear(); if (tmp < 1900) { tmp += 1900; } var total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + this.MONTH_ADD[calendar.getMonth()] + calendar.getDate() - 38; if (calendar.getFullYear() % 4 == 0 && calendar.getMonth() > 1) { total++; } var isEnd = false; var n, m, k for (m = 0; ; m++) { k = (this.CALENDAR_DATA[m] < 0xfff) ? 11 : 12; for (n = k; n >= 0; n--) { if (total <= 29 + this._getBit(this.CALENDAR_DATA[m], n)) { isEnd = true; break; } total = total - 29 - this._getBit(this.CALENDAR_DATA[m], n); } if (isEnd) break; } var month = k - n + 1; var day = total; if (k == 12) { if (month == Math.floor(this.CALENDAR_DATA[m] / 0x10000) + 1) { month = 1 - month; } if (month > Math.floor(this.CALENDAR_DATA[m] / 0x10000) + 1) { month--; } } var tmp = ""; if (month < 1) { tmp += "(leap year)"; tmp += this.MONTH_STRING.charAt(-month - 1); } else { tmp += this.MONTH_STRING.charAt(month - 1); } tmp += "month"; tmp += (day < 11) ? "beginning" : ((day < 20) ? "ten" : ((day < 30) ? "twenty" : "thirty")); if (day % 10 != 0 || day == 10) { tmp += this.NUMBER_STRING.charAt((day - 1) % 10); } return tmp; } }
.jun-meter { position: relative; width: 640px; height: 640px; background-image: url("../img/ring.svg"); background-repeat: no-repeat; background-size: 100%; margin: auto; margin-top: 7%; } .jun-time-rect { position: absolute; width: 30px; height: 80px; left: 275px; top: 180px; background-image: url("../img/rect.svg"); background-size: 40px 40px; } .jun-time-hh { position: absolute; width: 100px; height: 100px; left: 140px; top: 170px; background-image: url("../img/8.svg"); background-repeat: no-repeat; background-size: 100%; } .jun-time-hl { position: absolute; width: 100px; height: 100px; left: 200px; top: 170px; background-image: url("../img/8.svg"); background-repeat: no-repeat; background-size: 100%; } .jun-time-mh { position: absolute; width: 100px; height: 100px; left: 290px; top: 170px; background-image: url("../img/8.svg"); background-repeat: no-repeat; background-size: 100%; } .jun-time-ml { position: absolute; width: 100px; height: 100px; left: 350px; top: 170px; background-image: url("../img/8.svg"); background-repeat: no-repeat; background-size: 100%; } .jun-time-sh { position: absolute; width: 60px; height: 60px; left: 430px; top: 208px; background-image: url("../img/8.svg"); background-repeat: no-repeat; background-size: 100%; } .jun-time-sl { position: absolute; width: 60px; height: 60px; left: 470px; top: 208px; background-image: url("../img/8.svg"); background-repeat: no-repeat; background-size: 100%; } .jun-calendar-date { position: absolute; width: 120px; height: 30px; left: 460px; top: 310px; line-height: 30px; font-size: 20px; text-align: center; } .jun-date { position: absolute; width: 120px; height: 30px; left: 460px; top: 345px; line-height: 30px; font-size: 20px; text-align: center; } .jun-human{ position: absolute; width: 150px; height: 150px; left: 250px; top: 280px; background-image: url("../img/human.gif"); background-repeat: no-repeat; background-size: 100%; } This concludes the article about the complete code for implementing the celebrity astronaut watch face based on JavaScript. For more information about implementing the celebrity astronaut watch face with JavaScript, please search previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: Detailed explanation of IFNULL() and COALESCE() functions to replace null in MySQL
>>: How to use glog log library in Linux environment
Generally, after there is a menu on the left, the...
Preface This article is just a simple record of m...
Use CSS to modify the browser scroll bar style ::...
Lists are used to list a series of similar or rela...
Recently, there is a particularly abnormal busine...
This article mainly introduces how to implement a...
Preface I watched web.dev's 2020 three-day li...
This article mainly introduces how some content i...
Before talking about data responsiveness, we need...
Environment Preparation Docker environment MySQL ...
Abstract: This article mainly explains how to ins...
After MySQL database optimization, not only can t...
Installation of Python 3 1. Install dependent env...
Table of contents 1. How to obtain different view...
Preface This article records how I use docker-com...