<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Snooda]]></title> 
<link>http://www.snooda.com/index</link> 
<description><![CDATA[Snooda's Blog]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Snooda]]></copyright>
<item>
<link>http://www.snooda.com/read/</link>
<title><![CDATA[Blog今日更新：时钟和消息框]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Thu, 20 May 2010 15:04:35 +0000</pubDate> 
<guid>http://www.snooda.com/read/</guid> 
<description>
<![CDATA[ 
	博客有段时间没有更新了，简陋的界面一直为人所诟病，今天决定加点动态的挂件：时钟和消息框。<br />
<br />
消息框前两天做好了，今天主要做钟表。<br />
<br />
首先是遇到一个问题：时钟单独作为一个页面显示的时候IE，FF，Chrome均正常。但是用require将代码require进主页面后Chrome和FF无法正常工作，IE中表针形状错误。改来改去，不知道问题到底出在哪里。于是直接用iframe包含钟表的方式。解决了。<br />
<br />
然后是时钟刷新问题，怎样控制表针每秒移动一个格呢？两种方法：<br />
一，读取服务器时间，使用setInterval隔1000ms刷一次。<br />
二，读取服务器时间，获取脚本载入时间。求时间差，每次刷新时取得当前系统时间并加上时间差。<br />
<br />
<br />
首先我用了方法二，这种方法的缺点就是在钟表载入后不能修改系统时间，曾经尝试修改了次，IE随着时间的修改表针也移动了，Chrome在修改后表针照旧走，走半分种后就停住再也不动了。。用Chrome里的JavaScript调试器查看了下，系统时间修改后Chrome里Date方式得到的时间并没有随之改变。这可以解释为什么修改了系统时间表针不做相应移动。但走半分种就停住就不知道为什么了。好在一般没有人天天调时间玩，所以这也不是个问题。<br />
<br />
然后又试了试方法一，由于setInterval的问题，间隔1000ms并不精确，使用Chrome和IE进行对比，每隔一分钟两者中的钟表要相差1秒。当然不同机器表现不同。总之这种方法计时是相当不准确的，解决方法就是间隔一段时间向服务器请求新的时间，但这样会增加服务器负载。后来研究了下其他网站的一些倒计时，大多是setInterval，这样的准确度是没有方法二高的，好在这些应用对时间精确度要求不高，有些误差也可以接受。这种方法不依赖于客户机时间，避免了一些兼容性问题和出现诡异结果的可能性。<br />
<br />
最后选用了方法二。<br />
<br />
把代码整理了下，上传。升级成功
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/#blogcomment</link>
<title><![CDATA[[评论] Blog今日更新：时钟和消息框]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.snooda.com/read/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>