// 重画时针
context.beginPath();
context.moveTo(0,0);// 从原点开始
var date = new Date();
var hour = date.getHours();
if(hour>=12)
hourhour = hour - 12;
var minute = date.getMinutes();
var hhx = 27*Math.cos((hour-3)*Math.PI/6 + minute*Math.PI/360);
var hhy = 27*Math.sin((hour-3)*Math.PI/6 + minute*Math.PI/360);
context.lineTo(hhx, hhy);// 至时针末端所在位置
context.closePath();
context.stroke();
};
worker.postMessage("");
每过60秒钟,后台线程将会向前台线程发送一个空消息,前台线程接 收到消息后,首先,清空canvas,然后重新获取当前时间,计算分针以及时针对应的坐标,并重新画出时针和分针,从而完成对分针以及时针的更新,最终, 每过1分钟,表盘更新一次,从而模拟出动态时针的效果,如图10所示。
图10.时钟
离线支持
虽然Web操作系统的优点是可以利用网络随时随地进行访问。然而在 无法访问网络的情况下,Web操作系统便无法发挥作用。因此Web操作系统有必要在离线状态下,仍能对部分应用及其功能进行支持。事实上,各种浏览器已提 供了各式各样的缓存机制以提供对离线应用的支持,然后这些缓存机制往往是临时性的,不可控的。HTML5为开发人员提供了解决此问题的另一种途径,它提供 了一种永久性的,自定义的缓存方法,使得Web操作系统可以在离线的状况下,依然支持部分应用的功能。
HTML5离线支持的核心是一个缓存清单,其中列出了需要缓存的文件,本系统中的缓存文件index.manifest,如清单19所示。
清单 19.缓存清单
-
CACHE MANIFEST
-
#version 1.10
-
CACHE:
-
index.html
-
js/app.js
-
js/clock.js
-
js/data.js
-
js/database.js
-
js/desktop.js
-
js/history.js
-
js/taskbar.js
-
js/timer.js
-
js/file.js
-
js/utils.js
-
css/index.css
-
images/appHolder1.png
-
images/background.jpg
-
images/clock.png
-
images/close.gif
-
images/computer.gif
-
images/history.png
-
images/network.gif
-
images/recycleBin.gif
-
images/startIcon.png
-
images/taskBar.png
-
images/vidioplayer.gif
-
images/notebook.gif
-
images/text.gif
-
images/save.gif
-
movs/movie.ogg
-
sounds/WindowsLogonSound.wav
其中,CACHE MANIFEST标示本文件为缓存文件,#version 1.10标示了本文件的版本。
CACHE之后所罗列的则是开发人员自定义的内容,其中包含了所有在离线状态下用户访问应用程序所必不可少的文件。
缓存清单定义结束后,在index.html中插入这个清单文件名,这样,当浏览器加载这个页面的时候,会自动缓存清单文件中所罗列的文件。
清单 20.应用缓存清单
-
<html manifest="index.manifest">
值得一提的是,若要支持离线缓存,除客户端浏览器的支持以外,服务端的支持也是必不可少的,就本系统所使用的tomca 而言,需要在其配置文件web.xml中添加清单 21 所示的条目。
清单 21.服务器端缓存配置
-
<mime-mapping>
-
<extension>manifest</extension>
-
<mime-type>text/cache-manifest</mime-type>
-
</mime-mapping>
最后,禁用本地机器的网络,重新打开浏览器并访问Web操作系统所在的网址,系统中的大部分应用程序依然可以正常工作,如图11所示。
(责任编辑:12图资源库)