时间日期

HTML5超逼真带定时功能的电子数字时钟

阿里云


这是一款使用 html5 制作的带定时功能的超逼真电子数字时钟插件。该 html5 数字时钟有两种样式可以切换,并且带有定时闹钟功能,整个界面完全模拟现实的电子时钟,非常逼真。

section

我们需要两个对话框:一个用于设置/编辑闹钟定时功能;一个用于显示定时时间到了。

也想出现在这里?联系我们
创客主机
  1. <div class="overlay">
  2.  
  3.     <div id="alarm-dialog">
  4.  
  5.         <h2>Set alarm after</h2>
  6.  
  7.         <label class="hours">
  8.             Hours
  9.             <input type="number" value="0" min="0" />
  10.         </label>
  11.  
  12.         <label class="minutes">
  13.             Minutes
  14.             <input type="number" value="0" min="0" />
  15.         </label>
  16.  
  17.         <label class="seconds">
  18.             Seconds
  19.             <input type="number" value="0" min="0" />
  20.         </label>
  21.  
  22.         <div class="button-holder">
  23.             <a id="alarm-set" class="button blue">Set</a>
  24.             <a id="alarm-clear" class="button red">Clear</a>
  25.         </div>
  26.  
  27.         <a class="close"></a>
  28.  
  29.     </div>
  30.  
  31. </div>
  32.  
  33. <div class="overlay">
  34.  
  35.     <div id="time-is-up">
  36.  
  37.         <h2>Time's up!</h2>
  38.  
  39.         <div class="button-holder">
  40.             <a class="button blue">Close</a>
  41.         </div>
  42.  
  43.     </div>
  44.  
  45. </div>

这两个对话框都使用 CSS 来将之隐藏,然后使用 jQuery 的 fadeIn()方法在需要的时候显示它们。另一个需要注意的地方是数字时钟使用 HTML5 number 输入框,最小值 min 为 0。number 输入框非常容易使用 javascrit 来验证,并且它们也支持移动设备的数字键盘。

接下来是 HTML5 audio 元素。在例子中包含了两种格式的 audio 文件。第一种是 mp3 格式的文件,第二种是 ogg 格式的文件。ogg 格式文件仅仅在 Firefox 浏览器中需要,Firefox 浏览器不支持 mp3 格式的音频文件。其它的浏览器都支持 mp3 格式的音频文件。

  1. <audio id="alarm-ring" preload>
  2.     <source src="assets/audio/ticktac.mp3" type="audio/mpeg" />
  3.     <source src="assets/audio/ticktac.ogg" type="audio/ogg" />
  4. </audio>

preload 属性告诉浏览器要预先下载音频文件,这将使得在设备在播放时音频文件能立刻生效。我们使用 JavaScript HTML5 audio API 能很轻易的播放音频文件。

section

这里的 jQuery 文件是使用 jQuery 和 css3 制作逼真的数字时钟效果 jQuery 文件的一些补充。我们要做的第一件事是为定时闹钟功能定义一个变量:

  1. var dialog = $('#alarm-dialog').parent(),
  2.     alarm_set = $('#alarm-set'),
  3.     alarm_clear = $('#alarm-clear'),
  4.     time_is_up = $('#time-is-up').parent();
  5.  
  6. // This will hold the number of seconds left
  7. // until the alarm should go off
  8. var alarm_counter = -1;

接下来,我们要在 update_time()中检查闹钟的定时时间是否到了:

  1. // Is there an alarm set?
  2.  
  3. if(alarm_counter > 0){
  4.  
  5.     // Decrement the counter with one second
  6.     alarm_counter--;
  7.  
  8.     // Activate the alarm icon
  9.     alarm.addClass('active');
  10. }
  11. else if(alarm_counter == 0){
  12.  
  13.     time_is_up.fadeIn();
  14.  
  15.     // Play the alarm sound. This will fail
  16.     // in browsers which don't support HTML5 audio
  17.  
  18.     try{
  19.         $('#alarm-ring')[0].play();
  20.     }
  21.     catch(e){}
  22.  
  23.     alarm_counter--;
  24.     alarm.removeClass('active');
  25. }
  26. else{
  27.     // The alarm has been cleared
  28.     alarm.removeClass('active');
  29. }

当计数器 counter 到达 0,我们就应该播放音频文件和显示“Time is up”对话框。

最后要做的事情是设置“Set an alarm”对话框:

  1. // Handle setting and clearing alamrs
  2.  
  3. $('.alarm-button').click(function(){
  4.  
  5.     // Show the dialog
  6.     dialog.trigger('show');
  7.  
  8. });
  9.  
  10. dialog.find('.close').click(function(){
  11.     dialog.trigger('hide')
  12. });
  13.  
  14. dialog.click(function(e){
  15.  
  16.     // When the overlay is clicked, 
  17.     // hide the dialog.
  18.  
  19.     if($(e.target).is('.overlay')){
  20.         // This check is need to prevent
  21.         // bubbled up events from hiding the dialog
  22.         dialog.trigger('hide');
  23.     }
  24. });
  25.  
  26. alarm_set.click(function(){
  27.  
  28.     var valid = true, after = 0,
  29.         to_seconds = [3600, 60, 1];
  30.  
  31.     dialog.find('input').each(function(i){
  32.  
  33.         // Using the validity property in HTML5-enabled browsers:
  34.  
  35.         if(this.validity && !this.validity.valid){
  36.  
  37.             // The input field contains something other than a digit,
  38.             // or a number less than the min value
  39.  
  40.             valid = false;
  41.             this.focus();
  42.  
  43.             return false;
  44.         }
  45.  
  46.         after += to_seconds[i] * parseInt(parseInt(this.value));
  47.     });
  48.  
  49.     if(!valid){
  50.         alert('Please enter a valid number!');
  51.         return;
  52.     }
  53.  
  54.     if(after < 1){
  55.         alert('Please choose a time in the future!');
  56.         return; 
  57.     }
  58.  
  59.     alarm_counter = after;
  60.     dialog.trigger('hide');
  61. });
  62.  
  63. alarm_clear.click(function(){
  64.     alarm_counter = -1;
  65.  
  66.     dialog.trigger('hide');
  67. });
  68.  
  69. // Custom events to keep the code clean
  70. dialog.on('hide',function(){
  71.  
  72.     dialog.fadeOut();
  73.  
  74. }).on('show',function(){
  75.  
  76.     // Calculate how much time is left for the alarm to go off.
  77.  
  78.     var hours = 0, minutes = 0, seconds = 0, tmp = 0;
  79.  
  80.     if(alarm_counter > 0){
  81.  
  82.         // There is an alarm set, calculate the remaining time
  83.  
  84.         tmp = alarm_counter;
  85.  
  86.         hours = Math.floor(tmp/3600);
  87.         tmp = tmp%3600;
  88.  
  89.         minutes = Math.floor(tmp/60);
  90.         tmp = tmp%60;
  91.  
  92.         seconds = tmp;
  93.     }
  94.  
  95.     // Update the input fields
  96.     dialog.find('input').eq(0).val(hours).end().eq(1).val(minutes).end().eq(2).val(seconds);
  97.  
  98.     dialog.fadeIn();
  99.  
  100. });
  101.  
  102. time_is_up.click(function(){
  103.     time_is_up.fadeOut();
  104. });

注意代码的 35 行,我们使用了一个内置的 validity 属性,这个属性是现代浏览器的 number input 的一个内置属性。它用于告诉我们 number input 中的数字是否大于 0(记住它有个最小值 0)。

HTML5 超逼真带定时功能的电子数字时钟

已有 296 人购买
  • lwfr
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!