精华内容
下载资源
问答
  • 一分钟计时器设计图
    千次阅读
    2021-03-13 20:11:46

    这并不困难.但是,我会提醒你,我已经看到了一些关于堆栈溢出的非常混乱的答案,在某些情况下编码习惯非常糟糕,所以要非常小心.首先让我回答这个问题.

    如果看起来是程序员在实现计时器时犯的最大错误,那就是认为他们需要一些东西来跟踪当前时间.也就是说,他们编写某种循环,每秒递增一个变量或者一些如此愚蠢的东西.您无需编写代码来跟踪时间. System.currentTimeMillis()函数将为您执行此操作,并且它可以非常准确地完成.

    定时器代码将涉及许多程序员混淆的两个方面:

    >计算时间

    >刷新显示屏

    计算显示时间所需要做的就是记录计时器启动的时间:

    long startTime = System.currentTimeMillis();

    稍后,当您想要显示时间量时,您只需从当前时间中减去它.

    long elapsedTime = System.currentTimeMillis() - startTime;

    long elapsedSeconds = elapsedTime / 1000;

    long secondsDisplay = elapsedSeconds % 60;

    long elapsedMinutes = elapsedSeconds / 60;

    //put here code to format and display the values

    程序员犯的最大错误就是认为他们需要一个变量来保持当前时间,然后编写代码来每秒增加该变量,例如他们维护的称为“elapsedSeconds”的东西.问题是您可以安排每秒调用代码,但不能保证何时调用该代码.如果系统繁忙,那么该代码可能会比第二个稍晚调用.如果系统非常繁忙(例如从故障磁盘中获取页面),实际上可能会延迟几秒钟.使用Thread.sleep(1000)函数每秒循环的代码将发现错误随着时间的推移而累积.如果睡眠一次返回300毫秒,则该错误会在计算时间时复杂化.这完全没必要,因为操作系统具有告诉您当前时间的功能.

    无论您是每秒运行此代码,每秒运行100次,还是每3.572秒执行一次,上述计算将是准确的.关键是currentTimeMillis()是时间的准确表示,无论何时调用此代码 – 这是一个重要的考虑因素,因为线程和计时器事件不能保证在特定时间是准确的.

    计时器的第二个方面是刷新显示器.这取决于您使用的技术.在GUI环境中,您需要安排绘制事件.您希望这些绘制事件在显示器预期更改之后立即生效.但是,它很棘手.您可以申请油漆事件,但可能有数百个其他油漆事件排队等待您的事件处理.

    一种懒惰的方法是每秒安排10个绘制事件.因为时间的计算不依赖于在特定时间点调用的代码,并且因为如果您在同一时间重新绘制屏幕并不重要,这种方法或多或少地保证了显示的时间将是在大约1/10秒内显示正确的时间.这看起来有点浪费,因为10次中有9次你正在绘制屏幕上已有的内容.

    如果你正在编写一个带有某种类型动画的程序(比如一个游戏),它每秒刷新一次屏幕30次,那么你就什么都不做了.只需将计时器显示调用合并到常规屏幕刷新中即可.

    如果绘制事件很昂贵,或者您正在编写执行终端式输出的程序,则可以通过计算显示将更改之前剩余的时间量来优化事件的计划:

    long elapsedTime = System.currentTimeMillis() - startTime;

    long timeTillNextDisplayChange = 1000 - (elapsedTime % 1000);

    变量timeTillNextDisplayChange保存您需要等待的秒数,直到计时器的秒部分发生变化.然后,您可以在此时调度paint事件,可能调用Thread.sleep(timeTillNextDisplayChange),并在sleep之后执行输出.如果您的代码在浏览器中运行,则可以使用此技术在适当的时间更新页面DOM.

    请注意,此计算显示刷新中没有任何内容会影响计时器本身的准确性.线程可能会晚10毫秒,甚至晚500毫秒从睡眠状态返回,并且计时器的准确性不会受到影响.在每次传递时,我们计算从currentTimeMillis等待的时间,因此一次调用迟到不会导致以后的显示延迟.

    这是准确计时器的关键.不要指望操作系统调用您的例程或在您要求时准确发送绘图事件.通常,当然,对于现代机器,操作系统具有显着的响应性和准确性.这种情况发生在你没有运行太多其他东西的测试环境中,并且计时器似乎有效.但是,在生产中,在极少的压力情况下,你不希望你的计时器“漂移”,因为系统很忙.

    更多相关内容
  • 倒数计时器就是这样种元素,当用户登陆页面时,它会给用户产生种紧迫感。在我们的日常生活中,会看到各种各样的倒计时设计效果,比如:视频的开头;APP启动页面的右上角;某些电子商务和活动网站的价格区域,...

    视觉效果和动画效果已经成为产品设计中不可或缺的一部分,开发人员使用动画效果可以创建引人入胜的内容,营销人员可以使用这些效果来获得更好的产品覆盖率和良好的转化率。倒数计时器就是这样一种元素,当用户登陆页面时,它会给用户产生一种紧迫感。

    在我们的日常生活中,会看到各种各样的倒计时设计效果,比如:视频的开头;APP启动页面的右上角;某些电子商务和活动网站的价格区域,等等。

    毫无疑问,倒计时是非常有用的。在电子商务网站中,倒数计时器广泛使用在特惠价附近,以使用户感到机不可失。大多情况下,无论用户是否有购买产品的意愿,这种营销技巧对用户都是非常有效的。富有创造力的倒数计时器页面设计可以获得很多潜在客户并提高产品的转化率。那么,如何用简单的方法做出酷炫的倒计时效果呢?在下面列表中,小编给大家收集了十款最佳免费倒数计时器动效,我们一起来学习一下。

    1

    Watch Timer

    af071c7cfdb8482cd77bf365a1c59520.gif

    智能穿戴设备在当今的受众中正在迅猛增长, 进行健身运动时,智能手表上最常用的功能之一就是计时器。在这个倒数计时器设计中,设计师使用了不同的颜色。我们只需拖动顶部的时间滑块即可设置“倒计时”时间。点击“开始”图标后,倒计时开始,环形进度条的进度也随之减小,整体效果非常炫酷。

    2

    Daily UI

    ff459cbe6a45c70ebeb8258bca2b1060.gif

    Daily UI倒数计时器设计非常富有创意,该计时器可以很好的用在产品发布会等大屏场合。视觉效果非常流畅,即使在小型屏幕设备上也不会出现滞后现象。使用白色的数字字体,和背景很好地融合在一起。

    3

    Storm

    687b4959d7faa67b5bc1395d00bba06a.png

    这个倒数计时器效果非常适合于电子商务网站和时尚网站。设计师使用了干净的图像背景,整体文本在背景上看起来也非常简洁、清晰。倒数计时器使用白色框突出显示,与黑色的计时器刻度盘对比明显,很容易引起用户的注意。

    4

    Pomodoro Clock

    ae19e0d1d06eff5af9d2ccf3d1afbced.gif

    整体设计看起来很时髦、现代且诱人。这个倒数计时器不仅可以设置时间,还可以播放一些音乐。默认情况下,此时钟支持五种音轨,用户可以根据自己的喜好更改音轨。背景使用了流行的渐变色,非常具有视觉冲击力。

    5

    数字倒数计时器

    7484247a127219ef7482d853f64820f9.gif

    这是一个非常常规的数字倒数计时器设计。整体设计非常简洁,大方。使用的字体很大,富有现代感,可以让用户清楚地看到时间。另外,旋转动画是非常平滑干净的。尤其是在分钟部分,过渡很顺利。

    6

    倒数计时器

    861aca83c307789ce92c9654508160c9.gif

    在这个倒数计时器中使用了卡片翻转风格的效果,模拟日历卡片的翻页效果,趣味性很强。整体效果看起来非常平滑,整洁,尤其是分钟和秒钟内所有卡片同时翻转时,你都可以体验到效果的平滑度。此外,字体还精心的选择了以配合复古的外观和现代设计。

    7

    倒数计时器设计

    f29c6b56eef8799e050f6cfc9daba312.png

    这个倒数计时器中的图像背景上的白色圆形刻度盘提供了非常清晰的视图。页面使用了分屏设计的布局形式,将页面的内容保留在另侧,而计时器保留在左侧。使用这种设计方式可以很好的向用户告知某些信息。例如:如果网站因这种设计而需要维护,则可以清楚地指出需要花费多长时间。此外,用于文本和计时器的字体非常干净且易于阅读。

    8

    Online store

    a0d009eab2738fd6facc01f2e1df5f59.gif

    随着假期的临近,很多在线商店都在做产品促销活动。上面的倒数计时器效果非常适用于商城网站。此设计中的计时器具有天、小时、分钟和秒的格式,可以帮助站主提醒用户,给用户心理带来紧迫感。当然,也可以在电子邮件中使用此计时器,向客户发送交互式电子邮件。

    9

    倒数计时器设计

    385694469d02f9fd38719b236e941bd1.gif

    倒数计时器使用斜体字体,背景使用轮播图片的形式进行切换,看起来很吸引人。文本和倒数计时器虽使用了不同的字体,但它们彼此之间达到了完美的平衡,并为整体设计带来优雅的外观。

    10

    顶部倒数计时器设计效果

    cd6e0f483faaf1bf90713b1cc26c7c84.gif

    将倒数计时器置于页面的顶部位置,而顶部一般都是显示重要通知的最佳位置。用户进入页面后,计时器非常显眼,不会分心,同时,确保用户至少会看到一次。时钟的每个部分都由细线隔开,动画效果简洁明了。

    dca44657dd7defab719e8874d4a282b6.gif 倒数计时器原型设计

    在进行精美的UI界面设计之前,对界面进行原型设计是必不可缺的一步。还是老规矩,今天小编带着大家使用原型工具Mockplus对倒数计时器效果进行简单的原型设计。

    首先,我们一起来看看效果:

    dc3271bc53f76c8f24e2a76be8593d5d.gif

    设计步骤解析:

    1)拖出圆形组件,对其设置文本、背景色及去掉边框。

    2)复制4个同样的组件,并输入对应数字(最后一个设为空白)。

    3)5个组件分别对自己设置交互,选择触发方式为“载入时”,效果为显示/隐藏。

    4)分别设置好相应延迟时间,最大的一个数字,延迟时间应最短。

    5)将五个组件按数字大小依次叠加在一起,最小的数字组件放在最下面。

    e4c5942120b81a969b1f9509ecd10fa1.png

    总 结

    倒数计时器的使用场景非常多,如果我们使用得当,会给我们带来非常有效的效果。当然,这些前提是我们有一个优秀的倒数计时器设计,对倒数计时器感兴趣的设计师,可以结合上面的实例和想法去设计一个属于自己的倒数计时器。

     c89bbfca749ea7ab4fc8349a7f27e759.gif

    恭喜以下小伙伴每人获得《UI那些事儿》一本!

    Vicky.

    还好

    伍三芹

    请获奖小伙伴在10月25日(本周五)12:00前,将收货地址及收货人信息发送至本公众号后台~

    630b7094d953168eb14d87c1773fea83.png 摹  客

    让设计和协作,更快更简单

    https://www.mockplus.cn/

    20772e1a0f5f68bc2be5c71a3d845860.png

    展开全文
  • 1)设计任务:完成倒计时时钟的设计。 2)指标要求 (1)能够分钟级的倒计时分钟和秒显示。 (2)倒计时的起始值可以设置。 (3)具有暂停和清零按钮,倒计时结束报警。 (4)供电电压3.3V/5V。
  • 本可调倒计时提醒具有:电路简洁、显示醒目、定时准确、制作容易、可调倒计0~99 分钟,抗干扰能力强,使用方便的优点。它既有制作的趣味性,又有使用的实用性。  、硬件电路  如1所示,电源变压器T1将AC220...
  • 自己制作计时器、倒计时器

    千次阅读 多人点赞 2020-11-30 10:12:00
    时间的观念在现在的时代越来越重要,考试要定时完成,炒菜做饭要计时完成,甚至连煮包泡面都要计时才能更加美味。...本程序的编写环境是VC++6.0,目前此程序实现了计时器和倒计时器的功能。每次只能执行个功能。

    计时器和倒计时器的设计与实现

    摘 要
    时间的观念在现在的时代越来越重要,考试要定时完成,炒菜做饭要计时完成,甚至连煮包泡面都要计时才能更加美味。制作计时器对我们越来越重要。

    本计时器中的倒计时使用的for函数输出把时间用00:00:00这种格式输出,使用Sleep来让整个程序暂停一秒,来完成计时一秒的功能,然后用/r覆盖掉上一行输出一秒后的剩余倒计时,在倒计时变为00:00:00时,输出时间到并用/a响铃。计时器采用类似的计时方法,不一样的是这次使用system(“cls”)清屏,然后重新输出下一次时间,用函数kbhit确定是否有键盘敲击,如果有将其录入,当这个值和所确定的停止值相同时,将退出for函数,停止计时,并输出时间。

    本程序的编写环境是VC++6.0,目前此程序实现了计时器和倒计时器的功能。每次只能执行一个功能。
    关键词: vc6.0,C语言,函数,计时器,倒计时器。

    1 引言

    1.1关于工程实践

    在我看来,整个工程实践中是让我们了解程序设计的整个流程,以及怎么实现这项功能,如何利用所学的c语言知识,来完成一个属于自己的小程序,小软件,在其中遇到的问题将其总结,最后将成为很好的学习笔记。

    1.2 课题背景

    经过一个学期的C语言课程学习,我们已经掌握了基本的C语言编程,而如何使用这些编程知识,让其变得有用十分重要。于是我们想到了开发一个计时倒计时的小程序。

    在人们生活中,时间是很重要的一种东西。无论什么都离不开时间。倒计时和计时更是如此。通过倒计时计算考试时间,计算煮饭煮菜的时间,通过计时计算跑步时间,计算做题讲课的时间。时间观念对我们来说越来越重要,制作计时器对我们也越来越重要,所以让我们来看看如何制作一个计时装置,即一个计时器和一个倒计时器。

    2 需求分析

    2.1程序目标

    完成一个简单的计时器和倒计时器,要求实现最基本的计时和倒计时程序,当用户打开程序后通过提示输入数字1 2 3进行三种操作。

    (1)输入数字1进行倒计时操作,通过输入00:00:00这种格式的时间倒计时,在时间到的时候提示“时间到!”,同时响铃。
    (2)输入数字2进行计时器操作,通过提示进入计时程序,并通过按Esc键停止计时,并输出计时时间。

    2.2 开发环境及工具

    2.2.1 运行环境

    Windows10
    也可以在一台内存大于800k内存的位系统电脑运行。

    2.2.2 编程软件介绍

    Microsoft Visual C++60.:调用系统文件#include <stdio.h>实现输入输出、#include <stdlib.h>使用退出exit函数、#include <time.h>读取系统时间通过结构体time_t实现、#include <Windows.h>

    3 系统总体结构设计

    3.1 基本简介

    本程序分为四个模块,除了程序的main函数以外,分别分为面板,计时和倒计时三部分。其中面板模块就是呈现给用户的主界面,计时模块负责实现记录在给定时间之间的时间长度,以及开始计时和结束计时的输入输出,而倒计时则是专门负责在倒计时的时间录入和时间到时的提示以及响铃。
    下面是程序流程图:
    程序流程图

    3.2 系统功能模块及设计

    3.2.1 数据结构设计

    主体程序中设计除了选择以外,输出“输入错误”的程序后可以重新输入选择。

    在这里插入图片描述

    3.2.2 面板模式介绍

    进入程序后,输出:

    “计时器&&倒计时器
    本程序是由网络空间安全学院学生工程实践研发
    ==== 计时方式 ====
    1. 倒计时器
    2. 计时器
    请输入你选择的代号:”

    几行字样。

    通过用户输入1 或 2来控制进入计时器还是倒计时器,如果用户不小心输入错误将提示“不好意思选错咯~”并在此进行选择,面板模块只是起到将其他模块链接起来的作用,在后期需要追加更多功能时也可以由面板模块连接。

    3.2.3 倒计时器模块介绍

    倒计时器将承担输入时间并进行倒计时的功能,用户将在此模块界面直接输入格式为“00:01:09”的时间进行倒计时,输入正确时间正确,将输出“倒计时开始!”,当时间变成“00:00:00”时,输出“时间到!”并响铃,之后按任意键退出程序。

    3.2.4 计时器模块介绍

    计时器将承担计算从用户输入开始标记到用户输入结束标记之间的时间的功能,用“计时时长为:00:00:05”的格式输出所计的时间。

    4 系统详细设计与实现

    4.1界面模块设计与实现

    作为最简单的计时和倒计时程序,使用vc6.0的默认程序窗口。

    4.2 模块设计与实现

    4.2.1主体模块设计与实现

    在主体之前定义其他模块的函数。通过while函数实现如果输入错误那么便接受用户的重新输入选择,通过switch函数选择进入计时器功能的函数还是倒计时器功能的函数。作为main函数,在之后追加函数或修改时更加容易。

    4.2.2 面板模块设计与实现

    进入程序后,由面板模块的函数通过printf函数输出边界图形字符以及欢迎界面,并介绍该程序选择方法(输入数字1 or 2)具体如下图。提示用户进行输入,之后通过while函数和switch函数进行选择。(while函数用于当输入错误时可以重新输入)
    在这里插入图片描述

    4.2.3 倒计时器模块的设计与实现

    倒计时器的代码在面部模式的函数中,通过printf输出提示输入倒计时时间(格式:00:01:08),当输入正确后,输出“倒计时开始”并输出“00:01:08”格式一秒一秒减少的时间,当时间变为“00:00:00”时,响铃并输出“时间到!”三字。

    在这里插入图片描述在这里插入图片描述

    4.2.4 计时器模块设计与实现

    模块分为两部分,一部分在主体函数里通过输入选择计时模式开始计时,然后进入计时器函数,用Sleep和system(”cls”)和while循环通过(00:00:00)格式下秒数分钟数,进行计时,通过函数kbhit、if、getch停止计时跳出循环,完成计时。

    在这里插入图片描述在这里插入图片描述

    5 系统测试与分析

    5.1 测试

    根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本或网络的参考下能够修改。主要是平时看书不仔细、不太注意而产生的。如没有注意具体数据使用。

    5.2 调试过程中遇到的主要问题

    if,while,switch三个循环中容易缺少括号,进行修改后括号更加容易出错。这直接导致在vc中编译时出现很多错误。
    time_t结构体出现在#include <time.h>头文件里。
    <conio.h>头文件用来 kbhit getch
    <Windows.h>头文件用来 sleep

    结论

    经过了四个星期的c语言程序设计终于在老师的细心指导和同学的热情帮助下基本完成了计时器和倒计时器的设计修改任务。
    程序设计期间,学习到很多课堂上没有的知识,还积累了很多实践经验,增强了动手能力和解决实际问题的能力。我通过网上查找到很多成功的关于计时器倒计时器的程序,通过对那些已经成功的程序进行分析找到自己的设计思路,制定设计流程。通过对网现存的计时器倒计时器的比对,我发现我自己做的程序显得十分简陋,但是这个程序也是我通过完整的设计流程设计出的程序。
    限于作者知识水平和经验有限,此程序还有许多有待完善和改正的地方,恳请各位老师和读者批评指正。

    参考文献

    [1] 黄明等.21世纪进阶辅导 C语言程序设计.大连理工大学出版社,2005
    [2] 马靖善等.C语言程序设计.清华大学出版社,2005

    附录:

    程序下载:

    程序下载地址(exe)

    代码

    #include <stdio.h>
    
    #include <stdlib.h>
    
    #include <time.h>
    
    #include<conio.h>//kbhit getch
    
    #include <Windows.h>//用于sleep
    
    int daojishi();
    
    int jishiqi();
    
    int main ()
    {  
        int c;
    
    	printf("╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠     计时器&&倒计时器     ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝\n");
    
    	
    	printf("本程序是由网络空间安全学院学生工程实践研发\n");
    
        
    	printf("====计时方式====\n");  
        
    	printf("1. 倒计时器\n");  
        
    	printf("2. 计时器\n");  
    
        
    	printf("请输入你选择的代号:");  
        
    	scanf("%d", &c);  
    
    
        while(c!=1&&c!=2){
    	
    	printf("不好意思选错咯~\n");
    	
    	printf("====计时方式====\n");  
        
    	printf("1. 倒计时器\n");  
    
        printf("2. 计时器\n"); 
    	
        printf("请输入你选择的代号:");
    
    	scanf("%d", &c);
    	}
    
    
    	switch(c)  
        {  
        case 1: 
    		 daojishi();
    
            break;
    		
        case 2: 
    			jishiqi();
    
            break; 
    	
    	}
        
    	return 0;  
    
    }
    
    
    
    
    int daojishi()
     {
    	int i,j,k;
    
    	int hour=0,min=0,sec=0;
    
    
    	printf("请输入倒计时时间(例如:01:26:30):");
    
    
    	scanf("%d:%d:%d", &hour, &min, &sec);
    
    
    	if(hour>24 || hour<0 || min>60 || min<0 || sec>60 || sec<0)
    	{
    
    		printf("输入有误!\n");
    
    		return 0;
    
    	}	
    
    	printf("倒计时开始!\n");
    
    
    
    	for(i=hour; i>=0; i--)
    	 {
    
    		for(j=min; j>=0; j--)
    		{
    	
    			for(k=sec; k>=0; k--)
    			{
    
    				printf("\r%02d:%02d:%02d", i, j, k);
    
    				Sleep(1000);
    
    			}
    
    			sec = 59;
    
    		}	
    
    			min = 59;
    
    	}
    
    	printf("\a\n时间到!\n");//倒计时结束后响铃
    
    	exit(0);
    
    }
    
    
    
    int jishiqi()
    {
    	
    	int hour = 0, min = 0, sec = 0,n;    
    	
    	while (n!=32)
    		{
    
    			if(kbhit()){//键盘敲击 检查当前是否有键盘输入,如果有则赋值给n
    			
    			n=getch();
    			
    			while(n==32){
    			
    				exit(0);	
    			}
    		
    		}
    		
    
    		Sleep(1000);//暂停1s        
    	    
    		system("cls");//清屏
            
    		
    		printf("╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠     计时器&&倒计时器     ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝\n");
    	
    		
    		printf("本程序是由网络空间安全学院学生工程实践研发\n");
    		
    		
    		printf("====计时方式====\n");  
    	    
    		printf("1. 倒计时器");
    
    		printf("\n");
    	    
    		printf("2. 计时器");  
    
    		printf("\n");
    		
    		printf("请输入你选择的代号:2");
    
    		printf("\n");
    		
    		printf("按空格停止计时");
    
    		printf("\n");
    
    
    	    sec++;      
    
    
    	    if (sec == 60)
    		{            
    		
    			min++;            
    		   
    			sec = 0;       
    		}        
    	    if (min == 60)
    		{            
    	
    			hour++;            
    		   
    			min = 0;        
    		}        
    	    if (hour == 24)
    		{            
    		   
    			hour = 0;        
    		}        
    	    
    		printf("%02d:%02d:%02d\n", hour, min, sec); //%02d输出长度为2,不足2前面补0    
    		
    		
    		if(kbhit()){//键盘敲击 检查当前是否有键盘输入,如果有则赋值给n
    			
    			n=getch();
    			
    			while(n==32){
    			
    				exit(0);	
    			}
    		
    		}
    
    	}
    
        return 0;
    }
    
    
    展开全文
  • 24进制/60进制计时器设计,EDA 基于VHDL硬件描述语言设计
  • 用JS写了个30分钟计时器

    千次阅读 2022-03-12 02:45:06
    效果 额外功能 左键单击计时器数字区,不显示或显示秒钟区。 左键双击计时器数字区,暂停或启动计时器。计时完毕,只能刷新页面启动计时器。 输入框可输入备注信息,输入框失去焦点或计时完毕后,时间戳附带备注...

    效果图

    在这里插入图片描述

    额外功能

    1. 左键单击计时器数字区,不显示或显示秒钟区。
    2. 左键双击计时器数字区,暂停或启动计时器。计时完毕,只能刷新页面启动计时器。
    3. 输入框可输入备注信息,输入框失去焦点或计时完毕后,时间戳附带备注信息会存入本地。
    4. 左键双击进度条区,可将导出历来使用计数器所处时间及备注信息。
    5. 两audio标签可填个人喜爱音频文件的路径作启动、结束时的音乐。

    放码过来

    <!DOCTYPE HTML>
    <html>
    	<head>
    		<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    		<title>Countdown Timer</title>
    		<style type="text/css">
    			input{
    			    padding-bottom: 0px;
    				padding-top: 0px;
    				border-top-width: 0px;
    				border-left-width: 0px;
    				border-right-width: 0px;
    				font-size: 20px;
    				width:100%;
    			}
    		</style>
    	</head>
    	
    	<body>
    		<span id="numbers" style="white-space:nowrap;"></span>
    		
    		<table id="table1" >
    			<tr>
    				<td style="background-color:rgb(41, 74, 155);padding:3px;"></td>
    				<td></td>
    			</tr>
    			<tr>
    				<td style="width:100%;" colspan=2>
    					<input id="content"/>
    				</td>
    			</tr>
    			<tr>
    				<td style="width:100%;" colspan=2>
    					<canvas id="myCanvas" height="6">
    					Your browser does not support the canvas element.
    					</canvas>
    				</td>
    			</tr>
    			
    			
    		</table>
    		
    		<audio id='music'>
    		  <source src="music/Windows XP 启动.wav" type="audio/mpeg">
    		  Your browser does not support the audio tag.
    		</audio>
    		
    		<audio id='music2'>
    		  <source src="music/Windows XP 关机.wav" type="audio/mpeg">
    		  Your browser does not support the audio tag.
    		</audio>
    		
    		<script type="text/javascript" >
    
    			var timer = {
    				initMinutes:30,
    				restSeconds:0,
    				minute:0,
    				second:0,
    				handle:0,
    				stopFlag:false,
    				startTime:0,
    				content:"asdasd",
    				coverFlag:false,
    				setFontSize:function(){
    					document.getElementById("numbers").style.fontSize = (window.innerWidth
    								|| document.documentElement.clientWidth
    								|| document.body.clientWidth) / 3 + "px"
    				},
    				refreshTable:function(){//刷新进度条
    					//第一条进度条
    					var table = document.getElementById("table1")
    					var span = document.getElementById('numbers')
    
    					//table2.style.width = 
    					table.style.width = span.offsetWidth + "px"
    					var progress = 1
    					
    					if(this.restSeconds > 0)
    						progress = this.restSeconds / (this.initMinutes * 60)
    					
    					document.querySelector('#table1 td:nth-of-type(1)').style.width = progress * 100 + "%"
    					var td2 = document.querySelector('#table1 td:nth-of-type(2)')
    					if (progress < 1){
    						td2.style.width = (1 - progress) * 100 + "%"
    					}else{
    						td2.style.display = "none"
    					}
    					
    					//第二条进度条,用画布实现
    					var canvas = document.getElementById('myCanvas')
    					canvas.width = span.offsetWidth
    					
    					var ctx = canvas.getContext("2d")
    					var rectWeight = progress * span.offsetWidth
    					
    					ctx.clearRect(0, 0, span.offsetWidth, 20)
    					ctx.fillStyle = "#FF0000"
    					//console.log("rectWeight: " + rectWeight)
    					//console.log(progress * span.offsetWidth)
    					ctx.fillRect(0, 0, rectWeight, 20)
    				},
    				init:function(){
    					this.startTime = Date.now()
    					var span = document.getElementById('numbers')
    					this.setFontSize()
    					
    					this.restSeconds = this.initMinutes * 60 
    					this.minute = this.initMinutes
    					
    					var obj = this
    					
    					this.handle = setInterval(function(){
    						
    						if(obj.stopFlag)
    							return
    						
    						if(obj.restSeconds > 0){
    							span.innerHTML = "" + (obj.minute < 10 ? "0" + obj.minute : obj.minute) + ":" + 
    							(!obj.coverFlag ? (obj.second < 10 ? "0" + obj.second : obj.second) : "&nbsp;".repeat(4))
    							
    							if(obj.restSeconds > 0){
    								obj.restSeconds -= 1
    							}
    							
    							obj.minute =  Math.floor(obj.restSeconds / 60)
    							obj.second =  obj.restSeconds - obj.minute * 60
    							
    							//刷新进度条
    							obj.refreshTable()
    							
    						}else{
    							span.innerHTML = "Time "
    							window.clearInterval(obj.handle)
    							document.getElementById("music2").play()
    							
    							//跑完后记录
    							var content = document.getElementById("content").value
    							obj.markdownRecord(content)
    							
    							//不停地闪烁
    							window.setInterval(function(){
    								span.innerHTML = (span.innerHTML == "Time ")?"is up.":"Time "
    							}, 5000)
    						}
    						
    					}, 1000)
    					
    					document.getElementById("music").play()
    					
    					var numbers = document.getElementById("numbers")
    					
    					numbers.addEventListener("click", function(){
    						obj.coverFlag = !obj.coverFlag
    					})
    
    					numbers.addEventListener("dblclick", function(){
    						obj.stopFlag = !obj.stopFlag
    					})
    
    					document.getElementById('content').addEventListener("blur", function(){
    
    						if(obj.restSeconds > 0)
    							return
    						
    						var content = document.getElementById("content").value
    						
    						if(this.content != content){
    							this.content = content
    							obj.markdownRecord(content)
    						}
    					})
    					
    					document.getElementById('table1').addEventListener("dblclick", function(){
    						console.log("timerHistory:")
    						console.log(localStorage.getItem('timerHistory'))
    						console.log("\n")
    						obj.exportHistory()
    					})
    					
    				},
    				markdownRecord:function(content){
    					var records = []
    					var timerHistory = localStorage.getItem("timerHistory")
    					
    					if(timerHistory != null){
    						records = JSON.parse(timerHistory)
    					}
    					
    					var lastRecord = records[0]
    					
    					if(lastRecord && lastRecord.start == this.startTime){
    						lastRecord.note = content
    					}else{
    						var history = {
    							start:this.startTime,
    							duration:this.initMinutes,
    							note:content
    						}
    						records.unshift(history)//数组头插入元素			
    					}
    					
    					var recordsJson = JSON.stringify(records)
    					
    					//将结果存入本地
    					localStorage.setItem("timerHistory", recordsJson)
    					
    					console.log(records[0])
    					console.log("Marked it Down.")
    					
    				},
    				exportHistory:function(){
    
    					var filename = 'record' + Date.now() +'.txt'
    					var text = localStorage.getItem('timerHistory')
    					this.exportFile(filename, text)
    				},
    				exportFile:function(filename, text){
    					var element = document.createElement('a');
    					element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
    					element.setAttribute('download', filename);
    
    					element.style.display = 'none';
    					document.body.appendChild(element);
    
    					element.click();
    
    					document.body.removeChild(element);
    				}
    			}
    			
    
    			window.onresize = function(){
    				timer.setFontSize()
    				timer.refreshTable()
    			}
    			
    			//pause
    			window.onclick = function(){
    				//timer.stopFlag = !timer.stopFlag
    			}
    			
    			//main
    			window.onload = function(){
    				timer.init()	
    			}
    		</script>
    	</body>
    </html> 
    
    展开全文
  • 设计个利用单片机控制的多功能秒表系统。 设计功能描述: 1、采用51单片机作为控制芯片; 2、数码管前两位显示分钟,后两位显示秒; 2、正计时、倒计时可以切换; 3、倒计时时间可设置,计时结束蜂鸣...
  • 基于AT89C51单片机的LED数字倒计时器设计1单片机原理及其应用课程设计课 题: 基于AT89C51单片机的...绩: AT89C51单片机LED数字倒计时器设计报告、设计目的作用1、掌握51单片机最小系统的设计;2、掌握按键电路...
  • 本可调倒计时提醒具有:电路简洁、显示醒目、定时准确、制作容易、可调倒计0~99分钟,使用方便的优点。它既有制作的趣味性,又有使用的实用性。、硬件电路如1所示,电源变压器T1将AC220V市电变换为AC9V交流...
  • WORD格式 整理分享范文范例 参考指导音乐倒是计时器一设计要求利用STC89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。做小段时间倒计数,当倒计数为0时,则发出...
  • 计时器由分、秒计数器完成,秒计数器为模60,分计数器应能计至40分钟。 “分”、“秒”显示用LED数码管,应配用相应译码器。 人工拨动开关来控制计时器的启动/暂停。 半场、全场到自动会有相应的提示。
  • 题: 基于AT89C51单片机的LED数字倒计时器设计专 业: 电工程及其自动化班 级: 2013 级 4班学 号:姓 名:设计日期: 2015年6月6日——2015年6月19日成 绩:AT89C51单片机LED数字倒计时器设计报告、设计目的作用1...
  • 基于单片机音乐倒数计时器设计课程设计报告书课程名称 单片机应用技术课程设计任务书课程设计题 目基于单片机音乐倒数计时器的设计课程设计时 间2013 年 3 月 25 日 ~ 2013 年 3 月 29 日课程设计小组成员课程设计...
  • 基于AT89C51单片机的LED数字倒计时器设计专业:电工程及其自动化班级: 2013 级4班学号: 姓名:设计日期: 2015年6月6日——2015年6月19日成绩:AT89C51单片机LED数字倒计时器设计报告、设计目的作用1、掌握51...
  • 2.1.2 计时系统: 2.2 原理分析 2.3 总体设计 2.4 软硬件设计 2.4.1 硬件设计 2.4.2 软件设计 2.5 方案论证及可行性分析 2.6 测试结果与分析 2.7 参考文献: 3. 设计文件以及源码下载 1. 设计任务: ...
  • 课 题: AT89C51单片机LED数字倒计时器专 业:班 级:学 号:姓 名:指导教师:设计日期:成 绩:重庆大学城市科技学院电气学院目录设计目的作用1二、设计要求1三、设计的具体实现11、设计原理1(1)系统设计方案1...
  • 篮球比赛计时器设计与实现

    千次阅读 2021-05-26 03:17:30
    本电路主要核心是AT89S51,利用软件和硬件的结合实现开机自动置节计数器为第节,节计时器为12分00秒,24秒违例为24秒。用数字显示篮球比赛当时节数,每节时间及24秒的倒计时,采用单片机串行显示。最后,本文会...
  • 59s计时器设计

    千次阅读 2021-03-23 20:24:57
    假设单片机的晶振频率为12MHz,设计一个59秒计时器,要求使用T0工作方式1下进行硬件延时。 二、布线 三、实现 1、 #include<reg52.h> #include <intrins.h> #define uchar unsigned char//宏定义 #...
  • 单片机原理及其应用课程设计课 题: 基于AT89C51单片机的LED数字倒计时器设计专 业: 电工程及其自动化班 级: 2013 级 4班学 号: 姓 名: 设计日期: 2015年6月6日——2015年6月19日成 绩:AT89C5...
  • 简易计时器:时、分、秒时间显示,可倒计时,可单独设置时间。
  • 计时牌的主控制为Mega8,采用74HC595驱动9个数码管,实时时钟使用DS1302模块,编程使用Arduino。由于手头没有现成的大尺寸数码管,采用黄色LED手工制作了9个7段数码管。 制作步骤: 1、使用Atmega8A做成Arduino...
  • 设计一个59s倒计时器,使用两位共阳极LED数码管将其显示出来。 硬件设计 在的基础上去掉了按键 程序设计 使用定时器中断,设定100ms,每次加到10的时候就停止就是1s的了 /* 选用的是共阳极数码管,那么需要找到...
  • 设计一个秒计时电路,由74160同步二进制计数器和个单位脉冲信号构成,单位脉冲信号由555定时器构成的多谐振荡产生。
  • 倒计时计时器倒计时计时器的用途很广泛。它可以用做定时,控制被定时的电器的工作状态,实现定时开或者定时关,最长定时时间为999 分钟。它还可以用做倒计时记数,最长记时时间为999 秒,有三位数码管显示记数状态。...
  • 计时器课程设计.doc

    2021-05-21 05:53:05
    计时器课程设计精选河南机电高等专科学校课程设计报告书课程名称: 单片机原理及系统设计课题名称: 倒计时器课程设计专 业: 计算机控制技术班 级:学 号:姓 名:成 绩:2013 年 12 月30 日目 录1.设计目的12. ...
  • 1:出租车自动计费方案框图 MultiSim设计出租车计价控制电路。整个自动控制系统由四个主要电路构成:里程计数及显示、计价电路、基本里程判别电路、555秒信号发生及等候计时电路和清零复位电路。以...
  • 在线倒计时器

    2021-05-21 08:14:26
    如何在PPT中插入3分钟计时器,最后有声音。280992...如何在PPT中插入3分钟计时器,最后有声音。280992656@秋秋在线等,万分感谢!...如何在PPT中插入3分钟计时器,最后有声音。280992656@秋秋 在线等,万分感谢!...
  • 决定计时系统的精度,一般用石英晶体振荡加分频来实现。将标准秒信号送入“秒计 数”,“秒计数器”采用六十进制计数器,每累计 60 秒发出个“分脉冲”信号,该信号 将作为“分计数器”的时钟脉冲。“分...
  • 1、音乐倒是计时器一设计要求利用STC89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。做小段时间倒计数,当倒计数为0时,则发出段音乐声响,通知倒计数终了,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,870
精华内容 4,348
热门标签
关键字:

一分钟计时器设计图