文章目录

  • 简介与入门
  • 获取时间
  • 倒计时
  • 到了之后会怎样

从0开始,通过electron写一个倒计时工具,其最终效果为


源码地址:从零开始,用electron做一个倒计时工具

简介与入门

electron-fiddle自带了一个Hello world项目,按F5启动程序,就会出现如下窗口。

倒计时程序可以在此基础上进行修改,而丐版的倒计时,其实只需要把Hello World变成不断变化的时间,而将下面一小行字改成当前的时间信息。

在默认项目中,共有5个文件:

  • index.html:很显然,是一个和布局相关的文件
  • style.css:html对应的渲染文件
  • main.js:看到main,就能猜到是入口函数

剩下的两个文件,render.js是空的,说明没有也行;preload.js只有一个监听函数,window.addEventListener,而监听的内容是DOMContentLoaded,即内容加载时。

所以,在制作丐版倒计时的时候,只需更改index, main.js以及preload.js。为了缕清编程的思路,可以先修改一下html文件,

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><link href="./styles.css" rel="stylesheet"><title>倒计时</title></head><body><h1 align="center" >倒计时</h1><p align="right">当前版本为<span id="version"></span>.</p> </body>
</html>

由于version span是个空的,所以需要更改preload.js文件,将这个span替换为electron的版本,其中DOMContentLoaded表示当内容加载时触发后面的函数。

window.addEventListener('DOMContentLoaded', () => {const element = document.getElementById('version')element.innerText = process.versions['electron']
})

运行程序,可得到

接下来,就开始写我们的业务逻辑。

获取时间

倒计时的前提是先获取当前时间,众所周知在jsDate.parse就可以实现。

故而将html中的版本改为时间,然后修改preload.js

window.addEventListener('DOMContentLoaded', () => {const element = document.getElementById('version')var d = new Date()element.innerText = d.toString()
})

但这样做有一个问题,由于这个函数是在内容加载时运行的,所以显示的时间并不会发生变化。

为了让时间实时变化,可以使用定时器setInterval

window.addEventListener('DOMContentLoaded', () => {const element = document.getElementById('version')setInterval(clock,10,element)
})function clock(element){var d = new Date()element.innerText = d.toString()
}

其中setInterval输入的三项分别表示将要执行的函数,间隔时间,以及clock函数传入的参数。

效果为

这个时间的显示效果太难看了,所以将其改成更规整的方式

function clock(element){var d = new Date()var t = `${d.getFullYear()}-${d.getMonth()}-${d.getDay()}` + ` ${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}.`+d.getMilliseconds().toString().padStart(3,"0")element.innerText = t
}

其中,${}可将括号中的数值转为字符串,其效果为

倒计时

接下来,就可以进行倒计时了,既然是倒计时,就必须有一个截止日期。在这里,把截止日期选为5月1日下午5点1分,也只有劳动节的这个时间点,可以悠然地看倒计时了。

其初始化方法如下

function initEndTime(year){var endTime = new Date(year,5,1,17,1,0,0)var d = new Date() //此为当前时间while(endTime<d){year += 1endTime.setFullYear(year)}return endTime
}

其中,日期类型对运算符进行了重载,故可直接比较大小,当然也可以直接相减,相减结果的单位是毫秒。

从而将preload.js中其他代码改为

window.addEventListener('DOMContentLoaded', () => {const endTime = initEndTime(2000)count_down.innerText = endTime.toString()setInterval(clock,10, document, endTime)
})function clock(doc, endTime){const now_time = doc.getElementById('now_time')const count_down = doc.getElementById("count_down")var d = new Date()var t = `${d.getFullYear()}-${d.getMonth()}-${d.getDay()}` + ` ${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}.`+d.getMilliseconds().toString().padStart(3,"0")now_time.innerText = tif(d < endTime){var delta = endTime - dcount_down.innerText = `${delta/1000}`}
}

同时,稍微修改一下htmlbody的内容

<h1 align="center" id="count_down"></h1>
<p align="right">当前时间为<span id="now_time"></span>
</p>

效果为

到了之后会怎样

既然是倒计时,那么当到达预定时间之后,总要给出一点变化,这里的变化就是显示一个大大的五一。

其方法也十分简单,即

//function clock(doc, endTime){//前面的代码不用改var delta = (endTime - d)/1e3if(delta > 0){count_down.innerText = `${delta.toFixed(3)}`}else if(delta < -5){endTime.setFullYear(endTime.getFullYear()+1)count_down.style.color = "black"count_down.style.fontSize = "25px"}else{count_down.innerText = `五·一`count_down.style.color = "red"var fSize = (-delta*20).toFixed(0)count_down.style.fontSize = `${fSize}px`}
//}

