<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>QbatyBlog</title>
	<atom:link href="http://www.qbaty.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.qbaty.org/blog</link>
	<description>CODE IS POETRY</description>
	<lastBuildDate>Tue, 13 Jul 2010 07:28:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Mozilla 怪异模式</title>
		<link>http://www.qbaty.org/blog/mozilla-quirkmode/</link>
		<comments>http://www.qbaty.org/blog/mozilla-quirkmode/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 07:21:57 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[杂谈]]></category>
		<category><![CDATA[almost standard mode]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[quirk mode]]></category>
		<category><![CDATA[strict mode]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=215</guid>
		<description><![CDATA[杂项和样式(Miscellaneous &#38; Style) 所有的样式规则都在layout/style/quirk.css 在怪异模式中，CSS类名是不区分大小写的(case insensitive)，而在标准模式中是大小写敏感的(case sensitive)。 当链接进文档的样式表的MINE type是 text/css时候，即便是服务端给出的Content-Type头不是text/css,它也将被当作CSS文件对待。 CSS解析器接受颜色值不以#号开头。 CSS解析器将把没有单位的数学默认为其单位为 px（但除了字号（font-size）因为Netscape Navigator 4以前就是这样解析的）和行高(line-height)和任意有严格意义的属性。 HTML的颜色解析的不同(#号不是必须的，缺少的颜色数值将被填充为不同数值)取决于Gecko 1.9.2。 背景属性(background属性)为一个空的字符串会把背景的URL设为空，只在怪异模式下生效。 系统字体在navquirks mode工作不一样。 HTML(1-7)和CSS（xx-small &#8211; xx-large）字体大小计算有轻微的不同（参见bug18136）。 在怪异模式下 List bullets 不会继承 List 的字体大小。 :hover 伪类，只作用于链接，图片，和表单控件，除非 CSS选择器 包含标签名字，id 或 属性。 为检测到支持 document.all 块和行内布局(Block and Inline layout)   [这个怪异出现在近似标准模式]（line height）线高度不是line-height(行高)计算不同参见(bug 5821)和(bug24186)还有一些描述在(bug22274) 存在一系列的怪异在计算图片、表格、对象 (object) 和 applets的百分比高度上。尽管CSS描述百分比高度应该表现为height:auto；当其父元素不具有一个固定高度。参见(bug33443#9)和(bug41656).一些这样的怪异可能有其他的影响参见（bug54119） HR 元素在浏览器中怪异模式和标准模式处理不同（而且两者都可以说是错误的）。 表格（Tables）  在怪异模式下，middle 和 adsmiddle 可以是表格单元格 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: 宋体; font-size: medium;">杂项和样式(</span><span style="font-family: 宋体; font-size: medium;"><span style="font-family: Helvetica;">Miscellaneous &amp; Style</span>)</span></p>
<ul>
<li><span style="font-size: small;">所有的样式规则都在<a rel="custom" href="http://mxr.mozilla.org/mozilla-central/source/layout/style/quirk.css" target="_blank"><code>layout/style/quirk.css</code></a></span></li>
<li><span style="font-size: small;">在怪异模式中，CSS类名是不区分大小写的(case insensitive)，而在标准模式中是大小写敏感的(case sensitive)。</span></li>
<li><span style="font-size: small;">当链接进文档的样式表的MINE type是 text/css时候，即便是服务端给出的Content-Type头不是text/css,它也将被当作CSS文件对待。</span></li>
<li><span style="font-size: small;">CSS解析器接受颜色值不以#号开头。</span></li>
<li><span style="font-size: small;">CSS解析器将把没有单位的数学默认为其单位为 px（但除了字号（font-size）因为Netscape Navigator 4以前就是这样解析的）和行高(line-height)和任意有严格意义的属性。<br />
</span></li>
<li><span style="font-size: small;">HTML的颜色解析的不同(#号不是必须的，缺少的颜色数值将被填充为不同数值)取决于Gecko 1.9.2。</span></li>
<li><span style="font-size: small;">背景属性(background属性)为一个空的字符串会把背景的URL设为空，只在怪异模式下生效。</span></li>
<li><span style="font-size: small;">系统字体在navquirks mode工作不一样。<br />
</span></li>
<li><span style="font-size: small;">HTML(1-7)和CSS（xx-small &#8211; xx-large）字体大小计算有轻微的不同（参见<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=18136" target="_blank">bug18136</a><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=18136" target="_blank"></a>）。</span></li>
<li><span style="font-size: small;">在怪异模式下 List bullets 不会继承 List 的字体大小。</span></li>
<li><span style="font-size: small;">:hover 伪类，只作用于链接，图片，和表单控件，除非 CSS选择器 包含标签名字，id 或 属性。</span></li>
<li><span style="font-size: x-small;"><span style="font-size: small;">为检测到支持 document.all</span><br />
</span></li>
</ul>
<p><span style="font-size: medium;">块和行内布局(</span><span style="font-size: medium;"><span style="font-family: Helvetica;">Block and Inline layout</span>)</span><br />
<span id="more-215"></span><br />
<span style="font-size: medium;"> </span></p>
<ul>
<li><span style="font-size: small;">[这个怪异出现在近似标准模式]（line height）线高度不是line-height(行高)计算不同参见(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=5821" target="_blank">bug 5821</a>)和(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=24186" target="_blank">bug24186</a>)还有一些描述在(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=22274" target="_blank">bug22274</a>)</span></li>
<li><span style="font-size: small;">存在一系列的怪异在计算图片、表格、对象 (object) 和 applets的百分比高度上。尽管CSS描述百分比高度应该表现为height:auto；当其父元素不具有一个固定高度。参见(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=33443#c9" target="_blank">bug33443#9</a>)和(<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=41656" target="_blank">bug41656</a>).一些这样的怪异可能有其他的影响参见（<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=54119" target="_blank">bug54119</a>）</span></li>
<li><span style="font-size: small;">HR 元素在浏览器中怪异模式和标准模式处理不同（而且两者都可以说是错误的）。</span></li>
</ul>
<p><span style="font-size: medium;">表格（</span><span style="font-family: Helvetica; font-size: medium;">Tables</span><span style="font-size: medium;">）</span></p>
<div>
<ul>
<li><span style="font-size: x-small;"> <span style="font-size: small;">在怪异模式下，middle 和 adsmiddle 可以是表格单元格 align 属性的值。而且表格支持middle,absmiddle,abscenter这些属性值（和center一样） </span></span></li>
<li><span style="font-size: small;">当文档定义了背景后（图片或是颜色），TD, TH, TR, THEAD, TBODY, and TFOOT 这些元素会具有文档的背景 </span></li>
<li><span style="font-size: small;">根据CSS 2.1勘误表，empty-cells 属性在怪异模式下属性是hide ，在严格模式下是show </span></li>
<li><span style="font-size: small;">在怪异模式下，浮动的table元素永远不会被挤到下一行去，如果不是正好处在靠着其他浮动元素同一行的位置时，他将会把页面扩宽 </span></li>
<li><span style="font-size: small;">在怪异模式中，HTML4 是 故意不去理会 colspan=&#8221;0&#8243; and rowspan=&#8221;0&#8243; 这些属性。 </span></li>
<li><span style="font-size: small;">仅在怪异模式中 hspace &amp; vspace 是被支持的 </span></li>
<li><span style="font-size: small;">在怪异模式中,当table元素的边框样式为 inset 或者是 outset,这个边框的颜色是取决于table背景色或是最近的背景不为透明的上级元素 </span></li>
<li><span style="font-size: small;">在怪异模式中，有border属性的 表格单元格有一像素的最小值。 </span></li>
<li><span style="font-size: small;">从Gecko 1.8 开始：在怪异模式下，表格单元格上一个固定的宽度声明重设了nowrap这个属性。如果 nowrap 属性已经存在，那么单元格的宽带将不会小于声明的宽度。 </span></li>
<li><span style="font-size: small;">在怪异模式中，基本的表格布局(table layout)将忽视padding </span></li>
<li><span style="font-size: small;">在怪异模式中，在一些情况下表格布局(table layout)处理宽度不一样。</span></li>
</ul>
</div>
<p><span style="font-size: medium;">表单（Forms）<br />
</span></p>
<ul>
<li><span style="font-size: small;">按钮(button)和input计算他们的大小不一样。</span></li>
<li><span style="font-size: small;">在标准模式下，按钮（button）元素只在它缺少type属性的时候可以提交。</span></li>
<li><span style="font-size: small;">文本输入inputs(和其他包含文字的表单控件)计算他们的大小不一样。</span></li>
<li><span style="font-size: small;">button 和 input 、select元素的字体计算不一样。</span></li>
<li><span style="font-size: small;">HTML 要求button元素在单选组里总是被选择的，但在怪异模式里不是强制的。</span></li>
</ul>
<p><span style="font-size: medium;">对应到窗口的框架(Frames)<br />
</span></p>
<ul>
<li><span style="font-size: small;">在怪异模式中，frame上的 marginwidth和marginheight 会被传到其包含的body元素上</span></li>
<li><span style="font-size: small;">在框架上声明 0* 会被认为 1*(参见<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=40383" target="_blank">bug40383</a>)</span></li>
<li><span style="font-size: small;">框架上的 scrolling 属性处理不同</span></li>
</ul>
<p><span style="font-size: medium;">HTML解析器（HTML Parser）</span></p>
<ul>
<li><span style="font-size: small;">在怪异模式中，我们解析HTML 注释和老的浏览器兼容，而不是把&#8221;&#8211;&#8221;当成注释的开始和结束 [这个怪异已经在标准模式中适应。]</span></li>
</ul>
<p>翻译自mozilla的文章 <a href="https://developer.mozilla.org/en/mozilla_quirks_mode_behavior" target="_blank">《Mozilla Quirks Mode Behavior》</a><br />
关于浏览器模式的选择的可以参见秦歌的文章<a href="http://dancewithnet.com/2009/06/14/activating-browser-modes-with-doctype/" target="_blank">《用doctype 激活浏览器模式》</a> 这篇文章详细的解释了，不同浏览器根据不同DTD声明如何来选择解析模式<br />
IE8和IE9的选择会相对复杂，附录的表很详尽</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/mozilla-quirkmode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VI 命令参考</title>
		<link>http://www.qbaty.org/blog/vi-%e5%91%bd%e4%bb%a4%e5%8f%82%e8%80%83/</link>
		<comments>http://www.qbaty.org/blog/vi-%e5%91%bd%e4%bb%a4%e5%8f%82%e8%80%83/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 06:17:42 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[杂谈]]></category>
		<category><![CDATA[vi]]></category>
		<category><![CDATA[命令行]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=207</guid>
		<description><![CDATA[命令分类 命令 说明 移动光标 h 将光标左移一格 l 将光标右移一格。 k 或 Ctrl+p 光标上移一行 j 或 Ctrl+n 光标下移一行 w 将光标移到下一个小字的前面。 W 将光标移到下一个大字的前面。 b 将光标移到前一个小字的前面。 B 将光标移到前一个大字的前面。 e 将光标移到下一个小字的后面。 E 将光标移到前一个大字的后面。 fc 把光标移到同一行的下一个c字符处。 Fc 把光标移到同一行的前一个c字符处。 tc 把光标移到同一行的下一个字符 c 的前一格。 Tc 把光标移到同一行的前一个字符c的后一格。 number&#124; 把光标移到第number列上。 + 或 Enter 把光标移至下一行第一个非空白字符。 - 把光标移至上一行第一个非空白字符。 ) 光标移至句尾 ( 光标移至句首 } 光标移至段落开头 { 光标移至段落结尾 nG [...]]]></description>
			<content:encoded><![CDATA[<table border="1" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="80">命令分类</td>
<td width="80">命令</td>
<td>说明</td>
</tr>
<tr>
<td rowspan="32">移动光标</td>
<td>h</td>
<td>将光标左移一格</td>
</tr>
<tr>
<td>l</td>
<td>将光标右移一格。</td>
</tr>
<tr>
<td>k 或 Ctrl+p</td>
<td>光标上移一行</td>
</tr>
<tr>
<td>j 或 Ctrl+n</td>
<td>光标下移一行</td>
</tr>
<tr>
<td>w</td>
<td>将光标移到下一个小字的前面。</td>
</tr>
<tr>
<td>W</td>
<td>将光标移到下一个大字的前面。</td>
</tr>
<tr>
<td>b</td>
<td>将光标移到前一个小字的前面。</td>
</tr>
<tr>
<td>B</td>
<td>将光标移到前一个大字的前面。</td>
</tr>
<tr>
<td>e</td>
<td>将光标移到下一个小字的后面。</td>
</tr>
<tr>
<td>E</td>
<td>将光标移到前一个大字的后面。</td>
</tr>
<tr>
<td>fc</td>
<td>把光标移到同一行的下一个c字符处。</td>
</tr>
<tr>
<td>Fc</td>
<td>把光标移到同一行的前一个c字符处。</td>
</tr>
<tr>
<td>tc</td>
<td>把光标移到同一行的下一个字符 c 的前一格。</td>
</tr>
<tr>
<td>Tc</td>
<td>把光标移到同一行的前一个字符c的后一格。</td>
</tr>
<tr>
<td>number|</td>
<td>把光标移到第number列上。</td>
</tr>
<tr>
<td>+ 或 Enter</td>
<td>把光标移至下一行第一个非空白字符。</td>
</tr>
<tr>
<td>-</td>
<td>把光标移至上一行第一个非空白字符。</td>
</tr>
<tr>
<td>)</td>
<td>光标移至句尾</td>
</tr>
<tr>
<td>(</td>
<td>光标移至句首</td>
</tr>
<tr>
<td>}</td>
<td>光标移至段落开头</td>
</tr>
<tr>
<td>{</td>
<td>光标移至段落结尾</td>
</tr>
<tr>
<td>nG</td>
<td>光标移至第n行首</td>
</tr>
<tr>
<td>n+</td>
<td>光标下移n行</td>
</tr>
<tr>
<td>n-</td>
<td>光标上移 n行</td>
</tr>
<tr>
<td>n$</td>
<td>光标移至第 n 行尾</td>
</tr>
<tr>
<td>H</td>
<td>把光标移到屏幕最顶端一行。</td>
</tr>
<tr>
<td>M</td>
<td>光标移至屏幕中间行</td>
</tr>
<tr>
<td>L</td>
<td>光标移至屏幕最后行</td>
</tr>
<tr>
<td>0</td>
<td>（注意是数字零）光标移至当前行首</td>
</tr>
<tr>
<td>$</td>
<td>光标移至当前行尾</td>
</tr>
<tr>
<td>space</td>
<td><span>光标右移一个字符 </span></td>
</tr>
<tr>
<td>Backspace</td>
<td>光标左移一个字符</td>
</tr>
<tr>
<td rowspan="7">屏幕翻滚</td>
<td>Ctrl + f</td>
<td>向后滚一页。</td>
</tr>
<tr>
<td>Ctrl + d</td>
<td>向后滚半页。</td>
</tr>
<tr>
<td>Ctrl + b</td>
<td>向前滚一页。</td>
</tr>
<tr>
<td>Ctrl + u</td>
<td>向前滚半页。</td>
</tr>
<tr>
<td>Ctrl + e</td>
<td>屏幕向下滚一行。</td>
</tr>
<tr>
<td>Ctrl + y</td>
<td>屏幕项上滚一行。</td>
</tr>
<tr>
<td>nz</td>
<td>将第n行滚至屏幕顶部，不指定n 时将当前行滚至屏幕顶部。</td>
</tr>
<tr>
<td rowspan="12">插入文本</td>
<td>i</td>
<td>在光标前</td>
</tr>
<tr>
<td>I</td>
<td>在当前行首</td>
</tr>
<tr>
<td>a</td>
<td>光标后</td>
</tr>
<tr>
<td>A</td>
<td>在当前行尾</td>
</tr>
<tr>
<td>o</td>
<td>在当前行之下新开一行</td>
</tr>
<tr>
<td>O</td>
<td>在当前行之上新开一行</td>
</tr>
<tr>
<td>r</td>
<td>替换当前字符</td>
</tr>
<tr>
<td>R</td>
<td>替换当前字符及其后的字符，直至按 键 ESC</td>
</tr>
<tr>
<td>s</td>
<td>从当前光标位置处开始，以输入的文本替代指定数目的字符</td>
</tr>
<tr>
<td>S</td>
<td>删除指定数目的行，并以所输入文本代替之</td>
</tr>
<tr>
<td>ncw 或 nCW</td>
<td>修改指定数目的字</td>
</tr>
<tr>
<td>nCC</td>
<td>修改指定数目的行</td>
</tr>
<tr>
<td rowspan="20">修改</td>
<td>ndw 或 ndW</td>
<td>删除光标处开始及其后的个字 n-1</td>
</tr>
<tr>
<td>do</td>
<td>删至行首</td>
</tr>
<tr>
<td>d$</td>
<td>删至行尾</td>
</tr>
<tr>
<td>ndd</td>
<td>删除当前行及其后行 n-1</td>
</tr>
<tr>
<td>x 或 X</td>
<td>删除一个字符， x 删除光标后的，而 X 删除光标前的</td>
</tr>
<tr>
<td>Ctrl+u</td>
<td>删除输入方式下所输入的文本</td>
</tr>
<tr>
<td>cc 或 S</td>
<td>修改一整行。</td>
</tr>
<tr>
<td>C</td>
<td>改变一行光标位置以后的部分。</td>
</tr>
<tr>
<td>cw</td>
<td>改变光标所在单词。</td>
</tr>
<tr>
<td>dd</td>
<td>删除当前行。</td>
</tr>
<tr>
<td>D</td>
<td>删除光标所在行光标后面的内容。</td>
</tr>
<tr>
<td>dw</td>
<td>删除光标所在的单词。</td>
</tr>
<tr>
<td>J</td>
<td>把下一行内容加到本行行尾。</td>
</tr>
<tr>
<td>rc</td>
<td>把光符所在字符替换成 c .</td>
</tr>
<tr>
<td>R</td>
<td>覆盖本行内容。</td>
</tr>
<tr>
<td>u</td>
<td>恢复上一次的修改。</td>
</tr>
<tr>
<td>~</td>
<td>改变光标所在出字符的大小写。</td>
</tr>
<tr>
<td>.</td>
<td>重复上一个操作。</td>
</tr>
<tr>
<td><strong><span>&lt;&lt; </span></strong></td>
<td>把当前行移到左边。</td>
</tr>
<tr>
<td><strong><span>&gt;&gt; </span></strong></td>
<td>把当前行移到右边。</td>
</tr>
<tr>
<td rowspan="10">搜索 / 替换</td>
<td>/pattern</td>
<td>从光标开始处向文件尾搜索 pattern</td>
</tr>
<tr>
<td>?pattern</td>
<td>从光标开始处向文件首搜索 pattern</td>
</tr>
<tr>
<td>n</td>
<td>在同一方向重复上一次搜索命令</td>
</tr>
<tr>
<td>N</td>
<td>在反方向上重复上一次搜索命令</td>
</tr>
<tr>
<td>s/p1/p2/g</td>
<td>将当前行中所有 p1 均用 p2 替代</td>
</tr>
<tr>
<td>n1,n2s/p1/p2/g</td>
<td>将第 n1 至 n2 行中所有 p1 均用 p2 替代</td>
</tr>
<tr>
<td>g/p1/s//p2/g</td>
<td>将文件中所有 p1 均用 p2 替换</td>
</tr>
<tr>
<td>/pattern/+number</td>
<td>将光标停在包含 pattern 的行后面第 number 行上。</td>
</tr>
<tr>
<td>/pattern/-number</td>
<td>将光标停在包含 pattern 的行前面第 number 行上。</td>
</tr>
<tr>
<td>%</td>
<td>移到匹配的 “ （） ” 或 “{}” 上。</td>
</tr>
<tr>
<td rowspan="4">改变屏幕显示</td>
<td>z-</td>
<td>把当前行作为屏幕的最后一行，并重新显示屏幕。</td>
</tr>
<tr>
<td>z.</td>
<td>把当前行作为屏幕的中间一行，并重新显示屏幕。</td>
</tr>
<tr>
<td>Ctrl+l</td>
<td>重新显示屏幕当前内容。</td>
</tr>
<tr>
<td>/pattern/z-</td>
<td>寻找 pattern 的下一个位置，并把所在行设为屏幕的最后一行。</td>
</tr>
<tr>
<td rowspan="7">拷贝文本</td>
<td>p</td>
<td>将缓冲区内容取到光标所在行的下面一行。</td>
</tr>
<tr>
<td>P</td>
<td>将缓冲区内容取到光标所在行的上面一行。</td>
</tr>
<tr>
<td>“bd</td>
<td>将文本删除至有名缓冲区 b .</td>
</tr>
<tr>
<td>“bp</td>
<td>张贴有名缓冲区 b 中内容。</td>
</tr>
<tr>
<td>yy</td>
<td>把当前行放入缓冲区。</td>
</tr>
<tr>
<td>Y</td>
<td>把当前行放入缓冲区。</td>
</tr>
<tr>
<td>Yw</td>
<td>把光标所在的单词放入缓冲区</td>
</tr>
<tr>
<td rowspan="11">选项设置</td>
<td>all</td>
<td>列出所有选项设置情况</td>
</tr>
<tr>
<td>term</td>
<td>设置终端类型</td>
</tr>
<tr>
<td>ignorance</td>
<td>在搜索中忽略大小写</td>
</tr>
<tr>
<td>list</td>
<td>显示制表位 (Ctrl+I) 和行尾标志（ $)</td>
</tr>
<tr>
<td>number</td>
<td>显示行号</td>
</tr>
<tr>
<td>report</td>
<td>显示由面向行的命令修改过的数目</td>
</tr>
<tr>
<td>terse</td>
<td>显示简短的警告信息</td>
</tr>
<tr>
<td>warn</td>
<td>在转到别的文件时若没保存当前文件则显示 NO write 信息</td>
</tr>
<tr>
<td>nomagic</td>
<td>允许在搜索模式中，使用前面不带 “\” 的特殊字符</td>
</tr>
<tr>
<td>nowrapscan</td>
<td>禁止 vi 在搜索到达文件两端时，又从另一端开始</td>
</tr>
<tr>
<td>mesg</td>
<td>允许 vi 显示其他用户用 write 写到自己终端上的信息</td>
</tr>
<tr>
<td></td>
<td>n1,n2 co n3</td>
<td>将 n1 行到 n2 行之间的内容拷贝到第 n3 行下</td>
</tr>
<tr>
<td></td>
<td>n1,n2 m n3</td>
<td>将 n1 行到 n2 行之间的内容移至到第 n3 行下</td>
</tr>
<tr>
<td></td>
<td>n1,n2 d</td>
<td>将 n1 行到 n2 行之间的内容删除</td>
</tr>
<tr>
<td></td>
<td>x</td>
<td>保存当前文件并退出</td>
</tr>
<tr>
<td></td>
<td>w</td>
<td>回写修改后的文件。</td>
</tr>
<tr>
<td></td>
<td>w filename</td>
<td>当 filename 不存在时，把修改后的文件存为文件 filename , 当文件 filename 存在时，报错。</td>
</tr>
<tr>
<td></td>
<td>!w filename</td>
<td>如果文件 filename 存在时，把修改后的文件保存为文件 filename .</td>
</tr>
<tr>
<td rowspan="2">多文件切换</td>
<td>n</td>
<td>开始编辑 vi 激活的文件列表中的下一个文件。</td>
</tr>
<tr>
<td>n filenames</td>
<td>指定将被编辑的新的文件列表。</td>
</tr>
<tr>
<td rowspan="5">文件间切换</td>
<td>e filename</td>
<td>使用 filename 激活 vi （在 vi 中装入另一个文件 filename ）。</td>
</tr>
<tr>
<td>e!</td>
<td>重新装入当前文件，若当前文件有改动，则丢弃以前的改动。</td>
</tr>
<tr>
<td>e+filename</td>
<td>使用 filename 激活 vi , 并从文件尾部开始编辑。</td>
</tr>
<tr>
<td>e+number filename</td>
<td>使用 filename 激活 vi , 并在第 number 行开始编辑。</td>
</tr>
<tr>
<td>e#</td>
<td>开始编辑另外一个文件。</td>
</tr>
<tr>
<td rowspan="3">加入其他文件</td>
<td>r filename</td>
<td>读取 filename 文件，并将其内容加到当前文件后。</td>
</tr>
<tr>
<td>r ! Command</td>
<td>执行 command 文件，并将其输出加到当前文件后。</td>
</tr>
<tr>
<td>n1,n2 w!command</td>
<td>将文件中 n1 行至 n2 行的内容作为 command 的输入并执行之，若不指定 n1 ， n2 ，则表示将整个文件内容作为 command 的输入</td>
</tr>
<tr>
<td rowspan="7">其他命令</td>
<td>ctrl+g</td>
<td>取得正在编辑文件的有关信息。</td>
</tr>
<tr>
<td>:sh</td>
<td>启动 sh ，从 sh 中返回可用 exit 或 ctrl+d .</td>
</tr>
<tr>
<td>:! Command</td>
<td>执行命令 command .</td>
</tr>
<tr>
<td>!!</td>
<td>重新执行上次的 :! Command 子命令。</td>
</tr>
<tr>
<td>q</td>
<td>退出 vi</td>
</tr>
<tr>
<td>q!</td>
<td>不保存文件并退出 vi</td>
</tr>
<tr>
<td>ZZ 或 :wq</td>
<td>保存对文件的修改并退出 vi .</td>
</tr>
<tr>
<td rowspan="5">寄存器操作</td>
<td>&#8220;?nyy</td>
<td>将当前行及其下 n 行的内容保存到寄存器？中，其中 ? 为一个字母， n 为一个数字</td>
</tr>
<tr>
<td>&#8220;?nyw</td>
<td>将当前行及其下 n 个字保存到寄存器？中，其中 <span>? </span><span>为一个字母， n 为一个数字 </span></td>
</tr>
<tr>
<td>&#8220;?nyl</td>
<td>将当前行及其下 n 个字符保存到寄存器？中，其中 ? 为一个字母， n 为一个数字</td>
</tr>
<tr>
<td>&#8220;?p</td>
<td>取出寄存器？中的内容并将其放到光标位置处。这里？可以是一个字母，也可以是一个数字</td>
</tr>
<tr>
<td>ndd</td>
<td>将当前行及其下共 n 行文本删除，并将所删内容放到 1 号删除寄存器中。</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>vi filename</td>
<td>打开或新建文件，并将光标置于第一行首</td>
</tr>
<tr>
<td></td>
<td>vi +n filename</td>
<td>打开文件，并将光标置于第 n 行首</td>
</tr>
<tr>
<td></td>
<td>vi + filename</td>
<td>打开文件，并将光标置于最后一行首</td>
</tr>
<tr>
<td></td>
<td>vi +/pattern filename</td>
<td>打开文件，并将光标置于第一个与 pattern 匹配的串处</td>
</tr>
<tr>
<td></td>
<td>vi -r filename</td>
<td>在上次正用 vi 编辑时发生系统崩溃，恢复 filename</td>
</tr>
<tr>
<td></td>
<td>vi filename&#8230;.filename</td>
<td>打开多个文件，依次进行编辑</td>
</tr>
<tr>
<td></td>
<td>vi -c sub-command</td>
<td>在对指定的文件编辑前，先执行指定的命令 sub-command .</td>
</tr>
<tr>
<td></td>
<td>vi -R</td>
<td>将指定的文件以只读的方式放入编辑器中，这样不会保存对文件的任何修改。</td>
</tr>
<tr>
<td></td>
<td>vi -y number</td>
<td>将编辑窗口的大小设为number行。</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/vi-%e5%91%bd%e4%bb%a4%e5%8f%82%e8%80%83/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>居中的文字块</title>
		<link>http://www.qbaty.org/blog/center-text-block/</link>
		<comments>http://www.qbaty.org/blog/center-text-block/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 02:15:56 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[inline-block]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=192</guid>
		<description><![CDATA[最近微博的工作开始多了起来，所以更新blog的速度慢了下来，最近干做关于围裙的项目，碰到有一个地方 上图的文字应该是居中的还是居左的？如果是居左的，假如文字只有1-3个岂不是很难看？ 那么如何使的他自适应宽度然后又居中呢？光用CSS能做到吗？ 答案是肯定的： 当然文字仍然是 这里无法避免的多套了一层div 结构是这样的 &#60;li&#62; &#60;a href=&#34;#&#34;&#62;&#60;img src=&#34;../../images/common/pic/50.gif&#34; title=&#34;&#34; class=&#34;picborder_r&#34;/&#62;&#60;/a&#62; &#60;div class=&#34;name&#34;&#62;&#60;a href=&#34;#&#34;&#62;狼&#60;/a&#62;&#60;/div&#62; &#60;div class=&#34;gray&#34;&#62;(2196人)&#60;/div&#62; &#60;/li&#62; li&#123; float:left; display:inline; width:56px; padding:3px 2px 5px 4px; margin:0 1px 0 2px; text-align:center; line-height:14px; &#125; .name&#123; line-height:15px; padding:3px 3px 0; display:inline-block; text-align:left; &#125; .name&#123; *display:inline; &#125; .name a&#123; text-align:left; &#125; 我在li上加了text-aligin:center; 那么li内的行内元素肯定是居中的，现在就是如何让块级元素div有具有行内元素的属性呢？ display:inline-block; 这个能解决标准浏览器的问题，想FF 因为display:inline-block;在IE是不起作用的，所以现在必须让IE6，7支持这个属性 Google下能发现 [...]]]></description>
			<content:encoded><![CDATA[<p>最近微博的工作开始多了起来，所以更新blog的速度慢了下来，最近干做关于围裙的项目，碰到有一个地方<br />
<img src="http://www.qbaty.org/blog/wp-content/uploads/mb.jpg" alt="列子" title="mb" width="218" height="360" class="aligncenter size-full wp-image-196" /><br />
上图的文字应该是居中的还是居左的？如果是居左的，假如文字只有1-3个岂不是很难看？<br />
<span id="more-192"></span><br />
那么如何使的他自适应宽度然后又居中呢？光用CSS能做到吗？<br />
答案是肯定的：<br />
<img src="http://www.qbaty.org/blog/wp-content/uploads/d.jpg" alt="" title="例子" width="208" height="373" class="aligncenter size-full wp-image-197" /></p>
<p>当然文字仍然是<br />
这里无法避免的多套了一层div<br />
结构是这样的</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;li&gt;
     &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;../../images/common/pic/50.gif&quot; title=&quot;&quot; class=&quot;picborder_r&quot;/&gt;&lt;/a&gt;
     &lt;div class=&quot;name&quot;&gt;&lt;a href=&quot;#&quot;&gt;狼&lt;/a&gt;&lt;/div&gt;
     &lt;div class=&quot;gray&quot;&gt;(2196人)&lt;/div&gt;
&lt;/li&gt;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"> li<span style="color: #00AA00;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span><span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span>
        <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">inline</span><span style="color: #00AA00;">;</span>
        <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">56px</span><span style="color: #00AA00;">;</span>
        <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">3px</span> <span style="color: #933;">2px</span> <span style="color: #933;">5px</span> <span style="color: #933;">4px</span><span style="color: #00AA00;">;</span>
        <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span> <span style="color: #933;">1px</span> <span style="color: #cc66cc;">0</span> <span style="color: #933;">2px</span><span style="color: #00AA00;">;</span>
        <span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span><span style="color: #993333;">center</span><span style="color: #00AA00;">;</span>
        <span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span><span style="color: #933;">14px</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span>
.name<span style="color: #00AA00;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span><span style="color: #933;">15px</span><span style="color: #00AA00;">;</span>
        <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">3px</span> <span style="color: #933;">3px</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span> 
        <span style="color: #000000; font-weight: bold;">display</span><span style="color: #3333ff;">:inline-</span>block<span style="color: #00AA00;">;</span> 
        <span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span><span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
.name<span style="color: #00AA00;">&#123;</span>
        <span style="color: #00AA00;">*</span><span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">inline</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.name</span> a<span style="color: #00AA00;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span><span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>我在li上加了text-aligin:center;<br />
那么li内的行内元素肯定是居中的，现在就是如何让块级元素div有具有行内元素的属性呢？<br />
display:inline-block;<br />
这个能解决标准浏览器的问题，想FF<br />
因为display:inline-block;在IE是不起作用的，所以现在必须让IE6，7支持这个属性<br />
Google下能发现<br />
要解决IE6下inline-block失效的办法，可以在定义元素<br />
<code><br />
.name{display:inline-block}<br />
.name{display:inline}<br />
</code><br />
这样可以使得IE6，7起作用<br />
而当块级元素具有行内元素的特征时，我们之需要在其父元素上定义text-align:center;在本元素上定义text-align:left;就能达到以上的效果了<br />
plus:</p>
<p>另外发现inline-block这个属性对于而且只对于IE认为的原生行内元素能起作用的<br />
也就是说,即便是把p或是div设置inline成行内了，inline-block在IE下对他仍然不起作用，因为他们是原生的块级元素<br />
所以只需要把上面的div换成strong,span之类的，不用hack也能使得IE下没问题<br />
但是如果需要使得原生块级元素对inline-block在IE下生效，只能用hack</p>
<p>怿飞的这篇文章详细的解释了inline-block<br />
<a href="http://www.planabc.net/2008/04/08/cross_browser_support_for_inline-block_styling/">模拟兼容性的 inline-block 属性 </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/center-text-block/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>canvas学习笔记（三）</title>
		<link>http://www.qbaty.org/blog/learn-canvas-step3/</link>
		<comments>http://www.qbaty.org/blog/learn-canvas-step3/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 15:49:25 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=170</guid>
		<description><![CDATA[现在来看看用canvas来绘制一张已经存在的图片 var canvas = document.getElementById('example2'); var ctx2 = canvas.getContext('2d'); var img = new Image(); img.onload = function(){ canvas.width = img.width; canvas.height = img.height; ctx2.drawImage(img,0,0); } img.src = "img.jpg"; ctx2.drawImage(img,0,0) 是在画布(0,0)的位置上画出img.jpg这张图像，当img没有完全载入的时候，drawImage已经执行会导致后面的脚本全部停止运行，所以给了img一个onload事件来保证drawImage的时候已经完全载入了img。 &#60; !DOCTYPE html&#62; &#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62; &#60;head&#62; &#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=utf-8&#34; /&#62; &#60;title&#62;Untitled Document&#60;/title&#62; &#60;/head&#62; &#60;style type=&#34;text/css&#34;&#62; canvas{ border:1px solid #000; display:block; margin:0 auto; } &#60;/style&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>现在来看看用canvas来绘制一张已经存在的图片<br />
<code><br />
	var canvas = document.getElementById('example2');<br />
	var ctx2 = canvas.getContext('2d');<br />
	var img = new Image();<br />
	img.onload = function(){<br />
		canvas.width = img.width;<br />
		canvas.height = img.height;<br />
		ctx2.drawImage(img,0,0);<br />
	}<br />
	img.src = "img.jpg";<br />
</code><br />
ctx2.drawImage(img,0,0) 是在画布(0,0)的位置上画出img.jpg这张图像，当img没有完全载入的时候，drawImage已经执行会导致后面的脚本全部停止运行，所以给了img一个onload事件来保证drawImage的时候已经完全载入了img。<br />
<span id="more-170"></span></p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt; !DOCTYPE html&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;
&lt;style type=&quot;text/css&quot;&gt;
canvas{
	border:1px solid #000;
	display:block;
	margin:0 auto;
}
&lt;/style&gt;
&lt;body&gt;
&lt;a href=&quot;javascript:rotate('left')&quot;&gt;向左转&lt;/a&gt;&lt;a href=&quot;javascript:rotate('right')&quot;&gt;像右转&lt;/a&gt;&lt;a href=&quot;&quot;&gt;&lt;/a&gt;
&lt;canvas id=&quot;example2&quot; width=&quot;200&quot; height=&quot;200&quot;&gt;
This text is displayed if your browser does not support HTML5 Canvas.
&lt;/canvas&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	var canvas = document.getElementById('example2');
	var ctx2 = canvas.getContext('2d');
	var img = new Image();
	img.onload = function(){
		canvas.width = img.width;
		canvas.height = img.height;
		ctx2.drawImage(img,0,0);
	}
	img.src = &quot;img.jpg&quot;;
	function rotate(direct){
		var temp;
		var type = canvas.getAttribute(&quot;type&quot;);
		temp = canvas.height;
		canvas.height = canvas.width;
		canvas.width = temp;
		if(direct == &quot;right&quot;){
			switch(type){
				case null:
					ctx2.translate(canvas.width,0);
					ctx2.rotate(Math.PI/2);
					canvas.setAttribute(&quot;type&quot;,1);
					break;
				case &quot;0&quot;:
					ctx2.translate(canvas.width,0);
					ctx2.rotate(Math.PI/2);
					canvas.setAttribute(&quot;type&quot;,1);
					break;
				case &quot;1&quot;:
					ctx2.translate(canvas.width,canvas.height);
					ctx2.rotate(Math.PI);
					canvas.setAttribute(&quot;type&quot;,2);
					break;
				case &quot;2&quot;:
					ctx2.translate(0,canvas.height);
					ctx2.rotate(Math.PI*3/2);
					canvas.setAttribute(&quot;type&quot;,3);
					break;
				case &quot;3&quot;:
					ctx2.translate(0,0);
					ctx2.rotate(Math.PI*2);
					canvas.setAttribute(&quot;type&quot;,0);
					break;
			}
		}else if(direct == &quot;left&quot;){
			switch(type){
				case null:
					ctx2.translate(0,canvas.height);
					ctx2.rotate(Math.PI*3/2);
					canvas.setAttribute(&quot;type&quot;,3);
					break;
				case &quot;0&quot;:
					ctx2.translate(0,canvas.height);
					ctx2.rotate(Math.PI*3/2);
					canvas.setAttribute(&quot;type&quot;,3);
					break;
				case &quot;1&quot;:
					ctx2.translate(0,0);
					ctx2.rotate(Math.PI*2);
					canvas.setAttribute(&quot;type&quot;,0);
					break;
				case &quot;2&quot;:
					ctx2.translate(canvas.width,0);
					ctx2.rotate(Math.PI/2);
					canvas.setAttribute(&quot;type&quot;,1);
					break;
				case &quot;3&quot;:
					ctx2.translate(canvas.width,canvas.height);
					ctx2.rotate(Math.PI);
					canvas.setAttribute(&quot;type&quot;,2);
					break;
			}
		}
		ctx2.drawImage(img,0,0);
	}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>上面是我写的一个canvas旋转图片的例子(只是粗略的实现了功能)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/learn-canvas-step3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>前端与其他岗位的协作</title>
		<link>http://www.qbaty.org/blog/front-end-cooperate-with-others/</link>
		<comments>http://www.qbaty.org/blog/front-end-cooperate-with-others/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 05:43:28 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[Web标准化]]></category>
		<category><![CDATA[杂谈]]></category>
		<category><![CDATA[w3ctech.com]]></category>
		<category><![CDATA[web标准化交流]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=173</guid>
		<description><![CDATA[本周六在北京腾讯举行的 WEB标准化交流会 我整场负责拍照 winter 分享的PPT 和 月影 说的关于协作，给我印象很深刻，里面有很多观点我很认同。 会上没有发言，我就在这里谈谈我的看法吧： 作为一位前端开发工程师，负责的不仅仅是页面HTML的构建，也不仅仅是页面所需要的js交互,或是页面动态的效果。 在我自己的认识中，我觉得前端开发工程师责任重大，一个项目中，需要参与的流程很多。从一个项目初期的策划，技术的评测就需要前端开发工程师参与，在考虑到用户操作习惯，页面性能，再包括将来的页面维护，升级，修改，可扩展来制定页面部署，页面结构，以及开发模式再到后期的页面优化。 和设计，产品经理来沟通整个的页面，设计风格，用户行为习惯，页面表现方式，交互方式等等. 和产品经理，后台工程师沟通整个页面的功能，交互方式，性能优化，页面部署，进行一些可维护升级扩展的计划。 前端是承上启下的，所以在协作中是非常关键的一环。 现在由团队完成的项目来看，设计可能是思绪比较自由的一方，产品是需求提出方，后台工程师是数据提供方，前端是表现方，所以所有的这些都是通过前端来展现给用户或是和用户互动。在这样的团队协作里，我觉得最重要的实际上是，把目标明确， 这个目标是团队目标，也就是这个团队在做一件什么事情，需要达到什么效果。在一个团队里如果大家方向也就是目标一致，很多协作沟通的问题都会变的很流畅，相互也会更易于理解。每个人都出于一个项目的全局观，来思考，来做事，再加上换位思考，这个team 协作应该会变得很愉快。 在目标明确的项目中，需求的变更仍然不可避免，而这种情况下需求的变更也会变的可以理解。 当然很多公司很难要求每个人都有这种项目的全局观，至少我在ZOL的时候就发现不是人人都有。这个时候可能就会有很多口角，争执，不配合，当然经历过激烈的讨论后，还是可以达到目的的，不过效率和项目满意度都会打些折扣。 我觉得新浪cdc团队在项目协作上，还是相当成熟，这可能更像一种文化 一个项目的策划，在分配到各个人之前，实际都是由team leader们去敲定技术细节，这里会有设计leader,前端leader,重构leader，后端leader 可能还有总监 然后可能每个人会分析下项目的可选方法，也会说出自己的想法，定下产品大的框架，以及大的技术方向。包括否决一些不能实现或是实现代价很高回报很低的方案，最终确定一个方案，然后再考虑可能出现的一些问题，讨论，重构需要注意的，前端需要注意的，设计如何和重构配合之类的。这个会完了之后，各个team leader会回来给team开会，把具体的工作，注意事项，包括定下方案的实现可行性，可选方案都会传达。这样一般在重构工程师到手上的活，都是省掉很多不必要的沟通的，认为清晰，明了。 从这点看，相比百度的自下而上的推动文化，新浪有点不一样，新浪更像是由中间来推动。]]></description>
			<content:encoded><![CDATA[<p>本周六在北京腾讯举行的 WEB标准化交流会 我整场负责拍照<br />
winter 分享的PPT 和 月影 说的关于协作，给我印象很深刻，里面有很多观点我很认同。<br />
会上没有发言，我就在这里谈谈我的看法吧：<br />
作为一位前端开发工程师，负责的不仅仅是页面HTML的构建，也不仅仅是页面所需要的js交互,或是页面动态的效果。<br />
在我自己的认识中，我觉得前端开发工程师责任重大，一个项目中，需要参与的流程很多。从一个项目初期的策划，技术的评测就需要前端开发工程师参与，在考虑到用户操作习惯，页面性能，再包括将来的页面维护，升级，修改，可扩展来制定页面部署，页面结构，以及开发模式再到后期的页面优化。</p>
<p>和设计，产品经理来沟通整个的页面，设计风格，用户行为习惯，页面表现方式，交互方式等等.<br />
和产品经理，后台工程师沟通整个页面的功能，交互方式，性能优化，页面部署，进行一些可维护升级扩展的计划。</p>
<p>前端是承上启下的，所以在协作中是非常关键的一环。<br />
<span id="more-173"></span><br />
现在由团队完成的项目来看，设计可能是思绪比较自由的一方，产品是需求提出方，后台工程师是数据提供方，前端是表现方，所以所有的这些都是通过前端来展现给用户或是和用户互动。在这样的团队协作里，我觉得最重要的实际上是，把目标明确，<br />
这个目标是团队目标，也就是这个团队在做一件什么事情，需要达到什么效果。在一个团队里如果大家方向也就是目标一致，很多协作沟通的问题都会变的很流畅，相互也会更易于理解。每个人都出于一个项目的全局观，来思考，来做事，再加上换位思考，这个team 协作应该会变得很愉快。<br />
在目标明确的项目中，需求的变更仍然不可避免，而这种情况下需求的变更也会变的可以理解。</p>
<p>当然很多公司很难要求每个人都有这种项目的全局观，至少我在ZOL的时候就发现不是人人都有。这个时候可能就会有很多口角，争执，不配合，当然经历过激烈的讨论后，还是可以达到目的的，不过效率和项目满意度都会打些折扣。</p>
<p>我觉得新浪cdc团队在项目协作上，还是相当成熟，这可能更像一种文化<br />
一个项目的策划，在分配到各个人之前，实际都是由team leader们去敲定技术细节，这里会有设计leader,前端leader,重构leader，后端leader 可能还有总监 然后可能每个人会分析下项目的可选方法，也会说出自己的想法，定下产品大的框架，以及大的技术方向。包括否决一些不能实现或是实现代价很高回报很低的方案，最终确定一个方案，然后再考虑可能出现的一些问题，讨论，重构需要注意的，前端需要注意的，设计如何和重构配合之类的。这个会完了之后，各个team leader会回来给team开会，把具体的工作，注意事项，包括定下方案的实现可行性，可选方案都会传达。这样一般在重构工程师到手上的活，都是省掉很多不必要的沟通的，认为清晰，明了。<br />
从这点看，相比百度的自下而上的推动文化，新浪有点不一样，新浪更像是由中间来推动。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/front-end-cooperate-with-others/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>canvas 学习笔记（二）</title>
		<link>http://www.qbaty.org/blog/canvas-%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e4%ba%8c%ef%bc%89/</link>
		<comments>http://www.qbaty.org/blog/canvas-%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e4%ba%8c%ef%bc%89/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 08:04:49 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[学习笔记]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=126</guid>
		<description><![CDATA[实现以上图形的代码如下 var canvas = document.getElementById&#40;&#34;canvas&#34;&#41;; var ctx = canvas.getContext&#40;&#34;2d&#34;&#41;; //获得getContext的引用 ctx.beginPath&#40;&#41;; ctx.arc&#40;150,150,100,0,Math.PI*2,true&#41;; //外面的圆 ctx.strokeStyle = &#34;#000&#34;; //设置圆的颜色 ctx.stroke&#40;&#41;; //画出这个圆 &#160; ctx.beginPath&#40;&#41;; //开始另一条路径 ctx.lineWidth = 4; ctx.moveTo&#40;120,120&#41;; ctx.lineTo&#40;90,120&#41;; ctx.moveTo&#40;180,120&#41;; ctx.lineTo&#40;210,120&#41;; ctx.stroke&#40;&#41;; &#160; ctx.beginPath&#40;&#41;; ctx.strokeStyle = &#34;#999&#34;; ctx.lineWidth = 20; ctx.moveTo&#40;105,122&#41;; ctx.lineTo&#40;105,200&#41;; ctx.moveTo&#40;195,122&#41;; ctx.lineTo&#40;195,200&#41;; ctx.stroke&#40;&#41;; &#160; ctx.beginPath&#40;&#41;; ctx.lineWidth = 4; ctx.strokeStyle = &#34;#000&#34;; ctx.moveTo&#40;120,220&#41;; ctx.bezierCurveTo&#40;130,200,150,240,180,220&#41;; ctx.stroke&#40;&#41;; 再画一个囧吧 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-159" title="未命名" src="http://www.qbaty.org/blog/wp-content/uploads/未命名2.jpg" alt="" width="308" height="307" /><br />
实现以上图形的代码如下<br />
<span id="more-126"></span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> canvas <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;canvas&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> ctx <span style="color: #339933;">=</span> canvas.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;2d&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//获得getContext的引用</span>
ctx.<span style="color: #660066;">beginPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">arc</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">150</span><span style="color: #339933;">,</span><span style="color: #CC0000;">150</span><span style="color: #339933;">,</span><span style="color: #CC0000;">100</span><span style="color: #339933;">,</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>Math.<span style="color: #660066;">PI</span><span style="color: #339933;">*</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//外面的圆</span>
ctx.<span style="color: #660066;">strokeStyle</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#000&quot;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//设置圆的颜色</span>
ctx.<span style="color: #660066;">stroke</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//画出这个圆</span>
&nbsp;
ctx.<span style="color: #660066;">beginPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//开始另一条路径</span>
ctx.<span style="color: #660066;">lineWidth</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">4</span><span style="color: #339933;">;</span> 
ctx.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">120</span><span style="color: #339933;">,</span><span style="color: #CC0000;">120</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">lineTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">90</span><span style="color: #339933;">,</span><span style="color: #CC0000;">120</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">180</span><span style="color: #339933;">,</span><span style="color: #CC0000;">120</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">lineTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">210</span><span style="color: #339933;">,</span><span style="color: #CC0000;">120</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">stroke</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
ctx.<span style="color: #660066;">beginPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">strokeStyle</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#999&quot;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">lineWidth</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">20</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">105</span><span style="color: #339933;">,</span><span style="color: #CC0000;">122</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">lineTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">105</span><span style="color: #339933;">,</span><span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">195</span><span style="color: #339933;">,</span><span style="color: #CC0000;">122</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">lineTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">195</span><span style="color: #339933;">,</span><span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">stroke</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
ctx.<span style="color: #660066;">beginPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">lineWidth</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">4</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">strokeStyle</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#000&quot;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">120</span><span style="color: #339933;">,</span><span style="color: #CC0000;">220</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">bezierCurveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">130</span><span style="color: #339933;">,</span><span style="color: #CC0000;">200</span><span style="color: #339933;">,</span><span style="color: #CC0000;">150</span><span style="color: #339933;">,</span><span style="color: #CC0000;">240</span><span style="color: #339933;">,</span><span style="color: #CC0000;">180</span><span style="color: #339933;">,</span><span style="color: #CC0000;">220</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">stroke</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>再画一个囧吧</p>
<p><img src="http://www.qbaty.org/blog/wp-content/uploads/未命名3.jpg" alt="" title="未命名" width="74" height="84" class="aligncenter size-full wp-image-162" /></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> canvas <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;canvas&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> ctx <span style="color: #339933;">=</span> canvas.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;2d&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">beginPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">rect</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">10</span><span style="color: #339933;">,</span><span style="color: #CC0000;">10</span><span style="color: #339933;">,</span><span style="color: #CC0000;">60</span><span style="color: #339933;">,</span><span style="color: #CC0000;">70</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">30</span><span style="color: #339933;">,</span><span style="color: #CC0000;">30</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">lineTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">20</span><span style="color: #339933;">,</span><span style="color: #CC0000;">40</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">50</span><span style="color: #339933;">,</span><span style="color: #CC0000;">30</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">lineTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">60</span><span style="color: #339933;">,</span><span style="color: #CC0000;">40</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">rect</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">30</span><span style="color: #339933;">,</span><span style="color: #CC0000;">50</span><span style="color: #339933;">,</span><span style="color: #CC0000;">20</span><span style="color: #339933;">,</span><span style="color: #CC0000;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">stroke</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/canvas-%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e4%ba%8c%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>canvas 学习笔记（一）</title>
		<link>http://www.qbaty.org/blog/learn-canvas-1/</link>
		<comments>http://www.qbaty.org/blog/learn-canvas-1/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 11:38:38 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[canvas]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=103</guid>
		<description><![CDATA[canvas元素 翻译过来是 画布，帆布 最早在苹果浏览器中引进，逐渐普及成HTML5的 标准Element 这个元素的具体参见可以看 这里 通过canvas我们可以在浏览器中画出很多不规则或是规则的图形 如何画呢？ 在HTML5的标准里看到DOM接口的描述 canvas元素只有2个属性，分别是height和width toDataURL： 这个方法可以返回一个URL形式的在canvas 画布中的图片数据，这个图片数据是64位编码的。 第一个参数指定他的返回图片格式(e.g. PNG or JPEG) 默认情况下是 image/png 还可以是 image/jpeg， 第二个参数如果指定的话，则是生成图片的质量，值在（0-1）之间 getContext： 这个方法可以返回一个包含绘图API的对象，如果contextId不被支持则会返回空，目前常用的是&#8217;2d&#8217;内容 ，今后有可能会加入OpenGL ES 为基础的3D 内容。 要想在canvas上画东西，必须通过getContext这个方法获得对context对象的引用 var canvas = document.getElementById&#40;&#34;canvas&#34;&#41;; var ctx = canvas.getContext&#40;contextId&#41;; 方形 当我们获得了context的引用我们就可以开始作画了 var canvas = document.getElementById&#40;&#34;canvas&#34;&#41;; var ctx = canvas.getContext&#40;'2d'&#41;; ctx.translate&#40;10,10&#41;; ctx.fillStyle = &#34;#C00&#34;; ctx.fillRect&#40;0,0,100,100&#41;;//填充一个方形 fillRect&#40;x,y,width,height&#41; : [...]]]></description>
			<content:encoded><![CDATA[<p>canvas元素 翻译过来是 画布，帆布<br />
最早在苹果浏览器中引进，逐渐普及成HTML5的 标准Element 这个元素的具体参见可以看<br />
<a href="http://www.w3.org/TR/2010/WD-html5-20100304/the-canvas-element.html#the-canvas-element">这里</a><br />
通过canvas我们可以在浏览器中画出很多不规则或是规则的图形<br />
如何画呢？<br />
在HTML5的标准里看到DOM接口的描述<br />
<img class="aligncenter size-full wp-image-106" title="h1" src="http://www.qbaty.org/blog/wp-content/uploads/h1-e1269255893352.jpg" alt="" width="577" height="152" /><br />
<span id="more-103"></span></p>
<p>canvas元素只有2个属性，分别是<span style="color: #000000;"><strong>height</strong></span>和<span style="color: #000000;"><strong>width</strong></span></p>
<p><strong>toDataURL：</strong><br />
这个方法可以返回一个URL形式的在canvas 画布中的图片数据，这个图片数据是64位编码的。<br />
第一个参数指定他的返回图片格式(e.g. PNG or JPEG)<br />
默认情况下是 image/png 还可以是 image/jpeg， 第二个参数如果指定的话，则是生成图片的质量，值在（0-1）之间</p>
<p><strong>getContext：</strong><br />
这个方法可以返回一个包含绘图API的对象，如果contextId不被支持则会返回空，目前常用的是&#8217;2d&#8217;内容 ，今后有可能会加入OpenGL ES 为基础的3D 内容。</p>
<p>要想在canvas上画东西，必须通过getContext这个方法获得对context对象的引用</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> canvas <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;canvas&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> ctx <span style="color: #339933;">=</span> canvas.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#40;</span>contextId<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>方形</strong><br />
当我们获得了context的引用我们就可以开始作画了</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> canvas <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;canvas&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> ctx <span style="color: #339933;">=</span> canvas.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'2d'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">10</span><span style="color: #339933;">,</span><span style="color: #CC0000;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">fillStyle</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#C00&quot;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">fillRect</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">100</span><span style="color: #339933;">,</span><span style="color: #CC0000;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">//填充一个方形</span></pre></div></div>

<p><img class="aligncenter size-full wp-image-139" title="未命名" src="http://www.qbaty.org/blog/wp-content/uploads/未命名1.jpg" alt="" width="308" height="162" /></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">fillRect<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span>y<span style="color: #339933;">,</span>width<span style="color: #339933;">,</span>height<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> Draws a filled rectangle <span style="color: #006600; font-style: italic;">//填充一个方形区域</span>
strokeRect<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span>y<span style="color: #339933;">,</span>width<span style="color: #339933;">,</span>height<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> Draws a rectangular outline <span style="color: #006600; font-style: italic;">//画一个方形区域的轮廓</span>
clearRect<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span>y<span style="color: #339933;">,</span>width<span style="color: #339933;">,</span>height<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> Clears the specified area and makes it fully transparent <span style="color: #006600; font-style: italic;">//清除一个方形区域</span></pre></div></div>

<p>canvas 只支持方形，所有的其他形状都是有一条或是多条路径所创建组合的<br />
就是用到是路径的api了</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//path API</span>
<span style="color: #000066; font-weight: bold;">void</span> beginPath<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> closePath<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> moveTo<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> lineTo<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> quadraticCurveTo<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float cpx<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float cpy<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float x<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> bezierCurveTo<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float cp1x<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float cp1y<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float cp2x<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float cp2y<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float x<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> arcTo<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x1<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float y1<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float x2<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float y2<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float radius<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> rect<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float y<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float w<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float h<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> arc<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float y<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float radius<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float startAngle<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float endAngle<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> boolean anticlockwise<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> fill<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> stroke<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">void</span> clip<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
boolean isPointInPath<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">in</span> float x<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">in</span> float y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>圆</strong><br />
让我们用路径来画一个圆</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">ctx.<span style="color: #660066;">beginPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">50</span><span style="color: #339933;">,</span><span style="color: #CC0000;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">arc</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">50</span><span style="color: #339933;">,</span><span style="color: #CC0000;">50</span><span style="color: #339933;">,</span><span style="color: #CC0000;">40</span><span style="color: #339933;">,</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>Math.<span style="color: #660066;">PI</span><span style="color: #339933;">*</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">closePath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">fillStyle</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#C00&quot;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">fill</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><img class="aligncenter size-full wp-image-147" title="索引" src="http://www.qbaty.org/blog/wp-content/uploads/索引.png" alt="" width="300" height="150" /><br />
<strong>二次贝塞尔曲线和三次贝塞尔曲线</strong><br />
需要注意的是二次贝塞尔曲线在1.5版本的 firefox 下会有bug 需要转成三次贝塞尔曲线作图<br />
<code><br />
quadraticCurveTo(cp1x, cp1y, x, y) // BROKEN in Firefox 1.5<br />
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)<br />
</code><br />
<img class="size-full wp-image-151 aligncenter" title="Canvas_curves" src="http://www.qbaty.org/blog/wp-content/uploads/Canvas_curves.png" alt="" width="190" height="190" /></p>
<p>bezierCurveTo()这个方法是在画布上画一条 贝塞尔曲线 ，参数 cp1x,cp1y,cp2x,cp2y 的分别表示的是图中的红色的控制点的坐标, x,y 是曲线终点的坐标</p>
<p>关于贝塞尔曲线的知识点<a href="http://zh.wikipedia.org/wiki/%E8%B2%9D%E8%8C%B2%E6%9B%B2%E7%B7%9A">这里</a></p>
<p>用贝塞尔曲线作图</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">ctx.<span style="color: #660066;">beginPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">50</span><span style="color: #339933;">,</span><span style="color: #CC0000;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">bezierCurveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">50</span><span style="color: #339933;">,</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">100</span><span style="color: #339933;">,</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">100</span><span style="color: #339933;">,</span><span style="color: #CC0000;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">100</span><span style="color: #339933;">,</span><span style="color: #CC0000;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">bezierCurveTo</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">100</span><span style="color: #339933;">,</span><span style="color: #CC0000;">100</span><span style="color: #339933;">,</span><span style="color: #CC0000;">150</span><span style="color: #339933;">,</span><span style="color: #CC0000;">100</span><span style="color: #339933;">,</span><span style="color: #CC0000;">150</span><span style="color: #339933;">,</span><span style="color: #CC0000;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">strokeStyle</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#C00&quot;</span><span style="color: #339933;">;</span>
ctx.<span style="color: #660066;">stroke</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><img class="aligncenter size-full wp-image-157" title="曲线" src="http://www.qbaty.org/blog/wp-content/uploads/索引1.png" alt="" width="300" height="150" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/learn-canvas-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>给自己09一个总结吧</title>
		<link>http://www.qbaty.org/blog/%e7%bb%99%e8%87%aa%e5%b7%b109%e4%b8%80%e4%b8%aa%e6%80%bb%e7%bb%93%e5%90%a7/</link>
		<comments>http://www.qbaty.org/blog/%e7%bb%99%e8%87%aa%e5%b7%b109%e4%b8%80%e4%b8%aa%e6%80%bb%e7%bb%93%e5%90%a7/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 04:14:26 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[杂谈]]></category>
		<category><![CDATA[总结]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=91</guid>
		<description><![CDATA[09年年初写的 datagrid（只实现了基本功能）。 09年上半年到北京中关村在线前端开发组，开始写各种各样的js效果和频道页面，焦点图从生硬的切换到圆滑的变换。 期间自己虽然一直坚持写js，但是还是有很多想法没能在代码上实现。 09年下半年参与的yogsoft整个项目的策划，从总结用户需求到写用户，产品需求文档，到自己画产品原型设计图，之间请教过崔凯，ZOL的志东。到完成整 个项目的页面，包含部分优化，以及CSS部署，css sprite的合理整合，包括图片优化处理。 其中接触到很多新的东西 php 的 OOP .htaccess 配置，重定向。 UCD 以用户为中心的设计 ssh-tunnel 在ZOL时候的远程登陆就一直是这种方式。 svn ZOL的前端并没有用到这个，当然1组和2组的开发是在用的，比起这个我和youyee比较喜欢dropbox。 翻墙 平民级别的是用洋葱头和无界，高级一些的是用vpn 和 ssh代理。 bug 无尽的bug,开始能找出一些不是太明显的bug了，速度有待提高。 sl 和 HTML5 CSS3 大概了解了下，感觉还是很不错的 回过头看看发现，其实09年我还真没做什么值得骄傲的东西出来，youyee至少还跟进了他writing的版本，amry也不停跟进他的jssc 想到这些很是惭愧，把这些东西写出来，自己看到时也算是一个自勉。 今年应该要低调许多了，参与的社交活动或是会议也会少一半左右，时间都交给代码和书本吧。]]></description>
			<content:encoded><![CDATA[<p>09年年初写的 datagrid（只实现了基本功能）。<br />
09年上半年到北京中关村在线前端开发组，开始写各种各样的js效果和频道页面，焦点图从生硬的切换到圆滑的变换。<br />
期间自己虽然一直坚持写js，但是还是有很多想法没能在代码上实现。<br />
09年下半年参与的yogsoft整个项目的策划，从总结用户需求到写用户，产品需求文档，到自己画产品原型设计图，之间请教过崔凯，ZOL的志东。到完成整 个项目的页面，包含部分优化，以及CSS部署，css sprite的合理整合，包括图片优化处理。<br />
其中接触到很多新的东西<br />
<span id="more-91"></span><br />
php 的 OOP<br />
.htaccess 配置，重定向。<br />
UCD 以用户为中心的设计<br />
ssh-tunnel 在ZOL时候的远程登陆就一直是这种方式。<br />
svn ZOL的前端并没有用到这个，当然1组和2组的开发是在用的，比起这个我和youyee比较喜欢dropbox。<br />
翻墙 平民级别的是用洋葱头和无界，高级一些的是用vpn 和 ssh代理。<br />
bug 无尽的bug,开始能找出一些不是太明显的bug了，速度有待提高。<br />
sl 和 HTML5 CSS3 大概了解了下，感觉还是很不错的<br />
回过头看看发现，其实09年我还真没做什么值得骄傲的东西出来，youyee至少还跟进了他writing的版本，amry也不停跟进他的jssc<br />
想到这些很是惭愧，把这些东西写出来，自己看到时也算是一个自勉。<br />
今年应该要低调许多了，参与的社交活动或是会议也会少一半左右，时间都交给代码和书本吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/%e7%bb%99%e8%87%aa%e5%b7%b109%e4%b8%80%e4%b8%aa%e6%80%bb%e7%bb%93%e5%90%a7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>如何访问作为命名空间的函数内部变量(译)</title>
		<link>http://www.qbaty.org/blog/%e5%a6%82%e4%bd%95%e8%ae%bf%e9%97%ae%e4%bd%9c%e4%b8%ba%e5%91%bd%e5%90%8d%e7%a9%ba%e9%97%b4%e7%9a%84%e5%87%bd%e6%95%b0%e5%86%85%e9%83%a8%e5%8f%98%e9%87%8f%ef%bc%88%e8%af%91%ef%bc%89/</link>
		<comments>http://www.qbaty.org/blog/%e5%a6%82%e4%bd%95%e8%ae%bf%e9%97%ae%e4%bd%9c%e4%b8%ba%e5%91%bd%e5%90%8d%e7%a9%ba%e9%97%b4%e7%9a%84%e5%87%bd%e6%95%b0%e5%86%85%e9%83%a8%e5%8f%98%e9%87%8f%ef%bc%88%e8%af%91%ef%bc%89/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 07:39:57 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[内部变量]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[命名空间]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=79</guid>
		<description><![CDATA[原文标题：《Functions as Namespaces, and How to Peek Inside》 原文地址：http://www.davidflanagan.com/2009/11/functions-as-na.html 把函数做为命名空间已经是当今javascript编程里非常普遍的了。如果你把你的代码包含在一个函数里，那么你的代码里包含的变量和函数对于包含函数是本地的，或者说是局部的，这样则不会扰乱全局作用域。 var value = &#40;function&#40;&#41; &#123; // Wrapper function creates a local scope or namespace // your code goes here return value; // Export a value from the namespace &#125;&#41;&#40;&#41;&#41;; // Invoke the wrapper function to run your code 例如，现在假设你刚刚用XMLHttpRequest获得了一段字符串形式的javascript代码。你打算去执行这下代码，你可能会想要在一个命名空间里去执行这段代码，这样执行代码的过程中就不会产生全局的变量或是函数。 这很简单，只要在执行前把这段代码包含进一个函数里。在这个情况下，构造函数Function() 比起eval() 更加得心应手。 var code = [...]]]></description>
			<content:encoded><![CDATA[<p>原文标题：《Functions as Namespaces, and How to Peek Inside》<br />
原文地址：http://www.davidflanagan.com/2009/11/functions-as-na.html</p>
<p>把函数做为命名空间已经是当今javascript编程里非常普遍的了。如果你把你的代码包含在一个函数里，那么你的代码里包含的变量和函数对于包含函数是本地的，或者说是局部的，这样则不会扰乱全局作用域。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> value <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  <span style="color: #006600; font-style: italic;">// Wrapper function creates a local scope or namespace</span>
    <span style="color: #006600; font-style: italic;">// your code goes here</span>
    <span style="color: #000066; font-weight: bold;">return</span> value<span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// Export a value from the namespace</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// Invoke the wrapper function to run your code</span></pre></div></div>

<p>例如，现在假设你刚刚用XMLHttpRequest获得了一段字符串形式的javascript代码。你打算去执行这下代码，你可能会想要在一个命名空间里去执行这段代码，这样执行代码的过程中就不会产生全局的变量或是函数。<br />
这很简单，只要在执行前把这段代码包含进一个函数里。在这个情况下，构造函数Function() 比起eval() 更加得心应手。<span id="more-79"></span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> code <span style="color: #339933;">=</span> ....<span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// A string of JS code to evaluate</span>
<span style="color: #003366; font-weight: bold;">var</span> f <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Function</span><span style="color: #009900;">&#40;</span>code<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #006600; font-style: italic;">// Wrap it in a function</span>
f<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    <span style="color: #006600; font-style: italic;">// And run the function</span></pre></div></div>

<p>这样做的一个问题是，函数创造出了一个密封的作用域，我们无法知道里面的值。<br />
下面有一个我刚刚发现的方法。(我肯定肯定还有其他人也想到这种方法，但是我没有看到过任何其他地方出现，或是描述过这样的方法)在你包含你的代码前加上这一句：<br />
return function(s) { return eval(s); };<br />
现在，当你调用这个函数的时候，他将返回一个匿名函数。返回的函数在命名空间的作用域里执行了一个字符串。<br />
所以你可以用他来探入命名空间，并且输出你想要的任何值！<br />
如果你的代码字符串定义了一个你想用的构造函数名为Set()，你可以在一个命名空间里运行这些代码，然后像这样<br />
从命名空间里提取</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> code <span style="color: #339933;">=</span> readFile<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Set.js&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// A string of JS code to evaluate</span>
<span style="color: #006600; font-style: italic;">// Define and invoke a wrapper function with special suffix code.</span>
<span style="color: #006600; font-style: italic;">// The return value is a namespace evaluator function and we treat</span>
<span style="color: #006600; font-style: italic;">// it as a namespace object.</span>
<span style="color: #003366; font-weight: bold;">var</span> setns <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Function</span><span style="color: #009900;">&#40;</span>code <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;return function(s) { return eval(s); };&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #003366; font-weight: bold;">var</span> Set <span style="color: #339933;">=</span> setns<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Set&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// Import the Set function from the namespace.</span>
<span style="color: #003366; font-weight: bold;">var</span> s <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Set<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// Use the class we just imported</span></pre></div></div>

<p>如果你有3个想从命名空间里提取出来</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Extract an object containing 3 values from the namespace</span>
<span style="color: #003366; font-weight: bold;">var</span> sets <span style="color: #339933;">=</span> setns<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'{Set:&quot;Set&quot;, BitSet:&quot;BitSet&quot;, MultiSet:&quot;MultiSet&quot;}'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> bs <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> sets.<span style="color: #660066;">BitSet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>我已经定义了一个namespace()函数用来载入代码和自动生成这类命名空间。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">/*
 * Load modules of code by enveloping them in a function and executing
 * the function: then they don't pollute the global namespace (unless they
 * assign to undeclared variables, but ES5 strict mode will prevent that.)
 * The wrapper function we create returns an evaluator function that 
 * evals a string inside the namespace. This evaluator function is the
 * return value of namespace() and provides read access to the symbols 
 * defined inside the namespace.
 */</span>
<span style="color: #003366; font-weight: bold;">function</span> <span style="color: #003366; font-weight: bold;">namespace</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #003366; font-weight: bold;">namespace</span>.<span style="color: #660066;">cache</span><span style="color: #009900;">&#41;</span> <span style="color: #003366; font-weight: bold;">namespace</span>.<span style="color: #660066;">cache</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// First call only</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #003366; font-weight: bold;">namespace</span>.<span style="color: #660066;">cache</span>.<span style="color: #660066;">hasOwnProperty</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  <span style="color: #006600; font-style: italic;">// Only load urls once</span>
        <span style="color: #003366; font-weight: bold;">var</span> code <span style="color: #339933;">=</span> gettext<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>           <span style="color: #006600; font-style: italic;">// Read code from url</span>
        <span style="color: #003366; font-weight: bold;">var</span> f <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Function</span><span style="color: #009900;">&#40;</span>code <span style="color: #339933;">+</span>        <span style="color: #006600; font-style: italic;">// Wrap code, add a return value</span>
                             <span style="color: #3366CC;">&quot;return function(s) { return eval(s); };&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">namespace</span>.<span style="color: #660066;">cache</span><span style="color: #009900;">&#91;</span>url<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> f.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// Invoke wrapper, cache evaluator</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">namespace</span>.<span style="color: #660066;">cache</span><span style="color: #009900;">&#91;</span>url<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// Return cached evaluator for this namespace</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009966; font-style: italic;">/* Return the text of the specified url, script element or file */</span>
<span style="color: #003366; font-weight: bold;">function</span> gettext<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> XMLHttpRequest <span style="color: #339933;">!==</span> <span style="color: #3366CC;">&quot;undefined&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">// Running in a browser</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>url.<span style="color: #660066;">charAt</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'#'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>              <span style="color: #006600; font-style: italic;">// URL names a script tag</span>
            <span style="color: #003366; font-weight: bold;">var</span> tag <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span>url.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>tag <span style="color: #339933;">||</span> tag.<span style="color: #660066;">tagName</span> <span style="color: #339933;">!=</span> <span style="color: #3366CC;">&quot;SCRIPT&quot;</span><span style="color: #009900;">&#41;</span>
                <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #003366; font-weight: bold;">new</span> Error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Unknown script &quot;</span> <span style="color: #339933;">+</span> url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tag.<span style="color: #660066;">src</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> gettext<span style="color: #009900;">&#40;</span>tag.<span style="color: #660066;">src</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">// If it has a src attribute</span>
            <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">return</span> tag.<span style="color: #660066;">text</span><span style="color: #339933;">;</span>                <span style="color: #006600; font-style: italic;">// Otherwise use script content</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>                                   <span style="color: #006600; font-style: italic;">// Load file with Ajax</span>
            <span style="color: #003366; font-weight: bold;">var</span> req <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            req.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span> url<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>         <span style="color: #006600; font-style: italic;">// Asynchronous get</span>
            req.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span> req.<span style="color: #660066;">responseText</span><span style="color: #339933;">;</span>             <span style="color: #006600; font-style: italic;">// Error handling?</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> readFile <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;function&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> readFile<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// Rhino</span>
    <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> snarf <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;function&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> snarf<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// Spidermonkey</span>
    <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> read <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;function&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> read<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #006600; font-style: italic;">// V8</span>
    <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #003366; font-weight: bold;">new</span> Error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;No mechanism to load module text&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>你还可以找到这些函数在namespace.js里，我写了一个简单的<a href="http://www.davidflanagan.com/demos/namespace/nstest.html">demo</a>,它并没有做什么有趣的事情，只是alert了一下256。<br />
但如果你看看代码，你会发现他加载和为4个代码块生成了命名空间。<br />
如果你是一个Python程序员你也许会想，这个技术可能可以用来补充python式的 &#8220;从A接向B&#8221; 类型模板系统，我一直在考虑和从事这类事情(但不准备共享代码)。<br />
缺点，当然它没有办法去枚举并且进入所有你命名空间里定义的字符，所以我们无法模仿python的接口</p>
<p>初次翻译，如有错误欢迎指出，请多见谅！<br />
例外 army对这个有更详细些的解释<br />
请看<a href="http://army8735.org/2010/01/26/591.html">如何访问作为命名空间的函数内部变量</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/%e5%a6%82%e4%bd%95%e8%ae%bf%e9%97%ae%e4%bd%9c%e4%b8%ba%e5%91%bd%e5%90%8d%e7%a9%ba%e9%97%b4%e7%9a%84%e5%87%bd%e6%95%b0%e5%86%85%e9%83%a8%e5%8f%98%e9%87%8f%ef%bc%88%e8%af%91%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ISD FLASH TEAM 今天正式官方宣布成立了！</title>
		<link>http://www.qbaty.org/blog/isd-flash-team-%e4%bb%8a%e5%a4%a9%e6%ad%a3%e5%bc%8f%e5%ae%98%e6%96%b9%e5%ae%a3%e5%b8%83%e6%88%90%e7%ab%8b%e4%ba%86%ef%bc%81/</link>
		<comments>http://www.qbaty.org/blog/isd-flash-team-%e4%bb%8a%e5%a4%a9%e6%ad%a3%e5%bc%8f%e5%ae%98%e6%96%b9%e5%ae%a3%e5%b8%83%e6%88%90%e7%ab%8b%e4%ba%86%ef%bc%81/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 03:02:07 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[业界]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[tencent]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=70</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div id="attachment_72" class="wp-caption aligncenter" style="width: 570px"><a href="http://www.qbaty.org/blog/wp-content/uploads/2010/01/isd_flashteam1.png"><img src="http://www.qbaty.org/blog/wp-content/uploads/2010/01/isd_flashteam1.png" alt="isd_flashteam" title="isd_flashteam1" width="560" height="280" class="size-full wp-image-72" /></a><p class="wp-caption-text">ISD flashteam</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/isd-flash-team-%e4%bb%8a%e5%a4%a9%e6%ad%a3%e5%bc%8f%e5%ae%98%e6%96%b9%e5%ae%a3%e5%b8%83%e6%88%90%e7%ab%8b%e4%ba%86%ef%bc%81/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>javascript 给DOM绑定事件方法的3种写法</title>
		<link>http://www.qbaty.org/blog/javascript-%e7%bb%91%e5%ae%9a%e4%ba%8b%e4%bb%b6%e7%9a%843%e7%a7%8d%e5%86%99%e6%b3%95/</link>
		<comments>http://www.qbaty.org/blog/javascript-%e7%bb%91%e5%ae%9a%e4%ba%8b%e4%bb%b6%e7%9a%843%e7%a7%8d%e5%86%99%e6%b3%95/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 09:48:25 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[DOM]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=32</guid>
		<description><![CDATA[今天Youyee发给我一段代码，是关于给DOM绑定事件的三种方法，让我说出三种方法的不同 我想了一会，愣是没说个明白。Youyee解释过后就明白，在这里做些笔记 var Event = &#123;&#125;; //方法一 runtime Event.addEventListener = function&#40;obj, eventType, listener&#41;&#123; if&#40;typeof window.addEventListener === 'function'&#41; &#123;//DOM2接口 el.addEventListener&#40;type, fn, false&#41;; &#125; else if&#40;typeof document.attachEvent === 'function'&#41; &#123;//IE el.attachEvent&#40;'on' + type, fn&#41;; &#125; else &#123;//DOM0接口 el&#91;'on' + type&#93; = fn; &#125; &#125;; //方法二 initialize if&#40;typeof window.addEventListener === 'function'&#41; &#123;//DOM2接口 Event.addEventListener = function&#40;el, type, fn&#41; &#123; [...]]]></description>
			<content:encoded><![CDATA[<p>今天Youyee发给我一段代码，是关于给DOM绑定事件的三种方法，让我说出三种方法的不同<br />
我想了一会，愣是没说个明白。Youyee解释过后就明白，在这里做些笔记</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> Event <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//方法一 runtime</span>
Event.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>obj<span style="color: #339933;">,</span> eventType<span style="color: #339933;">,</span> listener<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> window.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">===</span> <span style="color: #3366CC;">'function'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//DOM2接口</span>
		el.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span>type<span style="color: #339933;">,</span> fn<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> document.<span style="color: #660066;">attachEvent</span> <span style="color: #339933;">===</span> <span style="color: #3366CC;">'function'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//IE</span>
		el.<span style="color: #660066;">attachEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'on'</span> <span style="color: #339933;">+</span> type<span style="color: #339933;">,</span> fn<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//DOM0接口</span>
		el<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'on'</span> <span style="color: #339933;">+</span> type<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> fn<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//方法二 initialize</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> window.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">===</span> <span style="color: #3366CC;">'function'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//DOM2接口</span>
	Event.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> type<span style="color: #339933;">,</span> fn<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		el.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span>type<span style="color: #339933;">,</span> fn<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> document.<span style="color: #660066;">attachEvent</span> <span style="color: #339933;">===</span> <span style="color: #3366CC;">'function'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//IE</span>
	Event.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> type<span style="color: #339933;">,</span> fn<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		el.<span style="color: #660066;">attachEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'on'</span> <span style="color: #339933;">+</span> type<span style="color: #339933;">,</span> fn<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//DOM0接口</span>
	Event.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> type<span style="color: #339933;">,</span> fn<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		el<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'on'</span> <span style="color: #339933;">+</span> type<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> fn<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>第一种方法，还记得是很早之前写的，第一个datagrid或是排序table，就是用了这个绑定方法。不足之处在于只要用到这个函数就需要对DOM判断一遍，开始判断一遍是不是更好呢？<br />
<span id="more-32"></span><br />
第二个方法，则是初始化的，判断了一次DOM，然后也使得Event.addEventListener指向了正确的方法，缺点就是不管用不用到这个函数，都被初始化了</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//方法三 lazy mode</span>
Event.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>obj<span style="color: #339933;">,</span> eventType<span style="color: #339933;">,</span> listener<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>Event.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> window.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">===</span> <span style="color: #3366CC;">'function'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//DOM2接口</span>
			Event.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> type<span style="color: #339933;">,</span> fn<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				el.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span>type<span style="color: #339933;">,</span> fn<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> document.<span style="color: #660066;">attachEvent</span> <span style="color: #339933;">===</span> <span style="color: #3366CC;">'function'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//IE</span>
			Event.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> type<span style="color: #339933;">,</span> fn<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				el.<span style="color: #660066;">attachEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'on'</span> <span style="color: #339933;">+</span> type<span style="color: #339933;">,</span> fn<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//DOM0接口</span>
			Event.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> type<span style="color: #339933;">,</span> fn<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				el<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'on'</span> <span style="color: #339933;">+</span> type<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> fn<span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	Event.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span>obj<span style="color: #339933;">,</span> eventType<span style="color: #339933;">,</span> listener<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>这第三个方法正好补足了这点，所以被称做lazy mode,在不使用这个函数的情况下，就不会被初始化，也就减少了初始化的判断<br />
最后检讨下自己：最近一段时间代码写的太少了，应该多写些。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/javascript-%e7%bb%91%e5%ae%9a%e4%ba%8b%e4%bb%b6%e7%9a%843%e7%a7%8d%e5%86%99%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>web标准的推动</title>
		<link>http://www.qbaty.org/blog/web%e6%a0%87%e5%87%86%e7%9a%84%e6%8e%a8%e5%8a%a8/</link>
		<comments>http://www.qbaty.org/blog/web%e6%a0%87%e5%87%86%e7%9a%84%e6%8e%a8%e5%8a%a8/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 02:28:09 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[Web标准化]]></category>
		<category><![CDATA[web标准]]></category>
		<category><![CDATA[兼容]]></category>
		<category><![CDATA[开发]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=26</guid>
		<description><![CDATA[WebRebuild 的一年一年的壮大，从深圳到北京，明年有可能是上海，重构的运动正在进行着，影响着每一位互联网开发者。 第四届 D2 的成功举办，Webrebuild今年北京Google交流会，前端在业界的声音越来越大，前端技术越来越被重视。 Google，W3C，baidu，tencent，各大公司也越来越重视“Web标准”。 这一切都开始慢慢的变的像一种革命，一种反对 非标准浏览器妨碍互联网应用的发展的革命。这种革命的推动，发展以至成功带来的是开发者的春天，也是互联网用户体验一个新的世界。 但是也有不少公司不理解Web标准，他们对Web的认识停留在比较原始，甚至有点落后的状况上。他们可能每天想着如何快速的把产品，网页做出来就OK了，不去考虑所谓的标准，什么是标准，标准能换来直接的利益么？ 其实，也许标准不能说直接的换来钱，但是能节省很多钱，从成本角度上，你用更少的成本换来的等同的价值，你实际盈利更多了。那为什么说从成本角度上，Web标准可以给你带来成本上的减少呢？ 从人力成本来说你可能需要更专业的前端开发工程师，而开发成本却大大的减少了，硬件成本也可能由于更优化的结构，更优的行为处理，而减少你所需要耗掉的带宽。 这些点点滴滴不容易察觉的好处，正是目前很多公司或是开发者忽视掉的。 Web标准的推广普及给我们带来是一个更加Open，更加美好的的一个互联网时代。 当我们将不再因QA报上来的大堆非标准浏览器下的诡异bug而痛苦不堪，或是不在需要小心翼翼，惟恐触碰了非标准浏览的匪夷所思的解析方式或是盒子模型的时候，每一位互联网用户将面对HTML5和CSS3也许还有javascript 2.0来的RIA漫天飞舞。 当然革命尚未成功，同志仍需努力！~ 链接]]></description>
			<content:encoded><![CDATA[<p>WebRebuild 的一年一年的壮大，从深圳到北京，明年有可能是上海，重构的运动正在进行着，影响着每一位互联网开发者。<br />
第四届 D2 的成功举办，Webrebuild今年北京Google交流会，前端在业界的声音越来越大，前端技术越来越被重视。<br />
Google，W3C，baidu，tencent，各大公司也越来越重视“Web标准”。<br />
这一切都开始慢慢的变的像一种革命，一种反对 非标准浏览器妨碍互联网应用的发展的革命。这种革命的推动，发展以至成功带来的是开发者的春天，也是互联网用户体验一个新的世界。</p>
<p>但是也有不少公司不理解Web标准，他们对Web的认识停留在比较原始，甚至有点落后的状况上。他们可能每天想着如何快速的把产品，网页做出来就OK了，不去考虑所谓的标准，什么是标准，标准能换来直接的利益么？</p>
<p>其实，也许标准不能说直接的换来钱，但是能节省很多钱，从成本角度上，你用更少的成本换来的等同的价值，你实际盈利更多了。那为什么说从成本角度上，Web标准可以给你带来成本上的减少呢？</p>
<p>从人力成本来说你可能需要更专业的前端开发工程师，而开发成本却大大的减少了，硬件成本也可能由于更优化的结构，更优的行为处理，而减少你所需要耗掉的带宽。</p>
<p>这些点点滴滴不容易察觉的好处，正是目前很多公司或是开发者忽视掉的。</p>
<p>Web标准的推广普及给我们带来是一个更加Open，更加美好的的一个互联网时代。</p>
<p>当我们将不再因QA报上来的大堆非标准浏览器下的诡异bug而痛苦不堪，或是不在需要小心翼翼，惟恐触碰了非标准浏览的匪夷所思的解析方式或是盒子模型的时候，每一位互联网用户将面对HTML5和CSS3也许还有javascript 2.0来的RIA漫天飞舞。<br />
当然革命尚未成功，同志仍需努力！~</p>
<p><a href="http://www.w3ctech.com/tb/tb2.php?id=6">链接</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/web%e6%a0%87%e5%87%86%e7%9a%84%e6%8e%a8%e5%8a%a8/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Webrebuild 圆满成功</title>
		<link>http://www.qbaty.org/blog/webrebuild-%e5%9c%86%e6%bb%a1%e6%88%90%e5%8a%9f/</link>
		<comments>http://www.qbaty.org/blog/webrebuild-%e5%9c%86%e6%bb%a1%e6%88%90%e5%8a%9f/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 02:38:56 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[Web标准化]]></category>
		<category><![CDATA[webrebuild]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=10</guid>
		<description><![CDATA[整个会议还是相当成功的，举办完整次会议，受到各方的好评也给了Webrebuild.org的很大的信心 无论是 Google还是W3C都包括对这次的交流会十分满意 关于Webrebuild的报道也出现在W3C.org的首页和W3C中国的首页 http://www.w3.org/Consortium/Offices/#dec15 和 W3C主页 从米饭的 《网站重构 who am i 》提出的 单手定则 到彪叔的 一专多长 和 他 独具一格 的 重构哲学 再到克军的 分层语义化模版实践 都提出一个 并行的开发流程 以及 底层模块重用 特例单独编写，还提出了前端的MVC 都对我启发很大 会议后大家聚餐，更是畅聊到晚上12点，才尽兴而归 下面是此次活动的合照： 全部照片 Flickr 更多详情请看 Webrebuild.org]]></description>
			<content:encoded><![CDATA[<p>整个会议还是相当成功的，举办完整次会议，受到各方的好评也给了Webrebuild.org的很大的信心<br />
无论是 Google还是W3C都包括对这次的交流会十分满意</p>
<p>关于Webrebuild的报道也出现在W3C.org的首页和W3C中国的首页<br />
<a href="http://www.w3.org/Consortium/Offices/#dec15">http://www.w3.org/Consortium/Offices/#dec15</a> 和 <a href="http://www.w3c.org">W3C主页</a></p>
<p>从米饭的 《网站重构 who am i 》提出的 单手定则</p>
<p>到彪叔的 一专多长 和 他 独具一格 的 重构哲学</p>
<p>再到克军的 分层语义化模版实践 都提出一个 并行的开发流程 以及 底层模块重用 特例单独编写，还提出了前端的MVC</p>
<p>都对我启发很大</p>
<p>会议后大家聚餐，更是畅聊到晚上12点，才尽兴而归</p>
<p>下面是此次活动的合照：</p>
<div id="attachment_13" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.qbaty.org/blog/wp-content/uploads/2009/12/webrebuild-google.jpg"><img class="size-medium wp-image-13 " title="webrebuild-google" src="http://www.qbaty.org/blog/wp-content/uploads/2009/12/webrebuild-google-300x176.jpg" alt="会后合影" width="300" height="176" /></a><p class="wp-caption-text">会后合影</p></div>
<div id="attachment_11" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.qbaty.org/blog/wp-content/uploads/2009/12/webrebuild-all-1600.jpg"><img class="size-medium wp-image-11 " title="webrebuild-all-1600" src="http://www.qbaty.org/blog/wp-content/uploads/2009/12/webrebuild-all-1600-300x128.jpg" alt="Webrebuild合影" width="300" height="128" /></a><p class="wp-caption-text">Webrebuild合影</p></div>
<p>全部照片 <a href="http://www.flickr.com/photos/tension-cn/sets/72157622862515739/" target="_blank"><span style="color: #0063dc;">Flick</span><span style="color: #ff0084;">r</span></a></p>
<p>更多详情请看 <a href="http://www.webrebuild.org">Webrebuild.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/webrebuild-%e5%9c%86%e6%bb%a1%e6%88%90%e5%8a%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webrebuild 北京站</title>
		<link>http://www.qbaty.org/blog/webrebuild-%e5%8c%97%e4%ba%ac%e7%ab%99/</link>
		<comments>http://www.qbaty.org/blog/webrebuild-%e5%8c%97%e4%ba%ac%e7%ab%99/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 11:31:00 +0000</pubDate>
		<dc:creator>qbaty</dc:creator>
				<category><![CDATA[Web标准化]]></category>
		<category><![CDATA[webrebuild]]></category>
		<category><![CDATA[前端开发]]></category>

		<guid isPermaLink="false">http://www.qbaty.org/blog/?p=6</guid>
		<description><![CDATA[北京第一届Webrebuild的这周六就要举行了，从来没有参加过类似的活动。所以心里还是很期待的，再加上是由Google赞助的场地，也能去Google里参观参观。在北京半年多，每次都是特意走到这栋下，大概有三次，每次到心情都不一样。这次也可以走进Google看看，那些Geeks的工作环境。 能去参加交流会主要还是感谢建斌，当我得知webrebuild北京站这边的组织者是他的时候，我热心的希望能够帮上些什么，进入组织以后，看到他们的辛勤忙碌，还是觉得自己帮不上什么。 这次Webrebuild是北京第一次，应该是令北京很多热爱前端开发技术的同学兴奋的一件事情，只可惜场地有限只能容纳100人左右，好在还有plan B，应该会比较热闹。总之先在这里先预祝交流会圆满成功吧&#8230;]]></description>
			<content:encoded><![CDATA[<p>北京第一届Webrebuild的这周六就要举行了，从来没有参加过类似的活动。所以心里还是很期待的，再加上是由Google赞助的场地，也能去Google里参观参观。在北京半年多，每次都是特意走到这栋下，大概有三次，每次到心情都不一样。这次也可以走进Google看看，那些Geeks的工作环境。</p>
<p>能去参加交流会主要还是感谢建斌，当我得知webrebuild北京站这边的组织者是他的时候，我热心的希望能够帮上些什么，进入组织以后，看到他们的辛勤忙碌，还是觉得自己帮不上什么。</p>
<p>这次Webrebuild是北京第一次，应该是令北京很多热爱前端开发技术的同学兴奋的一件事情，只可惜场地有限只能容纳100人左右，好在还有plan B，应该会比较热闹。总之先在这里先预祝交流会圆满成功吧&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qbaty.org/blog/webrebuild-%e5%8c%97%e4%ba%ac%e7%ab%99/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
