一、制作时间倒数器要求以及思路:

   1.首先创建三个输入字段,分别是小时,分钟和秒,以及“开始”按钮。输入的初始值必须为0h 5m 0s。当用户输入小时,分钟和秒并单击“开始”按钮倒数计时器应开始工作时,“开始”按钮必须处于隐藏状态,并且您应显示“暂停”,“停止”和“重置”按钮。

  2.当单击“暂停”按钮时,计时器必须暂停,并且“暂停”按钮的文本必须通过“恢复”进行更改。
当用户单击“继续”按钮时,倒数计时器继续工作,“继续”文本再次变为“暂停”。当单击停止时,计时器必须停止,并且仅显示单个按钮启动。输入的值必须再次更改为0h 5m 0s。
当单击重置时,计时器应从用户输入的值重新开始倒计时过程。
例如:如果用户输入的值是1小时22分33秒,然后单击“开始”按钮,并且10秒钟后(当计时器显示1小时22分23秒),则单击“重置”,则计时器应从1小时22分33秒开始重新工作。

      3. 对输入和按钮使用引导样式

效果如下:

二、代码实现
   1.创建index.html文件,在bootstrap.com网站上复制CSS和JS代码粘贴到index.html

1 /*css代码*/
2 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
3
4 /*JS代码*/
5 <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>

index.html文件代码如下:

 1  <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>时间倒数器</title>
7 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
8 <link rel="stylesheet" href="app.css">
9 </head>
10 <body>
11
12 <div id="main">
13 <div class="d-flex mb-3 inputs">
14 <div class="form-group">
15 <input id="hours" class="form-control form-control-lg" type="number" min=0 value="0" name="hours" />h
16 </div>
17 <div class="form-group">
18 <input id="minutes" class="form-control form-control-lg" type="number" min=0 value="5" name="minutes">m
19 </div>
20 <div class="form-group">
21 <input id="seconds" class="form-control form-control-lg" type="number" min=0 value="0" name="seconds">s
22 </div>
23 </div>
24 <div class="d-flex buttons justify-content-center">
25 <button class="btn btn-outline-primary btn-start-resume">Start</button> <!--开始按钮-->
26 <button class="btn btn-outline-primary btn-pause">Pause</button><!--暂停按钮-->
27 <button class="btn btn-outline-primary btn-stop">Stop</button><!--停止按钮-->
28 <button class="btn btn-outline-primary btn-reset">Reset</button><!--重启按钮-->
29 </div>
30 </div>
31
32 <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>
33 <script src="app.js"></script>
34 </body>
35 </html>

2.创建app.js文件,代码如下

 1 const hoursEl = document.querySelector('#hours');
2 const minutesEl = document.querySelector('#minutes');
3 const secondsEl = document.querySelector('#seconds');
4 const btnStart = document.querySelector('.btn-start-resume');
5 const btnPause = document.querySelector('.btn-pause');
6 const btnStop = document.querySelector('.btn-stop');
7 const btnReset = document.querySelector('.btn-reset');
8 let interval;
9 let pause = false;
10 let totalSeconds = 0;
11 let totalSecondsBackup = 0;
12
13 init();
14
15 function init() {
16 btnPause.style.display = 'none';
17 btnStop.style.display = 'none';
18 btnReset.style.display = 'none';
19
20
21 btnStart.addEventListener('click', () => {
22 const hours = parseInt(hoursEl.value);
23 const minutes = parseInt(minutesEl.value);
24 const seconds = parseInt(secondsEl.value);
25
26 totalSecondsBackup = totalSeconds = hours * 60 * 60 + minutes * 60 + seconds;
27 if (totalSeconds < 0) {
28 return;
29 }
30
31 startTimer();
32
33 btnPause.style.display = 'inline-block';
34 btnStop.style.display = 'inline-block';
35 btnReset.style.display = 'inline-block';
36 btnStart.style.display = 'none';
37 });
38
39 btnPause.addEventListener('click', () => {
40 pause = !pause;
41 if (pause) {
42 btnPause.innerText = 'Resume';
43 } else {
44 btnPause.innerText = 'Pause';
45 }
46 })
47
48 btnStop.addEventListener('click', () => {
49 stopTimer();
50 totalSeconds = totalSecondsBackup;
51 pause = false;
52 updateInputs();
53
54 btnPause.style.display = 'none';
55 btnStop.style.display = 'none';
56 btnReset.style.display = 'none';
57 btnStart.style.display = '';
58 })
59
60 btnReset.addEventListener('click', () => {
61 totalSeconds = totalSecondsBackup;
62 updateInputs();
63 })
64 }
65
66 function startTimer() {
67 interval = setInterval(() => {
68
69 if (pause) return;
70 totalSeconds--;
71 updateInputs();
72
73 if (totalSeconds <= 0) {
74 stopTimer();
75 }
76 }, 1000)
77 }
78
79 function stopTimer() {
80 interval = clearInterval(interval);
81 }
82
83 function updateInputs() {
84 const hours = Math.floor(totalSeconds / 60 / 60);
85 const minutes = Math.floor(totalSeconds / 60);
86 const seconds = totalSeconds % 60;
87
88 hoursEl.value = hours;
89 minutesEl.value = minutes;
90 secondsEl.value = seconds;
91 }

3.创建app.css文件,文件代码如下

 1 body {
2 padding: 50px;
3 }
4
5 .inputs {
6 justify-content: center;
7 }
8 .inputs .form-control {
9 margin: 0 10px;
10 }
11
12 .inputs .form-group {
13 display: inline-flex;
14 margin: 0 15px;
15 align-items: flex-end;
16 }
17
18 .buttons .btn{
19 margin: 0 15px;
20 }

