欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

使用HTML5 Notication API实现一个定时提醒工具

程序员文章站 2022-05-04 09:53:04
...
在本文中将利用封装过的API实现一个定时提醒工具。

工具的主要目的是:自己经常坐在电脑前,一坐就是好几个小时,希望有工具能够每小时提醒自己起来活动休息一会。

主要功能有:用户可以设置周期性的提醒时间,比如设置每1小时提醒一次,1小时后将弹出通知框提醒用户时间到。

其他包括:用户能够设置对话框的持续时间,比如持续15秒,15秒后对话框消失,以及提醒内容等。


HTML&CSS

首先先创建基本的HTML结构如下:





  1. 时间提醒
  2. div {
  3. margin:40px 15px;
  4. }

  5. #main {
  6. margin:0 auto;
  7. width:360px;
  8. border: 2px solid green;
  9. }

  10. .operation {
  11. text-align:center;
  12. }
















  • 复制代码

    desktopNotify.js是前面提到的封装过的Notification API, desktop-notification.js则是相关的业务逻辑JS,后面会说到。基本的效果如下,虽然是丑陋了点- -!!

    使用HTML5 Notication API实现一个定时提醒工具


    程序的逻辑比较简单,设置各个字段,点击"开始"按钮,程序开始计时,到指定时间,弹出通知框。

    JavaScrip


    desktopNotify.js的功能主要是对原生Notification API做一些基本封装,代码如下:

    1. //desktopNotify.js
    2. void function() {
    3. var _instance = null,
    4. _permissionStatus = -1,
    5. _eventTable = {
    6. "show": 1,
    7. "error": 1,
    8. "close": 1,
    9. "click": 1
    10. };


    11. /**
    12. *调用例子:
    13. * var DN = window.XX.DesktopNotify;
    14. * DN.requestPermission(function(){
    15. * DN.show("http://xxx", "hello", "world");
    16. * });
    17. */
    18. var DesktopNotify = {

    19. /**
    20. *检测是否支持Notification,支持返回true
    21. */
    22. isSupport : function() {
    23. return 'Notification' in window || 'webkitNotifications' in window;
    24. },

    25. /**
    26. *弹出一个文本桌面通知
    27. *
    28. * @param {String} iconURL:图标资源
    29. * @param {String} title: 标题
    30. * @param {String} content: 内容
    31. */
    32. show : function(iconURL, title, content) {
    33. _instance = this.create(iconURL, title, content);
    34. _instance.show();
    35. },


    36. /**
    37. *弹出一个 HTML桌面通知
    38. *
    39. * @param {String} url:html链接资源
    40. */
    41. showHTML : function(url) {
    42. _instance = this.createHTML(url);
    43. _instance.show();
    44. },

    45. /***
    46. * 关闭一个桌面通知
    47. *
    48. * @param {Object} cb: 隐藏后的回调函数
    49. *
    50. */
    51. hide : function(cb) {
    52. _instance && _instance.close();
    53. cb && cb();
    54. },

    55. /**
    56. * 释放通知对话框引用
    57. */
    58. destroy: function() {
    59. _instance = null,
    60. _permissionStatus = -1;
    61. },

    62. /**
    63. * 检查权限状态
    64. * @return {Number}: 0为允许,1为不允许, 2为禁止
    65. */
    66. checkPermission : function() {
    67. return _permissionStatus = webkitNotifications.checkPermission();
    68. },

    69. /**
    70. * 检查是否得到授权
    71. * @return {Boolean}: true表示得到授权
    72. */
    73. isPermitted: function() {
    74. return this.checkPermission() === 0;
    75. },


    76. /**
    77. * 请求授权
    78. * @param {Object} cb:得到授权后的回调函数
    79. */
    80. requestPermission: function(cb) {
    81. if(this.isPermitted()) {
    82. cb && cb();
    83. } else {
    84. webkitNotifications.requestPermission(cb);
    85. }
    86. },

    87. /**
    88. * 创建一个文本性质的通知对话框,但不展示
    89. * @param {Object} iconURL
    90. * @param {Object} title
    91. * @param {Object} content
    92. * @return {Object} Notification实例
    93. */
    94. create: function(iconURL, title, content) {
    95. return webkitNotifications.createNotification(iconURL, title, content);
    96. },

    97. /**
    98. * 创建一个HTML性质的通知对话框,但不展示
    99. * @param {Object} url: 指向html页面的链接
    100. * @return {Object} Notification实例
    101. */
    102. createHTML: function(url) {
    103. return webkitNotifications.createHTMLNotification(url);
    104. },

    105. /**
    106. * 添加事件监听函数
    107. * @param {Object} type: 事件类型
    108. * @param {Object} fn: 监听函数
    109. */
    110. on: function(type, fn) {
    111. _eventTable[type] && _instance && _instance.addEventListener(type, fn, false);
    112. },

    113. /**
    114. * 移除事件监听函数
    115. * @param {Object} type: 事件类型
    116. * @param {Object} fn: 监听函数
    117. */
    118. un: function(type, fn) {
    119. _eventTable[type] && _instance && _instance.removeEventListener(type, fn, false);
    120. }
    121. };

    122. window.XX || (window.XX = {});
    123. window.XX.DesktopNotify = DesktopNotify;
    124. }();
    复制代码

    desktop-notification.js则是业务代码,如下:

    1. //desktop-notification.js
    2. void function() {
    3. var TITLE = '时间到啦~~!亲!!',
    4. //图标路径
    5. ICONURL = 'icon.png';

    6. var DN = window.XX.DesktopNotify;

    7. /**
    8. * 通知函数,根据设置的时间间隔,周期的弹出通知框
    9. */
    10. function notify(content, duration) {
    11. DN.show(ICONURL, TITLE, content);
    12. setTimeout(function() {
    13. DN.hide();
    14. }, duration);
    15. }

    16. if (!DN.isSupport()) {
    17. alert('浏览器不支持桌面通知!');
    18. return;
    19. }

    20. var startEl = document.getElementById('start'),//开始按钮
    21. stopEl = document.getElementById('stop'),//停止按钮
    22. intervalEl = document.getElementById('interval'),//提醒时间间隔输入框
    23. contentEl = document.getElementById('content'),//提醒内容输入框
    24. durEl = document.getElementById('duration'),//通知框持续时间输入框
    25. timer = null;

    26. startEl.addEventListener('click', function(evt) {
    27. /**
    28. * 点击“开始”,先申请用户授权,经过授权后,获取相关的提醒时间间隔,以及内容,周期的调用notify函数弹出通知框
    29. */
    30. DN.requestPermission(function() {
    31. timer = setInterval(notify, intervalEl.value * 60 * 1000, contentEl.value, durEl.value * 60 * 1000);
    32. startEl.disabled = true;
    33. });
    34. }, false);

    35. stopEl.addEventListener('click', function(evt) {
    36. /**
    37. * 点击“停止”,清除周期调用
    38. */
    39. clearInterval(timer);
    40. startEl.disabled = false;
    41. }, false);
    42. }();
    复制代码

    运行效果

    注意,网页必须在HTTP或HTTPS协议下打开,而不能直接用File协议打开,否则无法运行(若用户设置了浏览器接收任何通知,倒是可以直接打开运行)。运行的效果如下:

    使用HTML5 Notication API实现一个定时提醒工具


    即便当浏览器最小化,或者未在高亮状态,通知框一样会定时弹出。

    总结

    在本文中,利用了HTML5 Notification做了一个简单的小工具,用于提醒自己不要久坐,按时休息= =!虽然界面是丑陋了点,不过效果还可以。


    完整代码点击:https://github.com/Exodia/jsdemo/tree/master/desktop-notifications


    相关标签: HTML5教程 HTML5中国 使用HTML5 Notication API实现一个定时提醒工具 html5cn htm

    上一篇: 关于table-row table-cell_html/css_WEB-ITnose

    下一篇: 两列布局中单列定宽单列自适应布局的5种思路 - 小火柴的蓝色理想

    推荐阅读