此外,由于不需要菜单栏,所以也一并去掉了,在main.js创建窗口后加入下面这个

  Menu.setApplicationMenu(null)

electron从零开始做个倒计时相关推荐

  1. 转:从零开始做app需要做的事情列表

    https://qdan.me/list/VaXl7N8emfv1ayWg 从零开始做App的Bootstrap 做一个App,需要很多东西. 不定期更新. 团队 工欲善其事,必先利其器. 需求管理 ...

  2. 【干货】从零开始做运营(超详细脑图)

    送给真正的互联网人一顿干货早餐 [小咖导读]小白想成为运营小达人不知道怎么下手?可以来看看知乎大神张亮的这本书的脑图.脑图虽好,但通读书全书更能理解作者的精华思想哦. 第一次发现<从零开始做运营 ...

  3. 从零开始做Vue前端架构(5)

    前言 弄完了前后端分离,我们自然想打包发布项目了. 不多说,就让我们来看看吧. 开发 直接上代码: const webpack = require('webpack') const path = re ...

  4. opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统

    教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...

  5. 【多传感器融合定位】【从零开始做自动驾驶定位_任佬】【所学到的东西汇总】

    [多传感器融合定位][从零开始做自动驾驶定位_任佬][所学到的东西汇总] 0 前言 1 开篇 1.1 代码工程的运行 2 数据集 3 软件框架 3.1 运行 3.2 学到的 3.2.1 对消息的订阅和 ...

  6. 从零开始做量化(3)

    # 系列文章目录 从零开始做量化(0)-- 引言 从零开始做量化(1)-- 交易框架 从零开始做量化(2)-- 开发环境搭建 从零开始做量化(3) -- 框架实现 持续更新中... 本文目录 前言 1 ...

  7. 每月一书(202202): 《从零开始做自媒体》

    现在是每月一书的时间,本月阅读的书是<从零开始做自媒体>这是一套图书,包含七本书.下面是详细的内容. 第一本<非虚构写作指南> 从书名上看是讲非虚构写作,我感觉书名与我的写作内 ...

  8. 从零开始做远控 第五篇 屏幕监控

    如果你从没看过这系列教程请点击:从零开始做远控 简介篇 屏幕监控: 我们来到进阶课程了,我们这一节主要是讲客户端的,我们将会编写从客户端截取屏幕,然后用JEPG压缩它,最后发给服务端,形成一个动态画面 ...

  9. html倒计时10s,vue做30s倒计时,在最后10s倒数的时候有个放大的效果

    题目描述 vue做30s倒计时,在最后10s的时候有个放大的效果 题目来源及自己的思路 相关代码 // 请把代码文本粘贴到下方(请勿用图片代替代码) {{second}} export default ...

最新文章

  1. SBB:石油污染土壤微生物群落构建与生物多样性研究(一作解读)
  2. 细思恐极,插上U盘就开始执行Python代码的程序
  3. Textview属性Kotlin.Android
  4. GIS和RS数据查找下载网址整合
  5. session的活化和钝化
  6. PR值是什么?pr值的意义
  7. ROS Noetic KDL与TracIk安装
  8. Identifying a Blocking Query After the Issuing Session Becomes Idle
  9. 安卓上通过pydorid 3来使用jupyter notebook(鸿蒙/华为/安卓手机/平板进行python编程学习)
  10. APS生产排单软件模拟排程功能
  11. 【Pandas 基础知识 数据修改总结】
  12. 易语言如何调用c dll文件,易语言调用C++写的DLL
  13. 协方差矩阵和矩阵相关系数的理解
  14. Newtonsoft.Json 使用
  15. 我身边的一些数据库事故 (r5笔记第52天)
  16. 文旅景区夜游该如何设计项目
  17. java8函数式编程笔记-科里化
  18. 【Web技术】959- JavaScript 如何在线解压 ZIP 文件?
  19. [分形几何] 1.3 Koch曲线python可视化
  20. 批量删除微信好友终于来了丨憋了2个半月,微信一口气上了19个新功能

热门文章

  1. JDK源码阅读环境搭建
  2. 男生适合学计算机还是西餐,男孩初中毕业学啥好 学什么专业最有前景
  3. HIS与护理系统集成经验之我谈
  4. Mifare系列7-安全性(转)
  5. 如何在Cisco Packet Tracer中创建2个路由器虚拟局域网
  6. 商业化广告--体系学习-- 2 -- 行业蓝图篇 -- 广告产品与商业模式
  7. 【转】全志A10/A20 Bootloader加载过程分析
  8. 致努力向前奔跑的自己:一个人越过越好的6个迹象
  9. tftp 源代码解析
  10. 重磅!巴菲特2021年致股东公开信(中译版,下篇)