使用JS创建一个实时动态的时钟

项目中有个小组件是一个实时动态的时钟,虽然很简单,但是我把代码分享出来,以后也能直接拿来用。(解决了setInterval只执行一次的问题)

设计图

需求是如图所示的一个时钟组件:


组件设计

思路原理

其实很简单,就是通过js获取当前时间的具体值(年月日时分秒)
再使用定时器,每一秒执行一次

代码

代码分定时器获取信息两部分。

获取当前时间信息
let dateTime = new Date(); //表示当前系统时间的Date对象 
let year = dateTime.getFullYear(); //当前系统时间的完整年份值
let month = dateTime.getMonth()+1; //当前系统时间的月份值 
let date = dateTime.getDate(); //当前系统时间的月份中的日
let day = dateTime.getDay(); //当前系统时间中的星期值
let weeks = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];
let week = weeks[day]; //根据星期值,从数组中获取对应的星期字符串 
let hour = dateTime.getHours(); //当前系统时间的小时值 
let minute = dateTime.getMinutes(); //当前系统时间的分钟值
let seconds = dateTime.getSeconds(); //当前系统时间的秒钟值
//如果月、日、小时、分、秒的值小于10,在前面补0
if(month<10){
    month = "0"+month;
}
if(date<10){
    date = "0"+date;
}
if(hour<10){
    hour = "0"+hour;
}
if(minute<10){
    minute = "0"+minute;
}
if(seconds<10){
    seconds = "0"+seconds;
}

通过以上代码就可以获取具体的当前时间信息

定时器

我把获取信息的方法命名为initClock,在VUE的mounted部分执行定时器,每秒执行一次。

setInterval(this.initClock, 1000);//开始时钟功能

注意事项

注意注意

此处有坑啊,大家注意!

有的人会发现写完之后自己的定时器只执行了一次,就再也没有然后了...(我就是其中之一)

请看一下你的代码一定是这样写的:

setInterval(this.initClock(), 1000);//开始时钟功能

initClock()这是一个函数调用,函数调用就会有返回值,而initClock()没有返回值,所以这里的initClock()是一个undefined,自然你想要的循环执行initClock()这个函数就不会发生。

更改为:

setInterval(this.initClock, 1000);//开始时钟功能

这样就可以运行了。

效果图

为了时钟的动态实时效果看起来更明显,我添加了秒数和日期(星期)


效果图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,054评论 3 119
  • 幸福就是你想感恩的人感恩了 幸福就是父母身体好,还是不是当军师 幸福就是哥哥还挺好 幸福就是想吃什么东西立马有人会...
    New_Riland阅读 1,468评论 0 0
  • 不要试图去说服自己怎么样开心起来抛弃自己的负面情绪 再怎么样掩盖 它就在你的骨子里啊 当黑夜的时候不用面对他人进...
    mercuryfxx阅读 2,312评论 0 0
  • private func transitionWithType(type:String,withSubType s...
    changeL阅读 5,600评论 0 1
  • “Merculet不是某个垂直领域的应用产品,而是瞄准全行业想要区块链化运营的全量用户,解决用户增长乏力的企业级痛...
    西瓜一个勺阅读 3,025评论 0 0

友情链接更多精彩内容