使用Vanilla框架制作时间倒数器 ——JavaScript的更多相关文章

  1. 表单(下)-EasyUI Spinner 微调器、EasyUI Numberspinner 数值微调器、EasyUI Timespinner 时间微调器、EasyUI Slider 滑块

    EasyUI Spinner 微调器 扩展自 $.fn.validatebox.defaults.通过 $.fn.spinner.defaults 重写默认的 defaults. 微调器(spinne ...

  2. 使用AVPlayer制作一个播放器

    代码地址如下:http://www.demodashi.com/demo/11685.html AVPlayer 是一个强大的视频播放器,可以播放多种格式的视频,缺点是没有控制界面,需要自己去实现. ...

  3. [Swift通天遁地]一、超级工具-(18)创建强大、灵活的日期时间拾取器

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  4. UIDatePicker 日期/时间选取器(滚轮)—IOS开发

    UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,专门用于接受日期.时间和持续时长的输入.日期选取器的各列会按照指定的风格进行自动配置,这样 ...

  5. IOS开发—UIDatePicker 日期/时间选取器(滚轮)

    UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,专门用于接受日期.时间和持续时长的输入.日期选取器的各列会按照指定的风格进行自动配置,这样 ...

  6. 使用css3伪元素制作时间轴并且实现鼠标选中高亮效果

    利用css3来制作时间轴的知识要点:伪元素,以及如何在伪元素上添加锚伪类 1)::before 在元素之前添加内容. 2)::after 在元素之后添加内容. 提示:亦可写成 :before :aft ...

  7. 八、mysql视图、存储过程、函数以及时间调度器

    .create or replace view emp_view as select * from t4 ;给t4表创建一个名为emp_view的视图 .drop view emp_view 删除视图 ...

  8. 利用Bootstrap框架制作查询页面的界面

    UI设计实战篇——利用Bootstrap框架制作查询页面的界面   Bootstrap框架是一个前端UI设计的框架,它提供了统一的UI界面,简化了设计界面UI的过程(缺点是定制了界面,调整的余地不是太 ...

  9. java自定义注解知识实例及SSH框架下,拦截器中无法获得java注解属性值的问题

    一.java自定义注解相关知识 注解这东西是java语言本身就带有的功能特点,于struts,hibernate,spring这三个框架无关.使用得当特别方便.基于注解的xml文件配置方式也受到人们的 ...

随机推荐

  1. NGK.IO会是一个投资优质项目吗?

    互联网发展至今,技术已经高度成熟,人们发现了互联网的好处后,互联网逐渐渗入到家家户户.随着时代的变迁,人们对HTTP长期作为主流霸占互联网食物链的顶端感到不满足.当人类开始变得挑剔,HTTP的劣势就逐 ...

  2. NGK.IO的智能合约是炒作还是未来商业的主流?

    随着NGK主网的上线,NGK市场也备受关注.目前,NGK代币价格已经由初始价格0.0215美元涨到现在的0.86美元,代币价格上涨40倍!数字货币市场也已经将重点目光放到了NGK代币上,相信在不久的将 ...

  3. 01_MySQL从下载—>安装—>到快速上手

    一.MySQL下载 二.MySQL安装 三.MySQL几条简单命令快速上手(增删改查) 一.MySQL下载与安装 下载地址:https://dev.mysql.com/downloads/mysql/ ...

  4. A study on ILC for linear discrete systems with single delay

    论文题目就是随笔的题目,以后的随笔的命名都是如此,特此说明. 论文的主要内容是偏理论研究的,引入了离散矩阵延迟指数函数,来处理具有单时滞线性离散系统.对于离散延迟矩阵指数函数其定义为: \[e_{m} ...

  5. sun公司和apache使用ftpclient的区别

    最近因为使用FTP实现上传下载,因为已经有前辈使用了,照着敲了一遍(绝对没有复制粘贴啊,发誓).但是今天突然发现FTPClient还不一样,仔细看了看,一个是sun.net.ftp.FtpClient ...

  6. yum install valgrind.x86_64

    Reference: https://cloudlinux.zendesk.com/hc/en-us/articles/115004075294-Fix-rpmdb-Thread-died-in-Be ...

  7. Vim的基本命令

    Vi vi的两种模式 ①commad命令模式:无法输入任何东西,需要按下i进入编辑模式 ②edit编辑模式:按下esc退出到命令模式,在命令模式下按下wq [文件名] 可以退出并且成功的保存 //一些 ...

  8. 你们一般都是怎么进行SQL调优的?MySQL在执行时是如何选择索引的?

    前言 过年回来的第二周了,终于有时间继续总结知识了.这次来看一下SQL调优的知识,这类问题基本上面试的时候都会被问到,无论你的岗位是后端,运维,测试等等. 像本文标题中的两个问题,就是我在实际面试过程 ...

  9. AOP面试造火箭始末

    本文已整理致我的github地址,欢迎大家 star 支持一下 这是一个困扰我司由来已久的难题,Dubbo 了解过吧,对外提供的服务可能有多个方法,一般我们为了不给调用方埋坑,会在每个方法里把所有异常 ...

  10. 解决 DatePickerDialog 在 Android7.0 API24 上使用 AlertDialog.THEME_TRADITIONAL、AlertDialog.THEME_HOLO_DARK、AlertDialog.THEME_HOLO_LIGHT等样式时无法显示为 Spinner 样式的问题

    DatePickerDemoForAndroid24 解决 DatePickerDialog 在 Android7.0 API24 上使用AlertDialog.THEME_TRADITIONAL.A ...