最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

使用HTML5NoticationAPI实现一个定时提醒工具

来源:动视网 责编:小采 时间:2020-11-27 15:16:26
文档

使用HTML5NoticationAPI实现一个定时提醒工具

使用HTML5NoticationAPI实现一个定时提醒工具: 在本文中将利用封装过的API实现一个定时提醒工具。 工具的主要目的是:自己经常坐在电脑前,一坐就是好几个小时,希望有工具能够每小时提醒自己起来活动休息一会。 主要功能有:用户可以设置周期性的提醒时间,比如设置每1小时提醒一次,1小时后将弹出通知
推荐度:
导读使用HTML5NoticationAPI实现一个定时提醒工具: 在本文中将利用封装过的API实现一个定时提醒工具。 工具的主要目的是:自己经常坐在电脑前,一坐就是好几个小时,希望有工具能够每小时提醒自己起来活动休息一会。 主要功能有:用户可以设置周期性的提醒时间,比如设置每1小时提醒一次,1小时后将弹出通知
 在本文中将利用封装过的API实现一个定时提醒工具。

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

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

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


HTML&CSS

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





  1. 时间提醒
















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



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

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 Notification做了一个简单的小工具,用于提醒自己不要久坐,按时休息= =!虽然界面是丑陋了点,不过效果还可以。


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


文档

使用HTML5NoticationAPI实现一个定时提醒工具

使用HTML5NoticationAPI实现一个定时提醒工具: 在本文中将利用封装过的API实现一个定时提醒工具。 工具的主要目的是:自己经常坐在电脑前,一坐就是好几个小时,希望有工具能够每小时提醒自己起来活动休息一会。 主要功能有:用户可以设置周期性的提醒时间,比如设置每1小时提醒一次,1小时后将弹出通知
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top