<?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>ria之家--RIA三部曲：jquery、ext、flex &#187; javascript</title>
	<atom:link href="http://www.36ria.com/category/js/feed" rel="self" type="application/rss+xml" />
	<link>http://www.36ria.com</link>
	<description>RIA三部曲：jquery、ext、flex</description>
	<lastBuildDate>Wed, 08 Feb 2012 12:19:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>发布jasmine-kissy</title>
		<link>http://www.36ria.com/4880</link>
		<comments>http://www.36ria.com/4880#comments</comments>
		<pubDate>Wed, 08 Feb 2012 12:18:11 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[Jasmine]]></category>
		<category><![CDATA[前端单元测试]]></category>
		<category><![CDATA[单元测试]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4880</guid>
		<description><![CDATA[jasmine-kissy向Jasmine增加二个功能： .快速加载html片段。jsTestDriver使用jasmine-jstd-adapter(jasmine对jsTestDriver的适配器)，由于有自己的测试运行页面，无法向运行页面插入测试用html片段，所以在你的spec脚本中需要插入html片段。 增加用于KISSY的machers，目前只作用于KISSY的Node模块。 代码下载和说明文档：https://github.com/minghe/jasmine-kissy 明河为什么写jasmine-kissy？ 明河是使用jsTestDriver测试......]]></description>
			<content:encoded><![CDATA[<p>jasmine-kissy向Jasmine增加二个功能：</p>
<ul>
<li>.快速加载html片段。jsTestDriver使用<a href="https://github.com/ibolmo/jasmine-jstd-adapter" title="jasmine-jstd-adapter" target="_blank">jasmine-jstd-adapter</a>(jasmine对jsTestDriver的适配器)，由于有自己的测试运行页面，无法向运行页面插入测试用html片段，所以在你的spec脚本中需要插入html片段。</li>
<li>增加用于KISSY的machers，目前只作用于KISSY的Node模块。</li>
</ul>
<p><b>代码下载和说明文档：</b><a href="https://github.com/minghe/jasmine-kissy" title="jasmine-kissy" target="_blank">https://github.com/minghe/jasmine-kissy</a></p>
<h4>明河为什么写jasmine-kissy？</h4>
<p>明河是使用<a href="http://code.google.com/p/js-test-driver/wiki/DesignPrinciples" title="js-test-driver" target="_blank">jsTestDriver</a>测试工具来运行jasmine的单元测试代码，遇到一个问题：<br />
jsTestDriver没有使用jasmine的跑单元测试的html页面，它只有本地的服务器路径，比如：http://localhost:9876/capture。很多情况我们需要在页面中插入测试用的html片段，比如明河想要测试分享组件，我需要向页面插入个容器</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">J_ShareListWrapper</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>，在jsTestDriver中只能使用js向body插入dom结构。如果你的dom结构很简单，那没什么问题，但是如果你的html片段非常长，在测试js中用脚本插入html片段就非常蛋疼，极度不利于维护。<br />
如何解决这个问题呢？</p>
<h5>使用ajax加载html片段</h5>
<p>利用ajax的确可以解决问题，但又引入了一个新的问题：如何处理异步的测试呢？难道每次都加waits()和run()，那更蛋疼&#8230;<br />
大多人觉得ajax=异步，其实这是不对的，ajax也可以是阻塞式加载。在kissy的ajax方法加个参数<strong>async:false</strong>，关闭异步加载方式。正是使用阻塞式加载，可以避免使用waits()+run()的异步繁琐方式。</p>
<h4>jasmine-kissy的用法</h4>
<h5>1.全局变量</h5>
<p>为了方便测试用例页面直接使用，定义了几个全局变量:</p>
<ul>
<li><strong>JF</strong>：JamineFixture的实例，使用JF的<strong>load()</strong>读取html片段</li>
<li><strong>S</strong>：KISSY的缩写变量</li>
<li><strong>$</strong>：KISSY.Node.all的缩写变量</li>
</ul>
<h5>2.加载html片段</h5>
<p>在<strong>jsTestDriver.conf</strong>中需要加载静态html片段文件，比如：</p>
<p>必须先配置html片段所放的目录路径，<strong>JF.path = &#8216;spec/fixtures&#8217;</strong>。<br />
特别留意在jsTestDriver中起始路径应该是<strong>http://localhost:9876/test/</strong><br />
假设在你的spec/fixtures目录有个html片段文件jasmine-kissy_fixture.html。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">serve:</span></li>
<li><span style="color: Gray;"> - spec/fixtures/*.html</span></li></ol></div>
<p>加载spec/fixtures/目录下的所有html文件。<br />
<strong>这是必须配置的！不然使用ajax加载时会报找不到文件的错误！</strong><br />
文件的内容如下：<br />
my name is minghe.<br />
使用如下语法加载这个文件：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">JF</span><span style="color: Gray;">.</span><span style="color: Blue;">load</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">jasmine-kissy_fixture.html</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>你可以测试下#test这个div是否存在：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">expect</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#test</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;">.</span><span style="color: Blue;">toExist</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li></ol></div>
<p>(ps:<strong>toExist()</strong>是jasmine-kissy新增的macher，用于测试节点是否存在)</p>
<p>加载的片段会放入缓存，避免重复加载。</p>
<p>需要加载多个文件，语法如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">JF</span><span style="color: Gray;">.</span><span style="color: Blue;">load</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">jasmine-kissy_fixture.html</span><span style="color: #8b0000;">'</span><span style="color: Gray;">，</span><span style="color: #8b0000;">'</span><span style="color: Red;">jasmine-kissy-2_fixture.html</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>加载的html片段会放在页面的测试容器内，容器id为#J_JF。</p>
<p>清理html片段，（jasmine-kissy会自动清理），使用<strong>JF.clean()</strong>。</p>
<p>清理缓存，使用<strong>JF.cleanCache()</strong>。</p>
<h5>3.KISSY matchers</h5>
<p>留意这些matcher目前只适用于KISSY的Node方式。</p>
<ul>
<li>toExist() 测试节点的存在性</li>
<li>toHasClass() 测试节点是否拥有指定的class名</li>
<li>toHasAttr() 测试节点是否拥有指定的属性值</li>
<li>toHasProp() 测试节点是否拥有指定的property值</li>
<li>toHasData() 测试节点是否拥有指定扩展属性值</li>
<li>toContain() 测试节点是否有子节点</li>
<li>toEqualValue() 测试节点的的value值</li>
<li>toEqualText() 测试节点的text</li>
</ul>
<p>示例代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">expect</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#test</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;">.</span><span style="color: Blue;">toHasClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">test-wrapper</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">expect</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#test</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;">.</span><span style="color: Blue;">toEqualText</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">my name is minghe.</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4880/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用reveal.js做幻灯片</title>
		<link>http://www.36ria.com/4856</link>
		<comments>http://www.36ria.com/4856#comments</comments>
		<pubDate>Fri, 20 Jan 2012 02:53:35 +0000</pubDate>
		<dc:creator>飞绿</dc:creator>
				<category><![CDATA[css3]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4856</guid>
		<description><![CDATA[如果你想你的在线分享给人留下深刻的印象，可以考虑用reveal.js。reveal.js是一个制作3D幻灯片效果的插件，它同时应用最新的web技术，来创建漂亮的html演示效果。 reveal.js不依赖其他任何javascript库，是一个独立的javascript插件库。 当然，它应用了最新web新技术，所以需要浏览器对CSS 3D变形的支持，这就意味着在IE下看不到漂亮的动画效果。在safari、chrome、firefox下效果都很好。不......]]></description>
			<content:encoded><![CDATA[<p>如果你想你的在线分享给人留下深刻的印象，可以考虑用reveal.js。reveal.js是一个制作3D幻灯片效果的插件，它同时应用最新的web技术，来创建漂亮的html演示效果。 reveal.js不依赖其他任何javascript库，是一个独立的javascript插件库。<br />
当然，它应用了最新web新技术，所以需要浏览器对CSS 3D变形的支持，这就意味着在IE下看不到漂亮的动画效果。在safari、chrome、firefox下效果都很好。不过如果浏览器不支持CSS 3D，那么会以2D效果呈现。</p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://lab.hakim.se/reveal-js/#/" class="btn-view-demo" target="_blank">点此查看demo</a></li>
</ul>
<h3>特征：</h3>
<ul>
<li>导航控制</li>
<li>支持键盘导航</li>
<li>带进度条</li>
<li>内置代码语法高亮（highlight.js）</li>
<li>支持幻灯片预览</li>
<li>多层次、嵌套式幻灯片</li>
<li>独特的网址书签和内部链接</li>
<li>各种主题和各种变形效果（立方体、翻页、陷下……）</li>
<li>支持触屏设备</li>
</ul>
<h3>截图：</h3>
<p><a href="http://www.36ria.com/4856/1-16" rel="attachment wp-att-4866"><img src="http://www.36ria.com/wp-content/uploads/2012/01/1.jpg" alt="" title="1" width="500" height="330" class="alignnone size-full wp-image-4866" /></a><br />
<a href="http://www.36ria.com/4856/2-15" rel="attachment wp-att-4867"><img src="http://www.36ria.com/wp-content/uploads/2012/01/2.jpg" alt="" title="2" width="500" height="331" class="alignnone size-full wp-image-4867" /></a><br />
<a href="http://www.36ria.com/4856/3-19" rel="attachment wp-att-4868"><img src="http://www.36ria.com/wp-content/uploads/2012/01/3.jpg" alt="" title="3" width="500" height="332" class="alignnone size-full wp-image-4868" /></a><br />
<a href="http://www.36ria.com/4856/4-17" rel="attachment wp-att-4869"><img src="http://www.36ria.com/wp-content/uploads/2012/01/4.jpg" alt="" title="4" width="500" height="331" class="alignnone size-full wp-image-4869" /></a></p>
<p>文章翻译自<a href="http://www.queness.com/post/10361/use-revealjs-to-create-css-3d-slideshow" target="_blank">Use Reveal.js to Create CSS 3D Slideshow</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4856/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>github快速使用指南—git学习笔记</title>
		<link>http://www.36ria.com/4742</link>
		<comments>http://www.36ria.com/4742#comments</comments>
		<pubDate>Wed, 04 Jan 2012 13:35:51 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[git学习笔记]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4742</guid>
		<description><![CDATA[如果你是使用git作为版本控制工具，那么github基本上是必备的网站，github可以托管你的git版本库，作用类似于SourceForge和Google Code，github的界面是非常人性化的，由于git本身会比svn来的复杂，所以在操作上github会比SourceForge来的难点。所以就有了今天的这篇教程。 跳过账户注册阶段。 1.在github上创建一个新的版本库 github首页，找到下图界面，点击“new repository”按钮： 填下项......]]></description>
			<content:encoded><![CDATA[<p>如果你是使用git作为版本控制工具，那么github基本上是必备的网站，github可以托管你的git版本库，作用类似于SourceForge和Google Code，github的界面是非常人性化的，由于git本身会比svn来的复杂，所以在操作上github会比SourceForge来的难点。所以就有了今天的这篇教程。<br />
跳过账户注册阶段。</p>
<h4>1.在github上创建一个新的版本库</h4>
<p>github首页，找到下图界面，点击“new repository”按钮：<br />
<a href="http://www.36ria.com/4742/github-1" rel="attachment wp-att-4745"><img src="http://www.36ria.com/wp-content/uploads/2011/12/github-1.png" alt="" title="github-1" width="375" height="224" class="alignnone size-full wp-image-4745" /></a><br />
填下项目名称、描述、url等信息，然后提交。<br />
<a href="http://www.36ria.com/4742/github-2" rel="attachment wp-att-4746"><img src="http://www.36ria.com/wp-content/uploads/2011/12/github-2.png" alt="" title="github-2" width="594" height="416" class="alignnone size-full wp-image-4746" /></a><br />
图中标红的一项的意思是只有付费用户才有私有库托管服务，在github上开源（public）项目托管是免费的。<br />
这样一个新的版本库就创建完毕了。<br />
接下来我们需要本地版本库和远程版本库（github上的）进行通信，还需要一些配置。</p>
<h4>2.ssh配置</h4>
<p>想要让本地版本库与远程版本库通信，需要配置下SSH key。</p>
<h5>2.1检查计算机上是否已经有SSH key</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$ </span><span style="color: Blue;">cd</span><span style="color: Gray;"> ~</span><span style="color: #8b0000;">/</span><span style="color: Red;">.ssh</span></li></ol></div>
<p>如果出现““No such file or directory”或类似的语句，说明缺少ssh的key。</p>
<h5>2.2创建个新的SSH key</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$ </span><span style="color: Blue;">ssh</span><span style="color: Gray;">-</span><span style="color: Blue;">keygen</span><span style="color: Gray;"> -</span><span style="color: Blue;">t</span><span style="color: Gray;"> </span><span style="color: Blue;">rsa</span><span style="color: Gray;"> -</span><span style="color: Blue;">C</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">your_email@youremail.com</span><span style="color: #8b0000;">&quot;</span></li></ol></div>
<p>比如明河机子上的</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$ </span><span style="color: Blue;">ssh</span><span style="color: Gray;">-</span><span style="color: Blue;">keygen</span><span style="color: Gray;"> -</span><span style="color: Blue;">t</span><span style="color: Gray;"> </span><span style="color: Blue;">rsa</span><span style="color: Gray;"> -</span><span style="color: Blue;">C</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">minghe36@126.com</span><span style="color: #8b0000;">&quot;</span></li></ol></div>
<p>会出现类似下图的提示：<br />
<a href="http://www.36ria.com/4742/2012-1-4-20-49-02" rel="attachment wp-att-4805"><img src="http://www.36ria.com/wp-content/uploads/2012/01/2012-1-4-20-49-02.png" alt="" title="2012-1-4 20-49-02" width="390" height="52" class="alignnone size-full wp-image-4805" /></a><br />
直接按下“enter”键即可，然后输入密码。<br />
<a href="http://www.36ria.com/4742/2012-1-4-20-50-24" rel="attachment wp-att-4806"><img src="http://www.36ria.com/wp-content/uploads/2012/01/2012-1-4-20-50-24.png" alt="" title="2012-1-4 20-50-24" width="449" height="47" class="alignnone size-full wp-image-4806" /></a><br />
一切顺利的话，你可以查看下c:\Users\Administrator\.ssh\id_rsa.pub文件，复制里面的key码。</p>
<h5>2.3增加ssh key到github上</h5>
<p><a href="http://www.36ria.com/4742/2012-1-4-20-54-50" rel="attachment wp-att-4807"><img src="http://www.36ria.com/wp-content/uploads/2012/01/2012-1-4-20-54-50.png" alt="" title="2012-1-4 20-54-50" width="281" height="68" class="alignnone size-full wp-image-4807" /></a><br />
<a href="http://www.36ria.com/4742/2012-1-4-20-55-52" rel="attachment wp-att-4808"><img src="http://www.36ria.com/wp-content/uploads/2012/01/2012-1-4-20-55-52.png" alt="" title="2012-1-4 20-55-52" width="680" height="332" class="alignnone size-full wp-image-4808" /></a><br />
留意并不需要填写title，github会自动生成，直接把复制的key黏贴到key输入框确定即可。</p>
<h5>2.4配置下git的用户名和email</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$ </span><span style="color: Blue;">git</span><span style="color: Gray;"> </span><span style="color: Blue;">config</span><span style="color: Gray;"> --</span><span style="color: Blue;">global</span><span style="color: Gray;"> </span><span style="color: Blue;">user</span><span style="color: Gray;">.</span><span style="color: Blue;">name</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">minghe</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">$ </span><span style="color: Blue;">git</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">config</span><span style="color: Gray;"> --</span><span style="color: Blue;">global</span><span style="color: Gray;"> </span><span style="color: Blue;">user</span><span style="color: Gray;">.</span><span style="color: Blue;">email</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">minghe36@126.com</span><span style="color: #8b0000;">&quot;</span></li></ol></div>
<p>配置结束。</p>
<h4>3.本地版本库和远程版本库的通信</h4>
<h5>3.1克隆个远程版本库</h5>
<p><a href="http://www.36ria.com/4742/github-6" rel="attachment wp-att-4809"><img src="http://www.36ria.com/wp-content/uploads/2012/01/github-6.png" alt="" title="github-6" width="530" height="150" class="alignnone size-full wp-image-4809" /></a><br />
“cd d:\git-test”切换到该目录。</p>
<h5>3.2推送更新到远程版本库</h5>
<p>先随意提交个文件到版本库<br />
<a href="http://www.36ria.com/4742/github-7" rel="attachment wp-att-4810"><img src="http://www.36ria.com/wp-content/uploads/2012/01/github-7.png" alt="" title="github-7" width="405" height="166" class="alignnone size-full wp-image-4810" /></a><br />
由于是克隆远程版本库，已经存在远程分支origin，无需再创建。<br />
（PS：创建远程分支：git remote add origin git@github.com:minghe/git-test.git）<br />
查看远程分支情况，可以使用<strong>git branch -r</strong>命令。<br />
推送修改到远程版本库：<br />
<a href="http://www.36ria.com/4742/github-8" rel="attachment wp-att-4811"><img src="http://www.36ria.com/wp-content/uploads/2012/01/github-8.png" alt="" title="github-8" width="513" height="152" class="alignnone size-full wp-image-4811" /></a><br />
git push命名将推送内容到远程服务器。<br />
与之相反的命令就是git pull。</p>
<p>有机会给大家深入讲解下远程分支。这是一个非常巧妙的设计，git会将远程分支都复制到目录.git/refs/remotes/origin下，类似于远程分支会有个独立的origin命名空间，降低了多用户操作时候合并分支的分险。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4742/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JS Filter</title>
		<link>http://www.36ria.com/4787</link>
		<comments>http://www.36ria.com/4787#comments</comments>
		<pubDate>Sat, 31 Dec 2011 11:52:11 +0000</pubDate>
		<dc:creator>天河</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4787</guid>
		<description><![CDATA[这个是前一阵做一个话题PK页面时折腾的东西。类似于后端可以对url进行Filter，这里可以对一组操作用 filter 进行过滤，来完成数据准备、条件验证等。 话题PK是一个单页应用。用户可以在上面完成投票、发布/查看评论的功能。不过，有些操作是需要验证的，比如投票、评论，都需要首先验证是否登陆，然后再验证用户是否已经有阵营信息了（不能反水）。假设投票的方法叫 p......]]></description>
			<content:encoded><![CDATA[<p>这个是前一阵做一个话题PK页面时折腾的东西。类似于后端可以对url进行Filter，这里可以对一组操作用 filter 进行过滤，来完成数据准备、条件验证等。</p>
<p>话题PK是一个单页应用。用户可以在上面完成投票、发布/查看评论的功能。不过，有些操作是需要验证的，比如投票、评论，都需要首先验证是否登陆，然后再验证用户是否已经有阵营信息了（不能反水）。假设投票的方法叫 postTicket，发表观点的方法叫 postMsg， 我们可以直接对名称为 postXXX 的方法进行过滤，来验证用户是否登陆及阵营信息。使用方式如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">App</span><span style="color: Gray;">.</span><span style="color: Blue;">filter</span><span style="color: Olive;">({</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">route</span><span style="color: Gray;">: </span><span style="color: #8b0000;">/</span><span style="color: Red;">^post.*</span><span style="color: #8b0000;">/</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">fns</span><span style="color: Gray;">: </span><span style="color: Olive;">[</span><span style="color: Blue;">login</span><span style="color: Gray;">, </span><span style="color: Blue;">side</span><span style="color: Olive;">]</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>其中route是要匹配的方法名称，fns是用来过滤的方法，这些函数如果返回true，就说明验证通过，会继续执行下一个过滤函数。如果返回false，就说明验证没有通过，后面的方法也就不用执行了。只有fns里的方法全部返回true时，route匹配到的方法才会执行。</p>
<p>这样，投票的业务逻辑就可以跟权限验证的业务逻辑分离，最大限度地对模块进行解耦，提高模块开发速度及复用率了。</p>
<p>Filter的实现，这个实现目前并不复杂，但性能可能不是最优的。我这里也说明下，抛砖引玉，如果你有更好的方式，欢迎告诉我 <img src='http://www.36ria.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>前面说过了，这里的应用场景是单页的，也没有改变页面hash等操作，所以route就直接对函授名进行匹配了。其实现思路就是备份原来的函授，然后替换掉原有的方法，改成一个代理方法。这样，再用户调用这些方法的时候，实际上是在调用我们的代理方法。proxy方法如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">add</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">o</span><span style="color: Gray;">, </span><span style="color: Blue;">method</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">me</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">me</span><span style="color: Gray;">.</span><span style="color: Blue;">_actions</span><span style="color: Olive;">[</span><span style="color: Blue;">method</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Blue;">o</span><span style="color: Olive;">[</span><span style="color: Blue;">method</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// proxy function</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">o</span><span style="color: Olive;">[</span><span style="color: Blue;">method</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">()</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">route</span><span style="color: Gray;">, </span><span style="color: Blue;">fns</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">tag</span><span style="color: Gray;"> = </span><span style="color: Green;">true</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">for</span><span style="color: Olive;">(</span><span style="color: Blue;">filter</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">in</span><span style="color: Gray;"> </span><span style="color: Blue;">me</span><span style="color: Gray;">.</span><span style="color: Blue;">_filters</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">filter</span><span style="color: Gray;"> = </span><span style="color: Blue;">me</span><span style="color: Gray;">.</span><span style="color: Blue;">_filters</span><span style="color: Olive;">[</span><span style="color: Blue;">filter</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">route</span><span style="color: Gray;"> = </span><span style="color: Blue;">filter</span><span style="color: Gray;">.</span><span style="color: Blue;">route</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">fns</span><span style="color: Gray;"> = </span><span style="color: Blue;">filter</span><span style="color: Gray;">.</span><span style="color: Blue;">fns</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">method</span><span style="color: Gray;">.</span><span style="color: Blue;">match</span><span style="color: Olive;">(</span><span style="color: Blue;">route</span><span style="color: Olive;">))</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">for</span><span style="color: Olive;">(</span><span style="color: Blue;">fn</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">in</span><span style="color: Gray;"> </span><span style="color: Blue;">fns</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">fn</span><span style="color: Gray;"> = </span><span style="color: Blue;">fns</span><span style="color: Olive;">[</span><span style="color: Blue;">fn</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">fn</span><span style="color: Gray;">.</span><span style="color: Blue;">apply</span><span style="color: Olive;">(</span><span style="color: Blue;">o</span><span style="color: Gray;">, </span><span style="color: Olive;">[]</span><span style="color: Gray;">.</span><span style="color: Blue;">slice</span><span style="color: Gray;">.</span><span style="color: Blue;">call</span><span style="color: Olive;">(</span><span style="color: Blue;">arguments</span><span style="color: Olive;">)))</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">tag</span><span style="color: Gray;"> = </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">break</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">tag</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">me</span><span style="color: Gray;">.</span><span style="color: Blue;">_actions</span><span style="color: Olive;">[</span><span style="color: Blue;">method</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">apply</span><span style="color: Olive;">(</span><span style="color: Blue;">o</span><span style="color: Gray;">, </span><span style="color: Olive;">[]</span><span style="color: Gray;">.</span><span style="color: Blue;">slice</span><span style="color: Gray;">.</span><span style="color: Blue;">call</span><span style="color: Olive;">(</span><span style="color: Blue;">arguments</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4787/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>飞绿说说几个有意思的IEbug</title>
		<link>http://www.36ria.com/4744</link>
		<comments>http://www.36ria.com/4744#comments</comments>
		<pubDate>Fri, 30 Dec 2011 12:39:51 +0000</pubDate>
		<dc:creator>飞绿</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[IEbug]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4744</guid>
		<description><![CDATA[最近工作中遇到的一些坑爹bug，下面列举三个，都来自IE…… 1、IE7自动换行bug 代码如下： &#60;style&#62; &#160; &#160; &#160; &#160; ul { &#160; &#160; &#160; &#160; &#160; &#160; width: 100%; &#160; &#160; &#160; &#160; &#160; &#160; height: auto; &#160; &#160; &#160; &#160; } &#160; &#160; &#160; &#160; ul li { &#160; &#160; &#160; &#160; &#160; &#160; clear: both; &#160; &#160; &#160; &#160; &#160; &#160; float: left; &#160; [.........]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/4744/feilv-ie-bug-2" rel="attachment wp-att-4802"><img src="http://www.36ria.com/wp-content/uploads/2011/12/feilv-ie-bug1.png" alt="" title="feilv-ie-bug" width="680" height="200" class="alignnone size-full wp-image-4802" /></a><br />
最近工作中遇到的一些坑爹bug，下面列举三个，都来自IE…… <img src='http://www.36ria.com/wp-includes/images/smilies/icon_arrow.gif' alt=':arrow:' class='wp-smiley' />  </p>
<h3>1、IE7自动换行bug</h3>
<p>代码如下： </p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; ul {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: 100%;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: auto;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; ul li {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clear: both;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; float: left;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 12px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; border: #cdcdcd 1px solid;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 6px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: auto;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #eaeaea;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style: none;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">ul</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 类目地图模板1&gt;一级类目&gt;二级类目/购书券</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">取消选择</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 类目地图模板1&gt;一级类目&gt;二级类目/购书券&gt;三级类目/网上购书券&gt;四级类目/教育培训卡&gt;五级类目/高中培训卡</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">取消选择</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 类目地图模板1&gt;二级类目/吃喝玩乐折扣券&gt;三级类目/购书券</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">取消选择</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">ul</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>需求上希望li路径的外边框宽度自适应，正常的显示如图：<br />
<a href="http://www.36ria.com/4744/ie7bug-yes" rel="attachment wp-att-4753"><img src="http://www.36ria.com/wp-content/uploads/2011/12/ie7bug-yes-680x119.jpg" alt="" title="ie7bug-yes" width="450" height="78" class="aligncenter size-large wp-image-4753" /></a><br />
但在ie7下会出现这样的换行现象，如下图：<br />
<a href="http://www.36ria.com/4744/ie7bug-no" rel="attachment wp-att-4752"><img src="http://www.36ria.com/wp-content/uploads/2011/12/ie7bug-no-680x159.jpg" alt="" title="ie7bug-no" width="450" height="105" class="aligncenter size-large wp-image-4752" /></a><br />
在测试中还发现该换行现象跟屏幕显示器分辨率相关，上面ie7的效果是在分辨率1280*800下看到的，如果分辨率更低换行的现象就更易发现。</p>
<p>解决的方法是在li里再套一层div，给div设置宽度自适应</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; ul {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: 100%;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: auto;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; li {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style: none;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; ul div {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clear: both;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; float: left;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 12px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; border: #cdcdcd 1px solid;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 6px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: auto;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #eaeaea;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">ul</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 类目地图模板1&gt;一级类目&gt;二级类目/购书券</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">data-id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1-50019418</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">delete-cat</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">取消选择</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 类目地图模板1&gt;一级类目&gt;二级类目/购书券&gt;三级类目/网上购书券&gt;四级类目/教育培训卡&gt;五级类目/高中培训卡</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">data-id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1-50019418</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">delete-cat</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">取消选择</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 类目地图模板1&gt;二级类目/吃喝玩乐折扣券&gt;三级类目/购书券</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">data-id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1-50019418</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">delete-cat</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">取消选择</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">ul</span><span style="color: Olive;">&gt;</span></li></ol></div>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/feilv-demo/ie7bug-demo.html" class="btn-view-demo" target="_blank">点此查看demo</a></li>
</ul>
<h3>2、IE8 overflow和max-height引起的bug</h3>
<p>现象：在IE8下，a容器设置max-height, overflow: auto或overflow: srcoll。会使得a容器把max-height当做height来渲染。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; .a {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: 800px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; max-height: 200px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; overflow: scroll;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /*overflow-x: auto;*/</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background: #0f0;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; p {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: 900px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">a</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">A容器设置了max-height，A容器设置了overflow: auto或srcoll，A容器会把max-height当做height来渲染。</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>解决办法是去掉a容器的overflow设置，再给a容器套一个容器b，给b设置overflow。代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; .a {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: 800px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; max-height: 200px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background: #0f0;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; .b {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: 800px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; overflow: auto;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; p {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: 900px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">b</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">a</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">解决办法是去掉a容器的overflow设置，再给a容器外面套一个容器b，给b容器设置overflow。</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>关于IE8 overflow的相关问题可以看看这篇<a href="http://edskes.com/ie/ie8overflowandexpandingboxbugs.htm" target="_blank">《IE8 overflow and expanding box bugs》</a></p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/feilv-demo/ie8_overflow_max-height.html" class="btn-view-demo" target="_blank">点此查看demo</a></li>
</ul>
<h3>3、IE9 overflow和:hover引起的bug</h3>
<p>这是一个神奇的现象，IE9下，容器a设置overflow：auto，a容器中的内容导致a容器的滚动条出现，这种情况下若给a容器设置伪类：hover。那么在鼠标移动到hover元素上，a容器高度会变高。代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">.a {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 20px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; border: 2px solid #cdcdcd;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: 800px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; overflow: auto;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; p {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: 900px;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; p:hover {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: #f60;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">a</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">容器a设置overflow：auto,a中的内容导致a的滚动条出现，这种情况下若给a容器中的元素设置伪类:hover。那么在鼠标移动到hover元素上后a容器的高度会变高。</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">p</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>解决办法是给a容器设置伪类:hover{height: 100%}或者给a容器设置overflow-y/x:scroll.代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; .a:hover {</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 100%;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">style</span><span style="color: Olive;">&gt;</span></li></ol></div>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/feilv-demo/ie9_overflow_hover.html" class="btn-view-demo" target="_blank">点此查看demo</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4744/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>10个css3/javascript动画插件/框架</title>
		<link>http://www.36ria.com/4685</link>
		<comments>http://www.36ria.com/4685#comments</comments>
		<pubDate>Sun, 18 Dec 2011 04:50:32 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[css3动画]]></category>
		<category><![CDATA[javascript动画]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4685</guid>
		<description><![CDATA[1.jQuery Transit jquery的一个用的人比较多的动画插件，非常的易用，效果也非常全面。 $('.box').transition({ rotate: '30deg' }); 2.Transform.js 应该是目前针对transform最为全面的动画库，特点支持3D动画特性： $('#test').css({ &#160; &#160; &#160; '-webkit-transform': 'translate(10px,10px)', &#160; &#160; &#160; '-moz-transform': 'translate(10px,10px)', &#160; &#160; &#160; '-o-transform': 'translate(10px,10px)', &#160; &#160; &#160; '-ms-transform'......]]></description>
			<content:encoded><![CDATA[<h4><a href="http://ricostacruz.com/jquery.transit/" target="_blank">1.jQuery Transit</a></h4>
<p><a href="http://www.36ria.com/4685/1-15" rel="attachment wp-att-4698"><img src="http://www.36ria.com/wp-content/uploads/2011/12/1.jpg" alt="" title="1" width="500" height="250" class="alignnone size-full wp-image-4698" /></a><br />
jquery的一个用的人比较多的动画插件，非常的易用，效果也非常全面。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">.box</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">transition</span><span style="color: Olive;">({</span><span style="color: Gray;"> </span><span style="color: Blue;">rotate</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">30deg</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<h4><a href="http://transformjs.strobeapp.com/" target="_blank">2.Transform.js</a></h4>
<p><a href="http://www.36ria.com/4685/2-14" rel="attachment wp-att-4699"><img src="http://www.36ria.com/wp-content/uploads/2011/12/2.jpg" alt="" title="2" width="500" height="250" class="alignnone size-full wp-image-4699" /></a><br />
应该是目前针对transform最为全面的动画库，特点支持3D动画特性：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#test</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">css</span><span style="color: Olive;">({</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">-webkit-transform</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">translate(10px,10px)</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">-moz-transform</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">translate(10px,10px)</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">-o-transform</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">translate(10px,10px)</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">-ms-transform</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">translate(10px,10px)</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">transform</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">translate(10px,10px)</span><span style="color: #8b0000;">'</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<h4><a href="http://paperjs.org/" target="_blank">3.Paper.js</a></h4>
<p><a href="http://www.36ria.com/4685/3-18" rel="attachment wp-att-4700"><img src="http://www.36ria.com/wp-content/uploads/2011/12/3.jpg" alt="" title="3" width="500" height="250" class="alignnone size-full wp-image-4700" /></a><br />
非常牛逼的动画效果，文档和demo都很详细，虽然用于实战的场景不多（基于canvas的动画），不过依旧推荐认真看下。</p>
<h4><a href="http://visionmedia.github.com/move.js/" target="_blank">4.Move.js</a></h4>
<p><a href="http://www.36ria.com/4685/4-16" rel="attachment wp-att-4701"><img src="http://www.36ria.com/wp-content/uploads/2011/12/4.jpg" alt="" title="4" width="500" height="250" class="alignnone size-full wp-image-4701" /></a><br />
相当不错的小动画库，能够产生大部分css3动画效果，关键是API非常易于理解，比如下面的代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">move</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#example-11 .box</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; .</span><span style="color: Blue;">set</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">background-color</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">red</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; .</span><span style="color: Blue;">duration</span><span style="color: Olive;">(</span><span style="color: Maroon;">1000</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; .</span><span style="color: Blue;">end</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">move</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#example-11 .box</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; .</span><span style="color: Blue;">set</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">background-color</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">white</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; .</span><span style="color: Blue;">end</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>是不是有点jquery的影子？</p>
<h4><a href="http://jsanim.com/" target="_blank">5.JSAnim</a></h4>
<p><a href="http://www.36ria.com/4685/5-15" rel="attachment wp-att-4702"><img src="http://www.36ria.com/wp-content/uploads/2011/12/5.jpg" alt="" title="5" width="500" height="250" class="alignnone size-full wp-image-4702" /></a></p>
<h4><a href="http://gx.riccardodegni.net/" target="_blank">6.GX</a></h4>
<p><a href="http://www.36ria.com/4685/6-14" rel="attachment wp-att-4703"><img src="http://www.36ria.com/wp-content/uploads/2011/12/6.jpg" alt="" title="6" width="500" height="250" class="alignnone size-full wp-image-4703" /></a><br />
GX非常小，只有10K左右，难得可贵的是gx可以兼容所有浏览器，利用gx可以轻松的利用所有的css属性实现动画。<br />
gx是jquery的插件哦。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#el2</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">gx</span><span style="color: Olive;">({</span><span style="color: #8b0000;">'</span><span style="color: Red;">width</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: Maroon;">200</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">height</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: Maroon;">200</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">color</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">red</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">background-color</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">#ff00ff</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">border-width</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: Maroon;">8</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">border-color</span><span style="color: #8b0000;">'</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">#fa0</span><span style="color: #8b0000;">'</span><span style="color: Olive;">}</span><span style="color: Gray;">, </span><span style="color: Maroon;">4000</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">Linear</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">el</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: Blue;">el</span><span style="color: Gray;">.</span><span style="color: Blue;">html</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Completed!</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<h4><a href="http://leaverou.github.com/animatable/" target="_blank">7.Animatable</a></h4>
<p><a href="http://www.36ria.com/4685/7-12" rel="attachment wp-att-4704"><img src="http://www.36ria.com/wp-content/uploads/2011/12/7.jpg" alt="" title="7" width="500" height="250" class="alignnone size-full wp-image-4704" /></a><br />
纯粹的css3动画解决方案，Animatable更像css3动画的demo集合，如果你正在学习css3动画，那么推荐认真看下。</p>
<h4><a href="http://daneden.me/animate/" target="_blank">8.Animate.css</a></h4>
<p><a href="http://www.36ria.com/4685/8-9" rel="attachment wp-att-4705"><img src="http://www.36ria.com/wp-content/uploads/2011/12/8.jpg" alt="" title="8" width="500" height="250" class="alignnone size-full wp-image-4705" /></a></p>
<h4><a href="http://fx.inetcat.com/" target="_blank">9.$fx</a></h4>
<p><a href="http://www.36ria.com/4685/9-10" rel="attachment wp-att-4706"><img src="http://www.36ria.com/wp-content/uploads/2011/12/9.jpg" alt="" title="9" width="500" height="250" class="alignnone size-full wp-image-4706" /></a><br />
$fx是非常轻量的js动画库，只有3.7k。$fx可以实现一些很有意思的叠加动画（结合背景动画），有兴趣的朋友可以看demo。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">moveBg0</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span><span style="color: Blue;">type</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">backgroundx</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">to</span><span style="color: Gray;">: -</span><span style="color: Maroon;">314</span><span style="color: Gray;">, </span><span style="color: Blue;">step</span><span style="color: Gray;">: -</span><span style="color: Maroon;">1</span><span style="color: Gray;">, </span><span style="color: Blue;">delay</span><span style="color: Gray;">: </span><span style="color: Maroon;">20</span><span style="color: Olive;">}</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">moveBg1</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span><span style="color: Blue;">type</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">backgroundx</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">to</span><span style="color: Gray;">: -</span><span style="color: Maroon;">269</span><span style="color: Gray;">, </span><span style="color: Blue;">step</span><span style="color: Gray;">: -</span><span style="color: Maroon;">1</span><span style="color: Gray;">, </span><span style="color: Blue;">delay</span><span style="color: Gray;">: </span><span style="color: Maroon;">50</span><span style="color: Olive;">}</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">stars</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">getElementById</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">sample1</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">getElementsByTagName</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">div</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">$</span><span style="color: Blue;">fx</span><span style="color: Olive;">(</span><span style="color: Blue;">stars</span><span style="color: Olive;">[</span><span style="color: Maroon;">0</span><span style="color: Olive;">])</span><span style="color: Gray;">.</span><span style="color: Blue;">fxAdd</span><span style="color: Olive;">(</span><span style="color: Blue;">moveBg0</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">fxRun</span><span style="color: Olive;">(</span><span style="color: Green;">null</span><span style="color: Gray;">, -</span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">$</span><span style="color: Blue;">fx</span><span style="color: Olive;">(</span><span style="color: Blue;">stars</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">])</span><span style="color: Gray;">.</span><span style="color: Blue;">fxAdd</span><span style="color: Olive;">(</span><span style="color: Blue;">moveBg1</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">fxRun</span><span style="color: Olive;">(</span><span style="color: Green;">null</span><span style="color: Gray;">, -</span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h4><a href="http://scripty2.com/" target="_blank">10.Scripty2</a></h4>
<p><a href="http://www.36ria.com/4685/10-7" rel="attachment wp-att-4707"><img src="http://www.36ria.com/wp-content/uploads/2011/12/10.jpg" alt="" title="10" width="500" height="250" class="alignnone size-full wp-image-4707" /></a><br />
原文：<a href="http://www.queness.com/post/9999/10-css-and-javascript-animation-plugins-frameworks-and-libraries" target="_blank">http://www.queness.com/post/9999/10-css-and-javascript-animation-plugins-frameworks-and-libraries</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4685/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CommonJS Modules/1.1.1笔记</title>
		<link>http://www.36ria.com/4687</link>
		<comments>http://www.36ria.com/4687#comments</comments>
		<pubDate>Fri, 16 Dec 2011 10:15:12 +0000</pubDate>
		<dc:creator>天河</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4687</guid>
		<description><![CDATA[先简单说明下CommonJS模块。每个模块都有对应的标示符，而标示符有两种：相对标示符与绝对标示符。模块的上下文中，有require、exports以及module三个变量。 &#160; 模块的引入是通过模块中的require函数完成的，参数是要引入的模块标示符，返回值是被引入模块暴露的API。require可以有一个main属性，这个属性是只读的，一般指向主模块的”module”对象（没有主模块时为undefined）。......]]></description>
			<content:encoded><![CDATA[<p>先简单说明下CommonJS模块。每个模块都有对应的标示符，而标示符有两种：相对标示符与绝对标示符。模块的上下文中，有<strong>require</strong>、<strong>exports</strong>以及<strong>module</strong>三个变量。</p>
<p>&nbsp;</p>
<p>模块的引入是通过模块中的<strong>require</strong>函数完成的，参数是要引入的模块标示符，返回值是被引入模块暴露的API。require可以有一个<strong>main</strong>属性，这个属性是只读的，一般指向主模块的”module”对象（没有主模块时为undefined）。比如，在<a href="http://nodejs.org/docs/latest/api/modules.html#accessing_the_main_module">nodejs环境</a>中，你可以使用<strong>require.main === module</strong>来判断当前模块是否为主模块。如果不是沙箱环境，require还可以有一个paths属性，这个属性是一个字符串数组，内容是顶级标示符对应的模块查找目录。paths属性是全局唯一的，对它的修改会影响模块的搜索行为。需要注意的是，<strong>paths</strong>内容的格式是由模块的loader程序决定的，规范没有统一规定。</p>
<p>&nbsp;</p>
<p>模块引入部分最让我费解的是模块出现循环依赖时的处理方式。不过，在<a href="http://yiminghe.iteye.com/blog/1305021">承玉</a>同学的帮助下，终于搞明白了。比如下面的例子：</p>
<p>a.js</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">exports</span><span style="color: Gray;">.</span><span style="color: Blue;">done</span><span style="color: Gray;"> = </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">b</span><span style="color: Gray;"> = </span><span style="color: Blue;">require</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">./b.js</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">exports</span><span style="color: Gray;">.</span><span style="color: Blue;">done</span><span style="color: Gray;"> = </span><span style="color: Green;">true</span><span style="color: Gray;">;</span></li></ol></div>
<p>b.js</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">a</span><span style="color: Gray;"> = </span><span style="color: Blue;">require</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">./a.js</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">in b, a.done = %j</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">a</span><span style="color: Gray;">.</span><span style="color: Blue;">done</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>&nbsp;</p>
<p>如果直接运行a.js，在b.js中引入模块a时，a实际上并没有完全执行。这个时候，按规范的要求，require至少会返回被require时已经执行的部分，这里是exports.done = false。因此，这段代码会输出“in b, a.done = false”。（如果你有兴趣，可以用nodejs测试一下循环依赖的问题。不过需要注意，在nodejs中，模块在第一次执行后，会被缓存下来）</p>
<p>&nbsp;</p>
<p>与引入相反，模块向外界暴露API是通过exports对象实现的。</p>
<p>&nbsp;</p>
<p>模块最后一个属性：”module”有一个必选属性”id”和一个可选属性”uri”。模块的id的值是改模块的顶级标示符，这个值是只读的。而”uri”属性指向该模块所在的资源文件的URI。在沙箱环境里是没有”uri”属性的。</p>
<p>&nbsp;</p>
<p>模块的标示符是一个字符串，内容是由&#8217;/'分割的”terms”，每个”term”都是驼峰式的标示符、”.”或”..”。如果标示符以”.”或”..”开始，该标示符就是相对标示符。相对标示符是相对调用”require”的模块，顶级标示符是相对于模块的根命名空间。最后一点，标示符可以没有”.js”这样的文件后缀。</p>
<p>&nbsp;</p>
<p>个人感觉顶级标示符这里，规范的解释并不是很清晰，使用时还是应该以模块的loader为准。</p>
<p>&nbsp;</p>
<p>整体看下来，<a href="http://wiki.commonjs.org/wiki/Modules/1.1.1">Modules/1.1.1规范</a>还有不少不清楚或有争议的地方，这个在CommonJS的<a href="http://wiki.commonjs.org/wiki/Modules">wiki</a>里也承认。不过模块的组织思想应该不会变了。人们的实践也走在了规范的前面，比如<a href="http://seajs.com/">seajs</a> <img src='http://www.36ria.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4687/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>基于html5和jquery的文件上传组件</title>
		<link>http://www.36ria.com/4566</link>
		<comments>http://www.36ria.com/4566#comments</comments>
		<pubDate>Mon, 31 Oct 2011 14:58:16 +0000</pubDate>
		<dc:creator>飞绿</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[html5教程 异步文件上传]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4566</guid>
		<description><![CDATA[本文介绍一个采用HTML5 API的web应用—上传中心(Upload Center)，允许用户从本地计算机中拖拽图片到浏览器窗口上传图片。有图片预览和上传进度条，这些都可由客户端来控制。上传后，这些图片只是被存储到服务器上了，接下来就可以随意引用了。 点此查看demo 点此下载 什么是HTML5 文件上传 上传文件运用了HTML5的三个新特性：1、新的文件读取api(File Reader API) 2、新的拖拽api(Drag &......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/4566/%e5%9f%ba%e4%ba%8ehtml5%e5%92%8cjquery%e7%9a%84%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e7%bb%84%e4%bb%b6%e2%80%94%e9%a3%9e%e7%bb%bf" rel="attachment wp-att-4580"><img src="http://www.36ria.com/wp-content/uploads/2011/10/基于html5和jquery的文件上传组件—飞绿.png" alt="" title="基于html5和jquery的文件上传组件—飞绿" width="680" height="200" class="alignnone size-full wp-image-4580" /></a><br />
本文介绍一个采用HTML5 API的web应用—上传中心(<b>Upload Center</b>)，允许用户从本地计算机中拖拽图片到浏览器窗口上传图片。有图片预览和上传进度条，这些都可由客户端来控制。上传后，这些图片只是被存储到服务器上了，接下来就可以随意引用了。</p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://demo.tutorialzine.com/2011/09/html5-file-upload-jquery-php/" class="btn-view-demo" target="_blank">点此查看demo</a></li>
<li class="l"><a class="btn-download"  href="http://demo.tutorialzine.com/2011/09/html5-file-upload-jquery-php/html5-file-upload.zip">点此下载</a></li>
</ul>
<p>什么是HTML5 文件上传<br />
上传文件运用了HTML5的三个新特性：1、新的文件读取api(<a href="http://www.html5rocks.com/en/tutorials/file/dndfiles/" target="_blank">File Reader API</a>)  2、新的拖拽api(<a href="https://developer.mozilla.org/en/Using_files_from_web_applications" target="_blank">Drag &#038; Drop API</a>)  3、新的IO-ajax（增加了二进制数据传输）。下面是HTML5文件上传的步骤：</p>
<ol>
<li>1、用户从本地计选择一个或多个文件拖拽到浏览器窗口。支持拖拽的的浏览器会触发一个事件，事件包括一些有用的信息，其中包涵被选中的文件信息。</li>
<li>2、用HTML5的文件读取api，以二进制数据读取被选文件，并存储到内存中。</li>
<li>3、用XMLHttpRequest对象的新方法-<b>sendAsBinary</b>，将数据传到服务器。</li>
</ol>
<p>jQuery插件— <a href="https://github.com/weixiyen/jquery-filedrop" target="_blank">Filedrop</a>已经封装好这些功能，并且提供配置接口来限制上传文件的大小和指定回调函数。非常方便运用到自己的应用中。<br />
目前来看，文件上传只能在firefox和chrome浏览器中使用，但其他主流浏览器的下个版本已经计划支持该功能了。当然对于不支持的浏览器可以简单的放置input file控件来代替。但本文重点是应用HTML5上，这里就不做处理了。</p>
<h4>现在开始，首先是HTML结构</h4>
<p>上传中心的Html结构比较简单。先声明HTML5的doctype，然后引入样式文件和脚本文件-script.js、filedrop插件脚本和jquery库。<br />
html结构如下：<br />
<strong>index.html</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Gray;">!</span><span style="color: #00008b;">DOCTYPE</span><span style="color: Gray;"> </span><span style="color: #00008b;">html</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">html</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">head</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">meta</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">charset</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">utf-8</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">title</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">HTML5 File Drag and Drop Upload with jQuery and PHP | Tutorialzine Demo</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">title</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;!-- Our CSS stylesheet file --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">link</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">rel</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">stylesheet</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">assets/css/styles.css</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;!--[if lt IE 9]&gt;</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;script src=&quot;http://html5shiv.googlecode.com/svn/trunk/html5.js&quot;&gt;&lt;/script&gt;</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;![endif]--&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">head</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">body</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">header</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">h1</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">HTML5 File Upload with jQuery and PHP</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">h1</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">header</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">dropbox</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">span</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">message</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Drop images here to upload. </span><span style="color: Olive;">&lt;</span><span style="color: Green;">br</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;&lt;</span><span style="color: Green;">i</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">(they will only be visible to you)</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">i</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">span</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;!-- Including The jQuery Library --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://code.jquery.com/jquery-1.6.3.min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;!-- Including the HTML5 Uploader plugin --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">assets/js/jquery.filedrop.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;!-- The main script file --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">assets/js/script.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">body</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">html</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>这里<b>div#dropbox</b>会传递给filedrop插件，插件会监听是否有文件被拖拽到div#dropbox上。当上传出错时，展现信息的span会提示错误信息。（如，浏览器不支持HTML5的api时就会显示相应的提示信息）</p>
<p>然后，文件选择后，通过基于jquery的js编码实现图片预览效果。预览html结构如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">preview done</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">span</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">imageHolder</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">img</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">span</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">uploaded</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">span</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">span</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">progressHolder</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">progress</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>本段包括图片预览（img 的src属性会用图片的<a href="http://en.wikipedia.org/wiki/Data_URI_scheme" target="_blank">DataURL</a>填充）和上传进度条的html结构。预览容器的一个class值done，可以使span.uploaded显示（默认情况下该span是隐藏的）。该span用绿色背景标记，表示上传已完成。</p>
<p>html结构完成了，接下来开始脚本编码。<br />
事实上文件上传相关的功能Filedrop插件都封装好了，这里的上传中心只需要运用它，并且将回调的方法传递给它。需要在服务器端写一段php脚本来处理上传的文件，下面一节会讲到。<br />
第一步，写一个辅助的方法来读取文件对象（该对象是文件被选择后由浏览器端创建的，包括如文件名称、文件路劲和文件大小等的属性），然后生成预览的html结构。<br />
<strong>assets/js/script.js</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">template</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;div class=&quot;preview&quot;&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;span class=&quot;imageHolder&quot;&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;img /&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;span class=&quot;uploaded&quot;&gt;&lt;/span&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;/span&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;div class=&quot;progressHolder&quot;&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;div class=&quot;progress&quot;&gt;&lt;/div&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;/div&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;/div&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">createImage</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">preview</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: Blue;">template</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">image</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">img</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">preview</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">reader</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">FileReader</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">image</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;"> = </span><span style="color: Maroon;">100</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">image</span><span style="color: Gray;">.</span><span style="color: Blue;">height</span><span style="color: Gray;"> = </span><span style="color: Maroon;">100</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">reader</span><span style="color: Gray;">.</span><span style="color: Blue;">onload</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">e</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// e.target.result holds the DataURL which</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// can be used as a source of the image:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">image</span><span style="color: Gray;">.</span><span style="color: Blue;">attr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">src</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">target</span><span style="color: Gray;">.</span><span style="color: Blue;">result</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// Reading the file as a DataURL. When finished,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// this will trigger the onload function above:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">reader</span><span style="color: Gray;">.</span><span style="color: Blue;">readAsDataURL</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">message</span><span style="color: Gray;">.</span><span style="color: Blue;">hide</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">preview</span><span style="color: Gray;">.</span><span style="color: Blue;">appendTo</span><span style="color: Olive;">(</span><span style="color: Blue;">dropbox</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// Associating a preview container</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// with the file, using jQuery's $.data():</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.</span><span style="color: Blue;">data</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Gray;">,</span><span style="color: Blue;">preview</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p><b>Template</b>用于创建图片预览的HTML结构。获取图片的DataURL（64位编码的图片数据），然后赋值给图片的src。然后创建好的预览会被添加到div#dropbox中。现在还剩下filedrop的回调处理了。<br />
<strong>assets/js/script.js</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">dropbox</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#dropbox</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">message</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">.message</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">dropbox</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">dropbox</span><span style="color: Gray;">.</span><span style="color: Blue;">filedrop</span><span style="color: Olive;">({</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// The name of the $_FILES entry:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">paramname</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">pic</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">maxfiles</span><span style="color: Gray;">: </span><span style="color: Maroon;">5</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">maxfilesize</span><span style="color: Gray;">: </span><span style="color: Maroon;">2</span><span style="color: Gray;">, </span><span style="color: #ffa500;">// in mb</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">url</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">post_file.php</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">uploadFinished</span><span style="color: Gray;">:</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Gray;">,</span><span style="color: Blue;">file</span><span style="color: Gray;">,</span><span style="color: Blue;">response</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.</span><span style="color: Blue;">data</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">done</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// response is the JSON object that post_file.php returns</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">error</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">err</span><span style="color: Gray;">, </span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">switch</span><span style="color: Olive;">(</span><span style="color: Blue;">err</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">case</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;">BrowserNotSupported</span><span style="color: #8b0000;">'</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">showMessage</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Your browser does not support HTML5 file uploads!</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">break</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">case</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;">TooManyFiles</span><span style="color: #8b0000;">'</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Too many files! Please select 5 at most!</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">break</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">case</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;">FileTooLarge</span><span style="color: #8b0000;">'</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Gray;">.</span><span style="color: Blue;">name</span><span style="color: Gray;">+</span><span style="color: #8b0000;">'</span><span style="color: Red;"> is too large! Please upload files up to 2mb.</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">break</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">default</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">break</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// Called before each upload is started</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">beforeEach</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">file</span><span style="color: Gray;">.</span><span style="color: Blue;">type</span><span style="color: Gray;">.</span><span style="color: Blue;">match</span><span style="color: Olive;">(</span><span style="color: #8b0000;">/</span><span style="color: Red;">^image</span><span style="color: Navy;">\/</span><span style="color: #8b0000;">/</span><span style="color: Olive;">)){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Only images are allowed!</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// Returning false will cause the</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// file to be rejected</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">uploadStarted</span><span style="color: Gray;">:</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Gray;">, </span><span style="color: Blue;">file</span><span style="color: Gray;">, </span><span style="color: Blue;">len</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">createImage</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">progressUpdated</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Gray;">, </span><span style="color: Blue;">file</span><span style="color: Gray;">, </span><span style="color: Blue;">progress</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.</span><span style="color: Blue;">data</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">.progress</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Olive;">(</span><span style="color: Blue;">progress</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">template</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">...</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">createImage</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// ... see above ...</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">showMessage</span><span style="color: Olive;">(</span><span style="color: Blue;">msg</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">message</span><span style="color: Gray;">.</span><span style="color: Blue;">html</span><span style="color: Olive;">(</span><span style="color: Blue;">msg</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>然后，被拖拽到<b>div#dropbox</b>的有效的图片文件通过<b>post_file.php</b>上传到服务器上。</p>
<h4>PHP 处理：</h4>
<p>在php服务器端，正常上传的图片和被拖拽上传的图片不会有区别。这意味着在服务器端只需要提供一个回调来处理上传的文件。<br />
<strong>post_file.php</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// If you want to ignore the uploaded files,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// set $demo_mode to true;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #00008b;">$demo_mode</span><span style="color: Gray;"> = </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #00008b;">$upload_dir</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">uploads/</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #00008b;">$allowed_ext</span><span style="color: Gray;"> = </span><span style="color: Green;">array</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">jpg</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">jpeg</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">png</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">gif</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">strtolower</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_SERVER</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">REQUEST_METHOD</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])</span><span style="color: Gray;"> != </span><span style="color: #8b0000;">'</span><span style="color: Red;">post</span><span style="color: #8b0000;">'</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">exit_status</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Error! Wrong HTTP method!</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">array_key_exists</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">pic</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #00008b;">$_FILES</span><span style="color: Olive;">)</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: #00008b;">$_FILES</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">pic</span><span style="color: #8b0000;">'</span><span style="color: Olive;">][</span><span style="color: #8b0000;">'</span><span style="color: Red;">error</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">$pic</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$_FILES</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">pic</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">in_array</span><span style="color: Olive;">(</span><span style="color: Blue;">get_extension</span><span style="color: Olive;">(</span><span style="color: #00008b;">$pic</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">name</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])</span><span style="color: Gray;">,</span><span style="color: #00008b;">$allowed_ext</span><span style="color: Olive;">)){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">exit_status</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Only </span><span style="color: #8b0000;">'</span><span style="color: Gray;">.</span><span style="color: Blue;">implode</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">,</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #00008b;">$allowed_ext</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: #8b0000;">'</span><span style="color: Red;"> files are allowed!</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: #00008b;">$demo_mode</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// File uploads are ignored. We only log them.</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">$line</span><span style="color: Gray;"> = </span><span style="color: Blue;">implode</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Green;">array</span><span style="color: Olive;">(</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">date</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">r</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">, </span><span style="color: #00008b;">$_SERVER</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">REMOTE_ADDR</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">,</span><span style="color: #00008b;">$pic</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">size</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">, </span><span style="color: #00008b;">$pic</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">name</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">file_put_contents</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">log.txt</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$line</span><span style="color: Gray;">.</span><span style="color: Blue;">PHP_EOL</span><span style="color: Gray;">, </span><span style="color: Blue;">FILE_APPEND</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">exit_status</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Uploads are ignored in demo mode.</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// Move the uploaded file from the temporary</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// directory to the uploads folder:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">move_uploaded_file</span><span style="color: Olive;">(</span><span style="color: #00008b;">$pic</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">tmp_name</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">, </span><span style="color: #00008b;">$upload_dir</span><span style="color: Gray;">.</span><span style="color: #00008b;">$pic</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">name</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">exit_status</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">File was uploaded successfuly!</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">exit_status</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Something went wrong with your upload!</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// Helper functions</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">exit_status</span><span style="color: Olive;">(</span><span style="color: #00008b;">$str</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">echo</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">json_encode</span><span style="color: Olive;">(</span><span style="color: Green;">array</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">status</span><span style="color: #8b0000;">'</span><span style="color: Gray;">=&gt;</span><span style="color: #00008b;">$str</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">exit</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">get_extension</span><span style="color: Olive;">(</span><span style="color: #00008b;">$file_name</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">$ext</span><span style="color: Gray;"> = </span><span style="color: Blue;">explode</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">.</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$file_name</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">$ext</span><span style="color: Gray;"> = </span><span style="color: Blue;">array_pop</span><span style="color: Olive;">(</span><span style="color: #00008b;">$ext</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">strtolower</span><span style="color: Olive;">(</span><span style="color: #00008b;">$ext</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
</ol></div>
<p>该段脚本执行监听http请求和验证上传的文件。（如果php脚本中不使用move_upload_file()方法上传文件，那么文件将自动在请求结束后予以删除。）</p>
<h4>最后，给上传中心添加样式。</h4>
<p>下面列出部分样式，一些与上传不相关的没有这里没有列出来。如果想看完整的样式，可以查看style.css<br />
<strong>assets/css/styles.css</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">/</span><span style="color: Blue;">*</span><span style="color: Gray;">-------------------------</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">Dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Element</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; --------------------------</span><span style="color: Blue;">*</span><span style="color: Gray;">/</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">background:</span><span style="color: Gray;">url('../img/</span><span style="color: #00008b;">background</span><span style="color: Gray;">_tile_</span><span style="color: Maroon;">3</span><span style="color: Gray;">.jpg')</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">border-radius:</span><span style="color: Maroon;">3</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">position:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">relative</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">margin:</span><span style="color: Maroon;">80</span><span style="color: Red;">px</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">auto</span><span style="color: Gray;"> </span><span style="color: Maroon;">90</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">min-height:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">290</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">overflow:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">hidden</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">padding-bottom:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">40</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">width:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">990</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">box-shadow:</span><span style="color: Maroon;">0</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">4</span><span style="color: Red;">px</span><span style="color: Gray;"> rgba(</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0.3</span><span style="color: Gray;">) </span><span style="color: Red;">inset</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;"> -</span><span style="color: Maroon;">3</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">2</span><span style="color: Red;">px</span><span style="color: Gray;"> rgba(</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0.1</span><span style="color: Gray;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.message</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">font-size:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">11</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">text-align:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">center</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">padding-top:</span><span style="color: Maroon;">160</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">display:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">block</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.message</span><span style="color: Gray;"> </span><span style="color: Blue;">i</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">color:</span><span style="color: #00008b;">#ccc</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">font-size:</span><span style="color: Maroon;">10</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Navy;">:before</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">border-radius:</span><span style="color: Maroon;">3</span><span style="color: Red;">px</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">3</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; /</span><span style="color: Blue;">*</span><span style="color: Gray;">-------------------------</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">Image</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Previews</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; --------------------------</span><span style="color: Blue;">*</span><span style="color: Gray;">/</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.preview</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">width:</span><span style="color: Maroon;">245</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">height:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">215</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">float:</span><span style="color: Red;">left</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">margin:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">55</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">60</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">position:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">relative</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">text-align:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">center</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.preview</span><span style="color: Gray;"> </span><span style="color: Blue;">img</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">max-width:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">240</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">max-height:</span><span style="color: Maroon;">180</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">border:</span><span style="color: Maroon;">3</span><span style="color: Red;">px</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">solid</span><span style="color: Gray;"> </span><span style="color: #00008b;">#fff</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">display:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">block</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">box-shadow:</span><span style="color: Maroon;">0</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">2</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: #00008b;">#000</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.imageHolder</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">display:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">inline-block</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">position:</span><span style="color: Red;">relative</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.uploaded</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">position:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">absolute</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">top:</span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">left:</span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">height:</span><span style="color: Maroon;">100</span><span style="color: Red;">%</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">width:</span><span style="color: Maroon;">100</span><span style="color: Red;">%</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">background:</span><span style="color: Gray;"> url('../img/done.png') </span><span style="color: Red;">no-repeat</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">center</span><span style="color: Gray;"> centerrgba(</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">0.5</span><span style="color: Gray;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">display:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">none</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.preview.done</span><span style="color: Gray;"> </span><span style="color: Blue;">.uploaded</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">display:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">block</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; /</span><span style="color: Blue;">*</span><span style="color: Gray;">-------------------------</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">Progress</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Bars</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; --------------------------</span><span style="color: Blue;">*</span><span style="color: Gray;">/</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.progressHolder</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">position:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">absolute</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">background-color:</span><span style="color: #00008b;">#252f38</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">height:</span><span style="color: Maroon;">12</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">width:</span><span style="color: Maroon;">100</span><span style="color: Red;">%</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">left:</span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">bottom:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">box-shadow:</span><span style="color: Maroon;">0</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">2</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: #00008b;">#000</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.progress</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">background-color:</span><span style="color: #00008b;">#2586d0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">position:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">absolute</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">height:</span><span style="color: Maroon;">100</span><span style="color: Red;">%</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">left:</span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">width:</span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">box-shadow:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;"> rgba(</span><span style="color: Maroon;">255</span><span style="color: Gray;">, </span><span style="color: Maroon;">255</span><span style="color: Gray;">, </span><span style="color: Maroon;">255</span><span style="color: Gray;">, </span><span style="color: Maroon;">0.4</span><span style="color: Gray;">) </span><span style="color: Red;">inset</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; -</span><span style="color: Green;">moz-transition:</span><span style="color: Maroon;">0.25</span><span style="color: Gray;">s</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; -</span><span style="color: Green;">webkit-transition:</span><span style="color: Maroon;">0.25</span><span style="color: Gray;">s</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -</span><span style="color: Green;">o-transition:</span><span style="color: Maroon;">0.25</span><span style="color: Gray;">s</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">transition:</span><span style="color: Maroon;">0.25</span><span style="color: Gray;">s</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">#dropbox</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.preview.done</span><span style="color: Gray;"> </span><span style="color: Blue;">.progress</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">width:</span><span style="color: Maroon;">100</span><span style="color: Red;">%</span><span style="color: Gray;"> !important</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>Div.progress绝对定位。改变它的width（百分数值）来做进度条的显示。这里可以应用jquery实现动画效果。<br />
到这里，HTML5的上传中心完成了。可以将它运用到文件上传服务、html5画廊、文件管理或别的新应用中。记得留下你的建议和意见！</p>
<p>本文翻译自<a href="http://tutorialzine.com/2011/09/html5-file-upload-jquery-php/">《HTML5 File Uploads with jQuery》</a>&#8211; <a href="http://demo.tutorialzine.com/2011/09/html5-file-upload-jquery-php/" target="_blank">Demo演示</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4566/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>未来的web基础——SPDY </title>
		<link>http://www.36ria.com/4526</link>
		<comments>http://www.36ria.com/4526#comments</comments>
		<pubDate>Fri, 30 Sep 2011 15:34:21 +0000</pubDate>
		<dc:creator>天河</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4526</guid>
		<description><![CDATA[前端应用的许多优化都是围绕网络开展的。Yahoo的35条网站优化实践中第一条便是Minimize HTTP Requests。前端工程师们为这些优化做了许多努力与探索，比如CSS sprits，比如CDN combo。天河就经常做CSS sprits，这个虽然有自动化工具。不过尴尬的是，主要是半自动化工具，还是要做部分工作来保证的。于是搞个CSS sprits常常花上小半天时间（苦逼的活呀）。 最近看了些关于SPDY的文章，忽......]]></description>
			<content:encoded><![CDATA[<p>前端应用的许多优化都是围绕网络开展的。Yahoo的35条网站优化实践中第一条便是Minimize HTTP Requests。前端工程师们为这些优化做了许多努力与探索，比如CSS sprits，比如CDN combo。天河就经常做CSS sprits，这个虽然有自动化工具。不过尴尬的是，主要是半自动化工具，还是要做部分工作来保证的。于是搞个CSS sprits常常花上小半天时间（苦逼的活呀）。</p>
<p>最近看了些关于SPDY的文章，忽然觉得，如果类似SPDY这样的中间协议（TCP之上，HTTP的补充）被大量应用了，其实我们就不需要太刻意关注最小化HTTP请求数了（YY中…）。支持一个TCP连接中无限的并发HTTP请求，是最吸引我的一个SPDY特性了。</p>
<p>如今，大家写的web应用都是通过HTTP与TCP协议传输的。TCP协议工作在传输层，HTTP协议则工作在应用层。不幸的是，今天在web上传播的内容与10年前有着显著的区别，HTTP传输已经渐渐无法满足人们的需要了。</p>
<ul>
<li> 每个HTTP连接只请求一个资源（HTTP pipelining做了改善，不过大大增加了复杂度，并不流行）。浏览器只好通过建立多个连接来解决此问题（你应该刻意了解过各主流浏览器支持的并发连接数吧）。</li>
<li>HTTP只允许由客户端发起请求。纵使服务端知道客户端需要一个资源，它也没有相关机制来通知客户端。服务端只能等待客户端发送一个请求。</li>
<li>未压缩的请求及响应头。现在的应用普遍使用更多的cookie、客户端自定义扩展等，一个典型的请求头还是不小的。对于猫或者ADSL这种上行带宽非常低的连接来说，还是很有影响的。</li>
<li>冗余的头。HTTP头在同一个会话里是反复发送的。但是，头信息中的User-Agent，Host以及Accept*等固定信息是不需要重复发送的。</li>
<li>非强制的数据压缩。</li>
</ul>
<p>这么多的HTTP缺点都是Google罗列的，是SPDY协议努力的方向。SPDY希望实现降低一半的页面加载时间（据实验结果看，已经接近这个目标了），同时避免增加部署的复杂度。SPDY的具体目标有：</p>
<ul>
<li>允许多个并发HTTP请求共用一个TCP会话。</li>
<li>压缩HTTP头，舍弃不必要的头信息。</li>
<li>协议要易于实现并且高效。</li>
<li>强制使用SSL传输协议，以换取更好的安全性和对现有网络系统的兼容。虽然SSL也会带来一些延迟，但Google相信长远地看，未来的web离不开安全的网络连接。</li>
<li>允许服务端向客户端发起一个会话，以及向客户端推送数据。</li>
</ul>
<p>简单说下SPDY的设计及特性。</p>
<p><img class="alignnone" title="SPDY" src="http://dev.chromium.org/_/rsrc/1258490355439/spdy/spdy-whitepaper/soarjOjSeS5hoFYvjtAnxCg.png" alt="" width="267" height="132" /></p>
<p>如上图，SPDY在SSL之上增加了一个session层，用来支持在一个TCP连接里实现多路复用的交叉流。原有的HTTP GET及POST消息格式保持不变；不过，SPDY制定了一个新的用于编码及传输的帧格式。流是双向的，可以由客户端或服务端发起。</p>
<p>SPDY特性分为基本特性（默认开启）与高级特性（可选启用）两部分。都为降低网络延迟努力。<br />
基本特性有：</p>
<ul>
<li>多路复用流。SPDY实现了单TCP连接中无限制的并发流。由于请求在单个信道内是交叉的，TCP的效率会更高。</li>
<li>请求优先级。虽然可以并发请求，但网络总有可能堵塞，所以还是要给请求分下优先级。</li>
<li>压缩HTTP头，舍弃不必要的头信息。</li>
</ul>
<p>高级特性有：</p>
<ul>
<li>Server push。就是允许服务端发起通信。</li>
<li>Server hint。服务端可以提示客户端可以获取某某资源了。</li>
</ul>
<p>好了，先介绍这么多。如果你和我一样，好奇SPDY怎么应用，可以在Chrome里打开个gmail啥的，然后打开这个链接满足下好奇心。<br />
chrome://net-internals/#events&amp;q=type:SPDY_SESSION%20is:active</p>
<p>其实发现想细致了解里面各种名词，真不是一篇文章能介绍清楚的。天河也查了好久，稍详细的介绍跟实践待续哈。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4526/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>javascript编程容易出现的11个错误</title>
		<link>http://www.36ria.com/4479</link>
		<comments>http://www.36ria.com/4479#comments</comments>
		<pubDate>Wed, 21 Sep 2011 06:13:23 +0000</pubDate>
		<dc:creator>飞绿</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4479</guid>
		<description><![CDATA[javascript是比较容易学的。但是，对于这门语言需要有一些值得注意的地方。本文将指出javascript编程中可能犯过的10个错误 错误1-使用全局变量 如果你刚开始javascript编程，可能会觉得全局变量很好用。事实上，刚开始javascript编程，你可能不知道使用全局变量会带来什么麻烦。在同一个页面中，全局变量可以在任何内嵌的javascript代码段中或是该页面加载的不同的js文件中，都能......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/4479/javascript-11-mistake20110921" rel="attachment wp-att-4505"><img src="http://www.36ria.com/wp-content/uploads/2011/09/javascript-11-mistake20110921.png" alt="javascript-11-mistake" title="javascript-11-mistake20110921" width="680" height="200" class="alignnone size-full wp-image-4505" /></a><br />
javascript是比较容易学的。但是，对于这门语言需要有一些值得注意的地方。本文将指出javascript编程中可能犯过的10个错误</p>
<h4>错误1-使用全局变量</h4>
<p>如果你刚开始javascript编程，可能会觉得全局变量很好用。事实上，刚开始javascript编程，你可能不知道使用全局变量会带来什么麻烦。在同一个页面中，全局变量可以在任何内嵌的javascript代码段中或是该页面加载的不同的js文件中，都能访问到。这听起来很强大，是吗？这就使得全局变量可以随时随地的被修改赋值。<br />
事实上这样很糟！<br />
这样做会导致变量在意料之外被修改重写。假设有一个网店，需要用javascript计算并显示购物车所有商品的价格总和（当然，服务器端还会进行重新计算，这里只是为了增强用户的体验）。可能会编写代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">total</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">, </span><span style="color: #ffa500;">// total price</span></li>
<li><span style="color: Blue;">tax</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0.05</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// 5%</span></li></ol></div>
<p>现在，还需要用javascript代码在网站上展示一些信息，或则是做一个商品仓库。代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">total</span><span style="color: Gray;"> = </span><span style="color: Maroon;">15</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// number of tweets pulled from twitter</span></li></ol></div>
<p>或则是如下代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">tax</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: #ffa500;">/* ... */</span><span style="color: Gray;"> </span><span style="color: Olive;">}</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// Trigger Animation eXperience function</span></li></ol></div>
<p>现在，出现问题了：两个重要的变量被重写，但可能还没被意识到。这样代码运行会出错，会花费很多时间来跟踪和修复该错误。<br />
那该如何解决呢？简言之—“封装”：当然封装有很多方法可以实现。第一种做法是将代码放入一个匿名的自调函数中。代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">total</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">, </span><span style="color: Blue;">tax</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0.05</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// other code</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}())</span><span style="color: Gray;">;</span></li></ol></div>
<p>这样做，在函数外部是绝对不能访问到函数内部定义的变量。这就形成了个人的代码空间，但是这样就不能公开部分方法或属性。例如，想要创建一个购物车，定义一个总价的变量，作为公共属性，这种情形下可以采用模块式编程。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">cartTotaler</span><span style="color: Gray;"> = </span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">total</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">; </span><span style="color: Blue;">tax</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0.05</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// other code</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">addItem</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">item</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">removeItem</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">item</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">calculateTitle</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}())</span><span style="color: Gray;">;</span></li></ol></div>
<p><strong>关于全局变量有一点值得注意，如果不用关键词var来声明创建变量，那么javascript引擎会默认将该变量定义为全局变量。</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">tax</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0.05</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">totalPrice</span><span style="color: Gray;"> = </span><span style="color: Maroon;">100</span><span style="color: Gray;"> + </span><span style="color: Olive;">(</span><span style="color: Maroon;">100</span><span style="color: Gray;"> * </span><span style="color: Blue;">tax</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// 105</span></li></ol></div>
<p>这里的变量tax在函数外部也是可以被访问的，因为在定义tax的时候没有使用var关键词。</p>
<h4>错误2-不加分号</h4>
<p>每句javascript语句必须以分号结尾。在编程时如果忘了加分号，这时javascript编解析器会自动加上。那我们在编程的时候是不是就可以完全不用浪费时间去加分号呢？<br />
但是在一些语句中，分号是必不可少的。如for循环语句中的分号是必不可少的，否则会报语法错误。那么语句末尾的分号呢？<br />
Javascript社区已经讨论过该问题。下面是本文的看法：你的代码，只要是被javascript解析器修改过（即便是很小的修改，如添加分号），就可能会出现一些你意料之外的结果。看看下面这段javascript代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">returnPerson</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">name</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">name</span><span style="color: Gray;"> : </span><span style="color: Blue;">name</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li></ol></div>
<p>该方法看起来会返回一个对象，但事实上，javascript解析器会在return后面紧接着添加一个分号，这就导致该函数返回undefined。Return后的对象会被忽略。解决方法很简单，代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">name</span><span style="color: Gray;"> : </span><span style="color: Blue;">name</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li></ol></div>
<p>在javascript编程中应严格要求自己添加分号，这个习惯并不难。当然，作为一名web开发人员，你可能也会用到其他的语言（如php），这些语言都是严格要求以分号结尾的。你可以把这些编程语言的习惯带到javascript编程中来。<br />
作者注解：除了你完全肯定可以被忽略的地方，你都不可以忽略添加分号。</p>
<h4>错误3-使用==</h4>
<p>如果你问一个javascript编程者，在javascript编程中通常会犯什么错误。他/她很可能会说，使用= = =来代替= =。这是什么意思呢？<br />
试试下面的代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Maroon;">1</span><span style="color: Gray;"> == </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">it's true!</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li></ol></div>
<p>代码如你所愿的输出了“it’s true！”那再试试下面的代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Maroon;">1</span><span style="color: Gray;"> == </span><span style="color: #8b0000;">'</span><span style="color: Red;">1</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">it's true!</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li></ol></div>
<p>这段代码在控制台中尽然也输出了“it’s true!”，但其实这并不是你所期望的输出。这里的==运算符转换了运算数的类型，从而使得两个运算数相等了。这里if语句中的==运算符使得右边string类型的“1”变成了number型的1。<br />
想要得到你想要的输出，这里应该用= = =运算符来代替= =。===不会强制转换运算数的类型，这样才能如你所期望的。同样地，用!= =运算符来替换!=。下面是用==来做比较，得出的结果令人意外。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #8b0000;">''</span><span style="color: Gray;"> == </span><span style="color: #8b0000;">'</span><span style="color: Red;">0</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> </span><span style="color: #ffa500;">// false</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;">0</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> == </span><span style="color: #8b0000;">''</span><span style="color: Gray;"> </span><span style="color: #ffa500;">// true</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">false</span><span style="color: Gray;"> == </span><span style="color: #8b0000;">'</span><span style="color: Red;">0</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> </span><span style="color: #ffa500;">// true</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;"> \t\r\n </span><span style="color: #8b0000;">'</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: #ffa500;">// true</span></li></ol></div>
<h4>错误4-使用数据类型的包装对象</h4>
<p>Javascript提供了各个数据类型的包装对象。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Teal;">Number</span><span style="color: Olive;">(</span><span style="color: Maroon;">10</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Teal;">String</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">hello</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Boolean</span><span style="color: Olive;">(</span><span style="color: Green;">true</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Object</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Teal;">Array</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">one</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">two</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">three</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>首先，它们并不好用。上面的代码可以用更少的代码来实现，如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Maroon;">10</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">hello</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">true</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">[</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">one</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">two</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">three</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li></ol></div>
<p>但是这两种方式还是有所不同的。下面是douglas crockford的观点：<br />
例如用new Boolean(false)创建一个对象，该对象有一个方法valueOf，调用该方法会返回构造器的值。<br />
这意味着，如果运行typeof new Number(10)或者是typeof new String(‘hello’),将返回‘object’，而不是’number’或’string’.另外，用数据类型的包装还会引发一些意料之外的结果。<br />
那么为什么javascript要提供数据类型的包装对象呢？这是因为javascript解析器内部会调用。简单的数据类型是没有方法的（因为它们不是对象），所以当调用简单类型的数据的方法时（如’hello’.replace(‘ello’, ‘i’)）,javascript会调用String包装对象来创建一个临时的string对象，然后调用该对象的方法，完成调用后会删除这个临时对象。<br />
所以不要用数据类型的包装对象来创建简单类型的数据。<br />
注意：本来不用这么说明的，但本文还是想明确的告诉初学者：不是说不使用它们和new（尽管有些是推荐使用的），这里需要特别指出的是，这个建议特别针对这些数据类型，如：number、string、Boolean、array和空对象。</p>
<h4>错误5-在使用for-in时不对属性检查</h4>
<p>我们都很熟悉遍历数组，但是你可能还希望能遍历对象的属性。（题外话：array事实上是属性名为数字的对象）。这是可以用for-in循环语句，代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">prop</span><span style="color: Gray;">, </span><span style="color: Blue;">obj</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: Blue;">name</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Joe</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">job</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Coder</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">age</span><span style="color: Gray;">: </span><span style="color: Maroon;">25</span><span style="color: Gray;"> </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">for</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">prop</span><span style="color: Gray;"> </span><span style="color: Green;">in</span><span style="color: Gray;"> </span><span style="color: Blue;">obj</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Blue;">prop</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> + </span><span style="color: Blue;">obj</span><span style="color: Olive;">[</span><span style="color: Blue;">prop</span><span style="color: Olive;">])</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li></ol></div>
<p>运行上面的代码，输出如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">name</span><span style="color: Gray;">: </span><span style="color: Blue;">Joe</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">job</span><span style="color: Gray;">: </span><span style="color: Blue;">Coder</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">age</span><span style="color: Gray;">: </span><span style="color: Maroon;">25</span></li></ol></div>
<p>但是，浏览器中for-in遍历对象属性和方法时会包括对象原型链上的所有属性和方法。但绝大多数属性是不希望被枚举出来的。可以用hasOwnProperties方法来检测属性是否属于对象。代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Teal;">Function</span><span style="color: Gray;"> </span><span style="color: Blue;">Dog</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">name</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">name</span><span style="color: Gray;"> = </span><span style="color: Blue;">name</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Dog</span><span style="color: Gray;">.</span><span style="color: Blue;">prototype</span><span style="color: Gray;">.</span><span style="color: Blue;">legs</span><span style="color: Gray;"> = </span><span style="color: Maroon;">4</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Dog</span><span style="color: Gray;">.</span><span style="color: Blue;">prototype</span><span style="color: Gray;">.</span><span style="color: Blue;">speak</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">woof!</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">d</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Dog</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Bowser</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">for</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">prop</span><span style="color: Gray;"> </span><span style="color: Green;">in</span><span style="color: Gray;"> </span><span style="color: Blue;">d</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">prop</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> + </span><span style="color: Blue;">d</span><span style="color: Olive;">[</span><span style="color: Blue;">prop</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">=====</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">for</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">prop</span><span style="color: Gray;"> </span><span style="color: Green;">in</span><span style="color: Gray;"> </span><span style="color: Blue;">d</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">d</span><span style="color: Gray;">.</span><span style="color: Blue;">hasOwnProperty</span><span style="color: Olive;">(</span><span style="color: Blue;">prop</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">prop</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> + </span><span style="color: Blue;">d</span><span style="color: Olive;">[</span><span style="color: Blue;">prop</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// Output</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// name: Bowser</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// legs: 4</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// speak: function () {</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">woof!</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// }</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// =====</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// name: Bowser</span></li></ol></div>
<p>有时，只希望枚举列出对象的的属性，不包括方法。可以用typeof方法，代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">for</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">prop</span><span style="color: Gray;"> </span><span style="color: Green;">in</span><span style="color: Gray;"> </span><span style="color: Blue;">d</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">typeof</span><span style="color: Gray;"> </span><span style="color: Blue;">d</span><span style="color: Olive;">[</span><span style="color: Blue;">prop</span><span style="color: Olive;">]</span><span style="color: Gray;"> !== </span><span style="color: #8b0000;">'</span><span style="color: Red;">function</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">prop</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> + </span><span style="color: Blue;">d</span><span style="color: Olive;">[</span><span style="color: Blue;">prop</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li></ol></div>
<p>不管怎么样，在用for-in循环时要确保对属性进行检测，以避免得到你意料之外的结果。</p>
<h4>错误6-使用with或eval</h4>
<p>幸运的是，现在大部分javascript教程都不会教你使用with或eval。但是一些老教程或名气不大的资料时（因为有时候好的资料在网上很难找到），可能会发现有使用with或eval。<br />
下面是两个不用with的主要原因：<br />
1、 它会降低代码性能<br />
2、 不易于代码阅读</p>
<p>第一点是它与生俱来的。第二点，看看下面的代码，这里用with访问person对象的name、age属性。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">person</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: Blue;">name</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Joe</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">age</span><span style="color: Gray;"> : </span><span style="color: Maroon;">10</span><span style="color: Gray;"> </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">with</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">person</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Blue;">name</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// Joe</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Blue;">age</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// 10</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li></ol></div>
<p>但是，若果有一个变量和对象其中一个属性同名，那用with会发生什么呢？事实上，这种情况下，访问变量会引用那个变量而不是对象的属性。另一个值得注意的是，在with语句中，如果访问的属性不存在或对象不存在，就不能给对象添加属性，同时会使得作用域链上with作用域后的那个作用域中创建一个变量。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">person</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: Blue;">name</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Joe</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">age</span><span style="color: Gray;"> : </span><span style="color: Maroon;">10</span><span style="color: Gray;"> </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">name</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Billy</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">with</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">person</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Blue;">name</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// Billy</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">job</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Designer</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Blue;">person</span><span style="color: Gray;">.</span><span style="color: Blue;">job</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// undefined;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Blue;">job</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// Designer</span></li></ol></div>
<p>那eval呢？它可以接受一个字符串参数，并且解析执行改字符串。</p>
<p>这听起来没有什么不好，甚至觉得很棒，对吗？但问题就是这太棒了！与其将一连串字符串将给它来解析执行，为什么不直接编写在程序中呢？不该这么做的原因如下：</p>
<ol>
<li>完全可以直接编写在代码中。</li>
<li>eval解析很慢的，性能跟with差不多。</li>
</ol>
<p>eval的用法是在非运行时运行环境。可以从服务器端或客户端获取代码。难道真的想你的网站用户来底控制你的代码？这样不就意味着你的网站向无数的黑客敞开了大门。用eval就好比，离开了家，并告诉大家钥匙就是门口垫子下面。如果你爱自己或你的用户，就不要用eval。</p>
<h4>错误7-在用parseInt时不用基数</h4>
<p>Javascript提供了一个非常有用的方法parseInt，它可以将字符串转换为数值。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">parseInt</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">200</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// 200</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">parseInt</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">043</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// 35</span></li></ol></div>
<p>结果是不是令人觉得意外？第二句为什么不是43？事实上，parseInt方法不仅仅是只能把字符串当做十进制数来转换。当parseInt的第一个参数是以0开头，它就会把字符串当作是八进制数来转换。这就是不使用基数出现的意料之外结果。第二个参数&#8211;基数，会指定parseInt方法把字符串当做什么进制的数来转换。（当然，它的返回值永远是十进制数）</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">parseInt</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">020</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Maroon;">10</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// 20</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">parseInt</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">100</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Maroon;">2</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// 4</span></li></ol></div>
<h4>错误8 if和while语句不使用{}</h4>
<p>Javascript最明显的特点是语法要求不那么严格。但正是这样的特点，有时会带来麻烦。If和while语句的{}就会引起一些麻烦。{}是根据if条件成立时执行代码语句的条数来用的。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">true</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">inside the if statement</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>这里看起来没什么问题，因为这里的执行语句只有一句</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">arr</span><span style="color: Gray;"> = </span><span style="color: Olive;">[</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">one</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">two</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">three</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">four</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">five</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">six</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">seven</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">eight</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">nine</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ten</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">]</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">i</span><span style="color: Gray;"> = </span><span style="color: Blue;">arr</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;"> - </span><span style="color: Blue;">i</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">while</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">arr</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Gray;">--</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>但是这样做不易于阅读：首先，不用{}代码结构看起来不是那么清晰。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">true</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">inside the if-statement.</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">outside the if-statement.</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>看看上面的代码，第二行console语句是不属于if执行语句的，但是这里它看起来像是if的执行语句。使用{}会使结构更清晰。同时，如果你想在if的执行代码中添加一句，也需要使用{}。习惯使用{}并不是一件难事。</p>
<h4>错误9-单个单个地插入dom元素</h4>
<p>这并不是javascript自身的问题。99%100的javascript编程都会涉及DOM操作，在对DOM操作上会犯很多错误，但这是最明显的一个。<br />
DOM操作会使浏览器重绘页面，所以如果有一连串的元素一个接一个的插入页面中，这会急剧增加浏览器渲染页面的负担。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">list</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">getElementById</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">list</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">items</span><span style="color: Gray;"> = </span><span style="color: Olive;">[</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">one</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">two</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">three</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">four</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">]</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">el</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">for</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">i</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">; </span><span style="color: Blue;">items</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">; </span><span style="color: Blue;">i</span><span style="color: Gray;">++</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">el</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">createElement</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">li</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">el</span><span style="color: Gray;">.</span><span style="color: Blue;">appendChild</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">createTextNode</span><span style="color: Olive;">(</span><span style="color: Blue;">items</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">])</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">list</span><span style="color: Gray;">.</span><span style="color: Blue;">appendChild</span><span style="color: Olive;">(</span><span style="color: Blue;">el</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// slow, bad idea</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li></ol></div>
<p>Document fragments 是一个DOM元素容器，可以使用它同时添加这些元素到页面中。Document fragment自身不是一个DOM节点，它不会在页面DOM树中显示，并且在把它插入DOM之前它是不可见的。下面是它的用法：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">list</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">getElementById</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">list</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">frag</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">createDocumentFragment</span><span style="color: Olive;">()</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">items</span><span style="color: Gray;"> = </span><span style="color: Olive;">[</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">one</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">two</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">three</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">four</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">]</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">el</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">for</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">i</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">; </span><span style="color: Blue;">items</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">; </span><span style="color: Blue;">i</span><span style="color: Gray;">++</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">el</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">createElement</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">li</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">el</span><span style="color: Gray;">.</span><span style="color: Blue;">appendChild</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">createTextNode</span><span style="color: Olive;">(</span><span style="color: Blue;">items</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">])</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">frag</span><span style="color: Gray;">.</span><span style="color: Blue;">appendChild</span><span style="color: Olive;">(</span><span style="color: Blue;">el</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// better!</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">list</span><span style="color: Gray;">.</span><span style="color: Blue;">appendChild</span><span style="color: Olive;">(</span><span style="color: Blue;">frag</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>非常快速、简洁！</p>
<h4>错误10-不懂javascript</h4>
<p>许多人不花时间来认真地学习javascript。<br />
Javascript并不等于jquery。这是否吓到你了？如果你会犯以上列出的错误，那么你需要认真地学习javascript。Javascript是一门语言，一门基本上不用学习就可以使用的语言，这就导致许多人不花时间来认真学习。千万不要这么做，已经有太多太多的教程指出这样做的弊端，你没有借口不认真学习javascript。如果你只是了解jquery（或mootools，或别的），那么你学习了解javascript的出发点就已经错了。</p>
<h4>错误11-严格遵循以上的规则</h4>
<p><strong>“Rules are made to be broken.”</strong>(规则是用来被打破的。)</p>
<p>虽然本文列举了以上规则，但像任何事一样，规则是用来被打破的。如果是刚开始学习javascript，你会严于律己，严格遵循以上规则。但是到了真正理解了为什么要遵循以上规则的原因后，你才会知道灵活运用以上规则。例如，eval被反复的说到不能用，但是它却是唯一能解析服务器端返回json字符串的方法。当然这里在运用它时会做很多安全的检测（你可能会用到一个javascript库）。这里想要指明的是，在需要的地方，不应该害怕犯错，大胆的运用它。当然，永远不要犯错误10所指出的问题。</p>
<h4>结论：</h4>
<p>如果你是javascript新手，希望以上的内容对你javascript编程有所帮助。如果你是一个资深javascript工程师，如过这里有遗漏的，请在留言板中留言告知大家。</p>
<p>本文翻译自<a href="http://net.tutsplus.com/tutorials/javascript-ajax/the-10-javascript-mistakes-youre-making/" target="_blank">《The 11 JavaScript Mistakes you’re Making》</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4479/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ajax异步文件上传原理解析</title>
		<link>http://www.36ria.com/4397</link>
		<comments>http://www.36ria.com/4397#comments</comments>
		<pubDate>Sun, 07 Aug 2011 07:32:09 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[javascript教程]]></category>
		<category><![CDATA[javasctipt教程]]></category>
		<category><![CDATA[多选文件上传]]></category>
		<category><![CDATA[异步文件上传]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4397</guid>
		<description><![CDATA[（PS:由于上传文件会给服务器造成负担，这里明河就不将demo上传，请自行在本地服务器测试demo。） 有一段时间没发文章了，明河手上项目太紧了，终于快临近发布了，偷闲跟大家分享下ajax异步文件上传原理，前段时间一直在捣鼓异步文件上传，也算颇有心得，以前也写过flash文件上传组件，有兴趣的朋友可以看yijs.File，早期作品，代码比较粗糙，最近又写了二个异步文件上......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/4397/ajax-uploader" rel="attachment wp-att-4398"><img src="http://www.36ria.com/wp-content/uploads/2011/08/ajax-uploader.png" alt="" title="ajax-uploader" width="680" height="200" class="alignnone size-full wp-image-4398" /></a></p>
<ul class="tow-columns clearfix">
<li class="l"></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=221" title="名称：ajax异步文件上传原理解析，下载次数：219，文件大小：352.85 kB" class="btn-download">点此下载</a></li>
</ul>
<p>（PS:由于上传文件会给服务器造成负担，这里明河就不将demo上传，请自行在本地服务器测试demo。）<br />
有一段时间没发文章了，明河手上项目太紧了，终于快临近发布了，偷闲跟大家分享下ajax异步文件上传原理，前段时间一直在捣鼓异步文件上传，也算颇有心得，以前也写过flash文件上传组件，有兴趣的朋友可以看<a href="http://www.36ria.com/1227" title="yijs.File — 基于flash多文件上传组件（明河作品）" target="_blank">yijs.File</a>，早期作品，代码比较粗糙，最近又写了二个异步文件上传组件，一个是基于iframe，一个是基于flash，都是基于KISSY1.2，日后会放出。言归正传，今天来谈下ajax异步文件上传的原理。<br />
（PS:英文原文可以看<a href="http://net.tutsplus.com/tutorials/javascript-ajax/uploading-files-with-ajax/" target="_blank">《Uploading Files with AJAX》</a>）。</p>
<h4>1.在demo中我们要实现的功能</h4>
<ul>
<li>异步上传文件（支持多选上传）</li>
<li>可以即时预览图片</li>
</ul>
<h4>2.通过这篇教程你将学会什么？</h4>
<ul>
<li>ajax异步文件上传的核心原理</li>
<li>新的文件API：<a href="http://www.w3.org/TR/FileAPI/" target="_blank">FileReader</a>对象的用法；</li>
<li><a href="http://www.w3.org/TR/XMLHttpRequest2/#the-formdata-interface" target="_blank">FormData</a>对象的用法（这是XMLHttpRequest2的内容）。</li>
</ul>
<p>很遗憾的是IE对FileReader和FormData并不支持（包括IE9），所以文中的方案有兼容性问题，想要实现全兼容的文件上传（包括图片预览），还需要其他技巧，以后讲解明河完成的异步上传组件时会说明。<br />
（PS：Opera目前不支持FormData对象，请在firefox和chrome下浏览demo。）</p>
<h4>3.构建图片上传表单</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">form</span><span style="color: Gray;"> </span><span style="color: #00008b;">method</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">post</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">enctype</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">multipart/form-data</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">&nbsp; </span><span style="color: #00008b;">action</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">upload.php</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">input</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">file</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">images</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">images</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">multiple</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">button</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">submit</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">btn</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Upload Files!</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">button</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">form</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>想要实现异步文件上传的第一个关键步骤，给form增加<strong>enctype=”multipart/form-data”</strong>属性，这个属性非常关键，缺少这个属性，将直接提交表单。<br />
<strong>action</strong>属性指向处理文件上传数据的服务器端路径。<br />
多选上传的关键是在上传框上加<strong>multiple</strong>属性。 </p>
<h4>4.upload.php</h4>
<p>我们先来看服务器端处理文件脚本：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">&lt;?php</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">foreach</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_FILES</span><span style="color: Olive;">[</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">images</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">][</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">error</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Green;">as</span><span style="color: Gray;"> </span><span style="color: #00008b;">$key</span><span style="color: Gray;"> =&gt; </span><span style="color: #00008b;">$error</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: #00008b;">$error</span><span style="color: Gray;"> == </span><span style="color: Blue;">UPLOAD_ERR_OK</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">$name</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$_FILES</span><span style="color: Olive;">[</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">images</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">][</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">name</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">][</span><span style="color: #00008b;">$key</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">move_uploaded_file</span><span style="color: Olive;">(</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$_FILES</span><span style="color: Olive;">[</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">images</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">][</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">tmp_name</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">][</span><span style="color: #00008b;">$key</span><span style="color: Olive;">]</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">uploads/</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> . </span><span style="color: #00008b;">$_FILES</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">images</span><span style="color: #8b0000;">'</span><span style="color: Olive;">][</span><span style="color: #8b0000;">'</span><span style="color: Red;">name</span><span style="color: #8b0000;">'</span><span style="color: Olive;">][</span><span style="color: #00008b;">$key</span><span style="color: Olive;">])</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Green;">echo</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">&lt;h2&gt;文件成功上传！&lt;/h2&gt;</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li></ol></div>
<p>这段php脚本做了非常多的简化，比如缺少文件大小限制、文件去重、用户限制等一系列安全处理。<br />
<strong>$_FILES</strong>这个关联数组存放着文件数据，是处理的关键，有不清楚的朋友可以看php手册，这里不再累述，毕竟不是本文讲解重点。</p>
<h4>5.监听上传框的change事件</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">input</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">getElementById</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">images</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">input</span><span style="color: Gray;">.</span><span style="color: Blue;">addEventListener</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">change</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">evt</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">files</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">files</span><span style="color: Gray;">; </span></li>
<li><span style="color: Olive;">})</span></li></ol></div>
<p>留意这里的this.files，files数组将存储你上传的文件信息，即使只上传1张图片，也是数组形式出现。<br />
<a href="http://www.36ria.com/4397/files" rel="attachment wp-att-4401"><img src="http://www.36ria.com/wp-content/uploads/2011/08/files.png" alt="" title="files" width="389" height="295" class="alignnone size-full wp-image-4401" /></a></p>
<h4>6.利用FileReader将图片显示到页面上</h4>
<p>关于FileReader，w3c有非常详细的说明，<a href="http://www.w3.org/TR/FileAPI/" target="_blank">传送门点此</a>。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//遍历文件</span></li>
<li><span style="color: Green;">for</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;"> ; </span><span style="color: Blue;">i</span><span style="color: Gray;"> &lt; </span><span style="color: Blue;">len</span><span style="color: Gray;">; </span><span style="color: Blue;">i</span><span style="color: Gray;">++ </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">file</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">files</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//文件类型为图片</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;">!!</span><span style="color: Blue;">file</span><span style="color: Gray;">.</span><span style="color: Blue;">type</span><span style="color: Gray;">.</span><span style="color: Blue;">match</span><span style="color: Olive;">(</span><span style="color: #8b0000;">/</span><span style="color: Red;">image.*</span><span style="color: #8b0000;">/</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//浏览器支持FileReader对象</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Teal;">window</span><span style="color: Gray;">.</span><span style="color: Blue;">FileReader</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">reader</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">FileReader</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//监听文件读取结束后事件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">reader</span><span style="color: Gray;">.</span><span style="color: Blue;">onloadend</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">e</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//将图片添加到显示列表</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">showUploadedItem</span><span style="color: Olive;">(</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">target</span><span style="color: Gray;">.</span><span style="color: Blue;">result</span><span style="color: Gray;">, </span><span style="color: Blue;">file</span><span style="color: Gray;">.</span><span style="color: Blue;">fileName</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//读取文件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">reader</span><span style="color: Gray;">.</span><span style="color: Blue;">readAsDataURL</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//将文件数据添加到FormData对象内</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">formdata</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">formdata</span><span style="color: Gray;">.</span><span style="color: Blue;">append</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">images[]</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>首先需要判断下文件类型，<strong>file.type.match(/image.*/)</strong>，如果是图片，file.type值会类似“image/jpeg”的形式。<br />
接下来实例化<strong>FileReader</strong>读取文件。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">reader</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">FileReader</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//监听文件读取结束后事件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">reader</span><span style="color: Gray;">.</span><span style="color: Blue;">onloadend</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">e</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//将图片添加到显示列表</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">showUploadedItem</span><span style="color: Olive;">(</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">target</span><span style="color: Gray;">.</span><span style="color: Blue;">result</span><span style="color: Gray;">, </span><span style="color: Blue;">file</span><span style="color: Gray;">.</span><span style="color: Blue;">fileName</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//读取文件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">reader</span><span style="color: Gray;">.</span><span style="color: Blue;">readAsDataURL</span><span style="color: Olive;">(</span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>FileReader有6个事件( onloadstart、onprogress、onload、onabort、 onerror、onloadend)，<strong>onloadend</strong>监听读取完毕事件，我们需要读取结束后把图片打印到页面。<br />
留意<strong>e.target.result</strong>，result包含图片数据<br />
最后来看下showUploadedItem函数：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//显示上传图片</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">showUploadedItem</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">source</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">list</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">getElementById</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">image-list</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">li</span><span style="color: Gray;">&nbsp;&nbsp; = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">createElement</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">li</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">img</span><span style="color: Gray;">&nbsp; = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">createElement</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">img</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">img</span><span style="color: Gray;">.</span><span style="color: Blue;">src</span><span style="color: Gray;"> = </span><span style="color: Blue;">source</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">li</span><span style="color: Gray;">.</span><span style="color: Blue;">appendChild</span><span style="color: Olive;">(</span><span style="color: Blue;">img</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">list</span><span style="color: Gray;">.</span><span style="color: Blue;">appendChild</span><span style="color: Olive;">(</span><span style="color: Blue;">li</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>非常简单，将img元素添加到li元素，然后li添加到ul即可。</p>
<h4>7.ajax发送FormData数据</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//遍历文件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">for</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;"> ; </span><span style="color: Blue;">i</span><span style="color: Gray;"> &lt; </span><span style="color: Blue;">len</span><span style="color: Gray;">; </span><span style="color: Blue;">i</span><span style="color: Gray;">++ </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">file</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">files</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//将文件数据添加到FormData对象内</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">formdata</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">formdata</span><span style="color: Gray;">.</span><span style="color: Blue;">append</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">images[]</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">file</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>将文件信息添加到formdata。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//发送ajax请求，存储文件（传递FormData对象过去）</span></li>
<li><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">formdata</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $.</span><span style="color: Blue;">ajax</span><span style="color: Olive;">({</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">url</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">upload.php</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">type</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">POST</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">data</span><span style="color: Gray;">: </span><span style="color: Blue;">formdata</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">processData</span><span style="color: Gray;">: </span><span style="color: Green;">false</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">contentType</span><span style="color: Gray;">: </span><span style="color: Green;">false</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">success</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">res</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//将上传成功后的提示打印到页面</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">getElementById</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">response</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">innerHTML</span><span style="color: Gray;"> = </span><span style="color: Blue;">res</span><span style="color: Gray;">; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>发送异步请求将数据传给upload.php处理。这里使用jquery的ajax方法。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4397/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>15个相当不错的jquery技巧</title>
		<link>http://www.36ria.com/4391</link>
		<comments>http://www.36ria.com/4391#comments</comments>
		<pubDate>Fri, 15 Jul 2011 13:18:42 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[jquery教程]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4391</guid>
		<description><![CDATA[今天在tutorialzine发现一篇关于jquery使用技巧的，相当不错，翻译分享给各位。 1.使用最新的jquery版本 明河觉得这个建议有待商榷，虽然越新的jquery版本性能上更加优秀，但是有些方法的变迁还是会导致一些bug，比如从1.4.2到1.5时很多朋友就抱怨ajax上出现问题了。明河的建议是旧的页面的jquery升级需谨慎，新项目可以大胆的使用jquery新版本。 还有个建议是使用google的cdn上的jquer......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/4391/jquery-15-tips" rel="attachment wp-att-4394"><img src="http://www.36ria.com/wp-content/uploads/2011/07/jquery-15-tips.png" alt="" title="jquery-15-tips" width="680" height="200" class="alignnone size-full wp-image-4394" /></a><br />
今天在<a href="http://tutorialzine.com/2011/06/15-powerful-jquery-tips-and-tricks-for-developers/">tutorialzine</a>发现一篇关于jquery使用技巧的，相当不错，翻译分享给各位。</p>
<h4>1.使用最新的jquery版本</h4>
<p>明河觉得这个建议有待商榷，虽然越新的jquery版本性能上更加优秀，但是有些方法的变迁还是会导致一些bug，比如从1.4.2到1.5时很多朋友就抱怨ajax上出现问题了。明河的建议是旧的页面的jquery升级需谨慎，新项目可以大胆的使用jquery新版本。<br />
还有个建议是使用google的cdn上的jquery文件，加载速度更快。猛击<a href="http://code.google.com/intl/zh-CN/apis/libraries/devguide.html" target="_blank">Google Libraries API</a> 进入查看。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">&lt;!-- Include a specific version of jQuery --&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: #ffa500;">&lt;!-- Include the latest version in the 1.6 branch --&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li></ol></div>
<h4>2.保持选择器的简单</h4>
<p>这个建议明河非常赞同，有很多朋友不喜欢给元素增加样式或id，希望保持html的简洁，使用jquery强大的选择器去检索元素，这不是好的习惯。首先越复杂的选择器，遍历的效率越低，这是显而易见的，最高效率无疑是使用原生的<strong>getElementById()</strong>；其次，复杂的选择器将标签名称和层级结构固化在里面，假如你的html结构发生了改变，或标签发生了改变，都直接造成检索失败。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">li[data-selected=&quot;true&quot;] a</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// Fancy, but slow</span></li>
<li><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">li.selected a</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// Better</span></li>
<li><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#elem</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// Best</span></li></ol></div>
<p>访问DOM，是javascript最耗资源和性能的部分，所以尽量<strong>避免复杂或重复的遍历DOM</strong>。<br />
避免重复遍历DOM的方法就是将$()检索的元素存储到变量，比如下面的代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">buttons</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#navigation a.button</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// 使用$前缀来标示jquery对象，是非常好的习惯，推荐使用。</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;"> $</span><span style="color: Blue;">buttons</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#navigation a.button</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>jquery选择器支持大部分的css3伪类方法，像<strong>:visible</strong>, <strong>:hidden</strong>, <strong>:animated</strong>，虽然很便利，但请慎用，因为当你使用伪类选择器的时候，jQuery不得不使用<strong>querySelectorAll()</strong>，性能的损耗更大。</p>
<h4>3.jQuery对象作为数组处理</h4>
<p>jQuery对象定义了length属性，当使用数组的形式操作时候返回其实是DOM元素而不是子jQuery对象，比如下面代码。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// Selecting all the navigation buttons:</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">buttons</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#navigation a.button</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">// 遍历buttons对象</span></li>
<li><span style="color: Green;">for</span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">i</span><span style="color: Gray;">=</span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span><span style="color: Blue;">i</span><span style="color: Gray;">&lt;</span><span style="color: Blue;">buttons</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">;</span><span style="color: Blue;">i</span><span style="color: Gray;">++</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Blue;">buttons</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">])</span><span style="color: Gray;">;&nbsp; &nbsp; </span><span style="color: #ffa500;">// 是DOM元素，而不是jQuery对象！</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">// We can even slice it:</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">firstFour</span><span style="color: Gray;"> = </span><span style="color: Blue;">buttons</span><span style="color: Gray;">.</span><span style="color: Blue;">slice</span><span style="color: Olive;">(</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">4</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>根据实验，使用for或while循环，执行效率比$.each()来的高。详细测试可以看<a href="http://jsfiddle.net/martinaglv/NcRsV/" target="_blank">several times faster</a>。<br />
使用length属性来检查元素存在性：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">buttons</span><span style="color: Olive;">){</span><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// This is always true</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// Do something</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">buttons</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Olive;">){</span><span style="color: Gray;">&nbsp;</span><span style="color: #ffa500;">// True only if buttons contains elements</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// Do something</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<h4>4.selector属性</h4>
<p>jQuery对象都带有一个selector属性，用于获取选择器名称，比如：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#container li:first-child</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">selector</span><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// #container li:first-child</span></li>
<li><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#container li</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">filter</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">:first-child</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">selector</span><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// #container li.filter(:first-child)</span></li></ol></div>
<p>留意第二行代码，selector返回的是获取的元素完整的选择器。<br />
这个属性常用于编写jquery插件的时候。</p>
<h4>5.创建一个空的jQuery对象</h4>
<p>这种情况应用场景不多，当你需要先创建个空的jQuery对象，然后使用<a href="http://api.jquery.com/add/" target="_blank">add()</a>方法向此对象注入jQuery对象时会用到。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">container</span><span style="color: Gray;"> = $</span><span style="color: Olive;">([])</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">container</span><span style="color: Gray;">.</span><span style="color: Blue;">add</span><span style="color: Olive;">(</span><span style="color: Blue;">another_element</span><span style="color: Olive;">)</span><span style="color: Gray;">;)</span></li></ol></div>
<h4>6.选择随机元素</h4>
<p>应用场景不多，举个例子，现在你需要随机给li增加一个red的class。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">random</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $.</span><span style="color: Blue;">expr</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">:</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">random</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">a</span><span style="color: Gray;">, </span><span style="color: Blue;">i</span><span style="color: Gray;">, </span><span style="color: Blue;">m</span><span style="color: Gray;">, </span><span style="color: Blue;">r</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">random</span><span style="color: Gray;"> = </span><span style="color: Teal;">Math</span><span style="color: Gray;">.</span><span style="color: Blue;">floor</span><span style="color: Olive;">(</span><span style="color: Teal;">Math</span><span style="color: Gray;">.</span><span style="color: Blue;">random</span><span style="color: Olive;">()</span><span style="color: Gray;"> * </span><span style="color: Blue;">r</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">i</span><span style="color: Gray;"> == </span><span style="color: Blue;">random</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">})(</span><span style="color: Blue;">jQuery</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">li:random</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">glow</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>需要扩展jquery的选择器，这段代码很好的演示了<strong>jQuery.expr</strong>的用法。</p>
<h4>7.使用css钩子</h4>
<p><a href="http://api.jquery.com/jQuery.cssHooks/" target="_blank">jQuery.cssHooks</a>是1.4.3新增的方法，用的不估计不多，当你定义新的CSS Hooks时实际上定义的是getter和setter方法，举个例子，border-radius这个圆角属性想要成功应用于firefox、webkit等浏览器，需要增加属性前缀，比如-moz-border-radius和-webkit-border-radius。你可以通过定义CSS Hooks将其封装成统一的接口borderRadius，而不是一一设置css属性。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$.</span><span style="color: Blue;">cssHooks</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">borderRadius</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; </span><span style="color: Blue;">get</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">, </span><span style="color: Blue;">computed</span><span style="color: Gray;">, </span><span style="color: Blue;">extra</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// Depending on the browser, read the value of</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// -moz-border-radius, -webkit-border-radius or border-radius</span></li>
<li><span style="color: Gray;">&amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; </span><span style="color: Blue;">set</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">, </span><span style="color: Blue;">value</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// Set the appropriate CSS3 property</span></li>
<li><span style="color: Gray;">&amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; &amp;</span><span style="color: Blue;">nbsp</span><span style="color: Gray;">; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">// Use it without worrying which property the browser actually understands:</span></li>
<li><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#rect</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">css</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">borderRadius</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Maroon;">5</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h4>8.使用自定义的Easing（缓动动画效果）函数</h4>
<p><a href="http://tutorialzine.com/2011/06/15-powerful-jquery-tips-and-tricks-for-developers/" target="_blank">easing plugin</a>是用的非常多的函数，可以实现不少华丽的效果。当内置的缓动效果无法满足你的需求时，还可以自定义缓动函数。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$.</span><span style="color: Blue;">easing</span><span style="color: Gray;">.</span><span style="color: Blue;">easeInOutQuad</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">x</span><span style="color: Gray;">, </span><span style="color: Blue;">t</span><span style="color: Gray;">, </span><span style="color: Blue;">b</span><span style="color: Gray;">, </span><span style="color: Blue;">c</span><span style="color: Gray;">, </span><span style="color: Blue;">d</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">((</span><span style="color: Blue;">t</span><span style="color: #8b0000;">/</span><span style="color: Red;">=d</span><span style="color: #8b0000;">/</span><span style="color: Maroon;">2</span><span style="color: Olive;">)</span><span style="color: Gray;"> &lt; </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Blue;">c</span><span style="color: #8b0000;">/</span><span style="color: Red;">2*t*t + b;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; return -c</span><span style="color: #8b0000;">/</span><span style="color: Maroon;">2</span><span style="color: Gray;"> * </span><span style="color: Olive;">((</span><span style="color: Gray;">--</span><span style="color: Blue;">t</span><span style="color: Olive;">)</span><span style="color: Gray;">*</span><span style="color: Olive;">(</span><span style="color: Blue;">t</span><span style="color: Gray;">-</span><span style="color: Maroon;">2</span><span style="color: Olive;">)</span><span style="color: Gray;"> - </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> + </span><span style="color: Blue;">b</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">// To use it:</span></li>
<li><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#elem</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">animate</span><span style="color: Olive;">({</span><span style="color: Blue;">width</span><span style="color: Gray;">:</span><span style="color: Maroon;">200</span><span style="color: Olive;">}</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">slow</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">easeInOutQuad</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h4>9.$.proxy()的使用</h4>
<p>关于$.proxy()，明河曾经详细介绍过，传送门在此<a href="http://www.36ria.com/1372" target="_blank">《jquery1.4教程三：新增方法教程（3）》</a>。<br />
jquery有个让人头疼的地方，回调函数过多，上下文this总是在变化着，有时候我们需要控制this的指向，这时候就需要$.proxy()方法。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">panel</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">style</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">display:none</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">button</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Close</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">button</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li></ol></div>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#panel</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">fadeIn</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// this points to #panel</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#panel button</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">click</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// this points to the button</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">fadeOut</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>嵌套的二个回调函数this指向是不同的！现在我们希望this的指向是#panel的元素。代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#panel</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">fadeIn</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// Using $.proxy to bind this:</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#panel button</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">click</span><span style="color: Olive;">(</span><span style="color: Gray;">$.</span><span style="color: Blue;">proxy</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// this points to #panel</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">fadeOut</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span><span style="color: Green;">this</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<h4>10.快速获取节点数</h4>
<p>这是个常用的技巧，代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">console</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: Gray;"> $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">*</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h4>11.构建个jquery插件</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $.</span><span style="color: Blue;">fn</span><span style="color: Gray;">.</span><span style="color: Blue;">yourPluginName</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// Your code goes here</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">this</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">})(</span><span style="color: Blue;">jQuery</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>关于jquery插件的构建，明河曾发过系列教程，传送门：<a href="http://www.36ria.com/2765" title="制作jquery文字提示插件—jquery插件实战教程（1）" target="_blank">制作jquery文字提示插件—jquery插件实战教程（1）</a>。<br />
这里就不再详述。</p>
<h4>12.设置ajax全局事件</h4>
<p>关于ajax全局事件，明河曾发过完整的介绍文章，传送门：《<a href="http://www.36ria.com/2882" title="jquery的ajax全局事件详解—明河谈jquery" target="_blank">jquery的ajax全局事件详解—明河谈jquery</a>》。</p>
<h4>13.延迟动画</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// This is wrong:</span></li>
<li><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#elem</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">animate</span><span style="color: Olive;">({</span><span style="color: Blue;">width</span><span style="color: Gray;">:</span><span style="color: Maroon;">200</span><span style="color: Olive;">}</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">setTimeout</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#elem</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">animate</span><span style="color: Olive;">({</span><span style="color: Blue;">marginTop</span><span style="color: Gray;">:</span><span style="color: Maroon;">100</span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span><span style="color: Maroon;">2000</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">// Do it like this:</span></li>
<li><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#elem</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">animate</span><span style="color: Olive;">({</span><span style="color: Blue;">width</span><span style="color: Gray;">:</span><span style="color: Maroon;">200</span><span style="color: Olive;">})</span><span style="color: Gray;">.</span><span style="color: Blue;">delay</span><span style="color: Olive;">(</span><span style="color: Maroon;">2000</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">animate</span><span style="color: Olive;">({</span><span style="color: Blue;">marginTop</span><span style="color: Gray;">:</span><span style="color: Maroon;">100</span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>当存在多个animate动画时，如何处理动画的执行顺序是个烦心事，原文作者是建议使用<strong>delay()</strong>函数，如上面的代码，但明河的建议是使用<strong>queue()</strong>方法，因为delay你要考虑延迟多少时间，而queue没有这个问题，进入队列的函数会一个个顺序执行。可以看明河以前的文章<a href="http://www.36ria.com/8" title="queue和dequeue—明河谈jquery" target="_blank">queue和dequeue—明河谈jquery</a>。</p>
<h4>15.jquery的本地存储</h4>
<p>本地存储在现在web应用中使用越来越频繁，jquery有个专门用于本地存储的插件叫<a href="http://www.jstorage.info/" target="_blank">$.jStorage jQuery plugin</a>。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// Check if &quot;key&quot; exists in the storage</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">value</span><span style="color: Gray;"> = $.</span><span style="color: Blue;">jStorage</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">key</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">value</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// if not - load the data from the server</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> = </span><span style="color: Blue;">load_data_from_server</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span><span style="color: #ffa500;">// and save it</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $.</span><span style="color: Blue;">jStorage</span><span style="color: Gray;">.</span><span style="color: Blue;">set</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">key</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span><span style="color: Blue;">value</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #ffa500;">// Use value</span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4391/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>使用javascript生成文件</title>
		<link>http://www.36ria.com/4379</link>
		<comments>http://www.36ria.com/4379#comments</comments>
		<pubDate>Sun, 10 Jul 2011 08:49:04 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[jquery教程]]></category>
		<category><![CDATA[javascript生成文件]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4379</guid>
		<description><![CDATA[点此查看demo demo中演示了使用javascript生成文件的典型应用：用户可以在输入框输入自定义的数据，然后可以点击保存，将这些数据保存到本地，无需再手动在本地新建个txt然后再复制，帮用户省了一步操作。 还有一个比较典型的应用：系统输出一段密匙给用户，密匙一般很复杂，希望用户可以快速保存到本地，本文的技术就派上用场了。 从理论上来讲，想要单纯依靠javascript......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/4379/js-generating-files" rel="attachment wp-att-4380"><img src="http://www.36ria.com/wp-content/uploads/2011/07/js-generating-files.png" alt="" title="js-generating-files" width="680" height="200" class="alignnone size-full wp-image-4380" /></a></p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/jquery/generateFile/index.html" class="btn-view-demo" target="_blank">点此查看demo</a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=220" title="名称：generateFile，下载次数：87，文件大小：5.54 kB" class="btn-download">点此下载</a></li>
</ul>
<p>demo中演示了使用javascript生成文件的典型应用：用户可以在输入框输入自定义的数据，然后可以点击保存，将这些数据保存到本地，无需再手动在本地新建个txt然后再复制，帮用户省了一步操作。<br />
还有一个比较典型的应用：系统输出一段密匙给用户，密匙一般很复杂，希望用户可以快速保存到本地，本文的技术就派上用场了。<br />
从理论上来讲，想要单纯依靠javascript生成文件，是不可能的，目前主流的有二种方案可以实现生成文件功能：1、<strong>javascript+flash</strong>，该方案网上有现成的插件，插件的名字明河忘记了，-_-!明河比较健忘；2、javascript+服务器端语言，这是明河比较推崇的方案，本文的demo采用<strong>javascript+php</strong>实现的，接下来对这个方案，明河进行下简单说明。</p>
<h4>原理简述：</h4>
<p>原理并不复杂，整个流程如下图：<br />
<a href="http://www.36ria.com/4379/flow" rel="attachment wp-att-4382"><img src="http://www.36ria.com/wp-content/uploads/2011/07/flow.png" alt="" title="flow" width="680" height="140" class="alignnone size-full wp-image-4382" /></a></p>
<h4>html代码：</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">form</span><span style="color: Gray;"> </span><span style="color: #00008b;">action</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">./</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">method</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">post</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">h4</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">在下面输入框输入任意文字</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">h4</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">textarea</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">textarea</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">blueButton</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">download</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">下载</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">form</span><span style="color: Olive;">&gt;</span></li></ol></div>
<h4>php处理数据，返回文件：</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">&lt;?php</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Green;">empty</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">filename</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])</span><span style="color: Gray;"> || </span><span style="color: Green;">empty</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">content</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">exit</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: #00008b;">$filename</span><span style="color: Gray;"> = </span><span style="color: Blue;">preg_replace</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">/[^a-z0-9\-\_\.]/i</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">''</span><span style="color: Gray;">,</span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">filename</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Cache-Control: </span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Content-type: text/plain</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Content-Disposition: attachment; filename=&quot;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">.</span><span style="color: #00008b;">$filename</span><span style="color: Gray;">.</span><span style="color: #8b0000;">'</span><span style="color: Red;">&quot;</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">echo</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">content</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Blue;">?&gt;</span></li></ol></div>
<p>服务器端最关键地就是对header的重写，比如上述代码中的</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Cache-Control: </span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Content-type: text/plain</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Content-Disposition: attachment; filename=&quot;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">.</span><span style="color: #00008b;">$filename</span><span style="color: Gray;">.</span><span style="color: #8b0000;">'</span><span style="color: Red;">&quot;</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
</ol></div>
<p>服务器端需要二个参数：filename和content，接下来我们来看如何通过脚本异步post过去。<br />
异步post，条件反射地想到ajax，但这里我们借助<strong>iframe</strong>。</p>
<h4>assets/jquery.generateFile.js</h4>
<p><strong>jquery.generateFile.js</strong>这个文件封装了生成文件的方法：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// 创建一个jquery插件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $.</span><span style="color: Blue;">generateFile</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">options</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">options</span><span style="color: Gray;"> = </span><span style="color: Blue;">options</span><span style="color: Gray;"> || </span><span style="color: Olive;">{}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">options</span><span style="color: Gray;">.</span><span style="color: Blue;">script</span><span style="color: Gray;"> || !</span><span style="color: Blue;">options</span><span style="color: Gray;">.</span><span style="color: Blue;">filename</span><span style="color: Gray;"> || !</span><span style="color: Blue;">options</span><span style="color: Gray;">.</span><span style="color: Blue;">content</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">throw</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Error</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">参数配置不合法!</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 创建一个1*1的iframe</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">iframe</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;iframe&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">width</span><span style="color: Gray;">:</span><span style="color: Maroon;">1</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">height</span><span style="color: Gray;">:</span><span style="color: Maroon;">1</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">frameborder</span><span style="color: Gray;">:</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">css</span><span style="color: Gray;">:</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">display</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">none</span><span style="color: #8b0000;">'</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">.</span><span style="color: Blue;">appendTo</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">body</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">formHTML</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;form action=&quot;&quot; method=&quot;post&quot;&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;input type=&quot;hidden&quot; name=&quot;filename&quot; /&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;input type=&quot;hidden&quot; name=&quot;content&quot; /&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;/form&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 加个延迟的原因是：给IE一些创建DOM的时间</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">setTimeout</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// iframe的document中的body元素</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">body</span><span style="color: Gray;"> = </span><span style="color: Olive;">(</span><span style="color: Blue;">iframe</span><span style="color: Gray;">.</span><span style="color: Blue;">prop</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">contentDocument</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"> !== </span><span style="color: Blue;">undefined</span><span style="color: Olive;">)</span><span style="color: Gray;"> ?</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">iframe</span><span style="color: Gray;">.</span><span style="color: Blue;">prop</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">contentDocument</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">body</span><span style="color: Gray;"> :</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">iframe</span><span style="color: Gray;">.</span><span style="color: Blue;">prop</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">document</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">body</span><span style="color: Gray;">;&nbsp; &nbsp; </span><span style="color: #ffa500;">// IE</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">body</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: Blue;">body</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 向iframe添加内容</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">body</span><span style="color: Gray;">.</span><span style="color: Blue;">html</span><span style="color: Olive;">(</span><span style="color: Blue;">formHTML</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">form</span><span style="color: Gray;"> = </span><span style="color: Blue;">body</span><span style="color: Gray;">.</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">form</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">form</span><span style="color: Gray;">.</span><span style="color: Blue;">attr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">action</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">options</span><span style="color: Gray;">.</span><span style="color: Blue;">script</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">form</span><span style="color: Gray;">.</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">input[name=filename]</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: Blue;">options</span><span style="color: Gray;">.</span><span style="color: Blue;">filename</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">form</span><span style="color: Gray;">.</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">input[name=content]</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: Blue;">options</span><span style="color: Gray;">.</span><span style="color: Blue;">content</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//提交表单</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">form</span><span style="color: Gray;">.</span><span style="color: Blue;">submit</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span><span style="color: Maroon;">50</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Olive;">})(</span><span style="color: Blue;">jQuery</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>主要有如下几个关键步骤：</p>
<h5>1.生成个iframe</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// 创建一个1*1的iframe</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">iframe</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;iframe&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">width</span><span style="color: Gray;">:</span><span style="color: Maroon;">1</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">height</span><span style="color: Gray;">:</span><span style="color: Maroon;">1</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">frameborder</span><span style="color: Gray;">:</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">css</span><span style="color: Gray;">:</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">display</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">none</span><span style="color: #8b0000;">'</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">.</span><span style="color: Blue;">appendTo</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">body</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h5>2.向iframe添加一个表单</h5>
<p>表单结构如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">formHTML</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;form action=&quot;&quot; method=&quot;post&quot;&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;input type=&quot;hidden&quot; name=&quot;filename&quot; /&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;input type=&quot;hidden&quot; name=&quot;content&quot; /&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;/form&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li></ol></div>
<p>将上述html片段加入到iframe中：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// iframe的document中的body元素</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">body</span><span style="color: Gray;"> = </span><span style="color: Olive;">(</span><span style="color: Blue;">iframe</span><span style="color: Gray;">.</span><span style="color: Blue;">prop</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">contentDocument</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"> !== </span><span style="color: Blue;">undefined</span><span style="color: Olive;">)</span><span style="color: Gray;"> ?</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">iframe</span><span style="color: Gray;">.</span><span style="color: Blue;">prop</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">contentDocument</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">body</span><span style="color: Gray;"> :</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">iframe</span><span style="color: Gray;">.</span><span style="color: Blue;">prop</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">document</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">body</span><span style="color: Gray;">;&nbsp; &nbsp; </span><span style="color: #ffa500;">// IE</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">body</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: Blue;">body</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 向iframe添加内容</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">body</span><span style="color: Gray;">.</span><span style="color: Blue;">html</span><span style="color: Olive;">(</span><span style="color: Blue;">formHTML</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>这里明河重点提下<strong>prop</strong>方法，这是jquery1.6的新方法哦，这个方法的作用是什么呢？<br />
以前的jquery中，全部使用attr来访问对象的属性，比如取一个图片的alt属性，使用<strong>$(&#8216;#img&#8217;).attr(&#8216;alt&#8217;);</strong><br />
但是在某些时候，比如访问checkbox的<strong>disabled</strong>属性的时候，会有些问题。在有些浏览器里，只要写了disabled就可以，有些则要写：disabled = “disabled”。所以，从1.6开始，jq提供新的方法“prop”来获取这些属性。使用<strong>prop</strong>的时候，返回值是标准属性，true/false，比如<strong>$(&#8216;#checkbox&#8217;).prop(&#8216;disabled&#8217;)</strong>，不会返回 “disabled”或者“”，只会是true/false。当然赋值的时候也是如此。如此，我们便统一了所有操作，无论是从语法上还是语义上。</p>
<h5>3.提交表单</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">form</span><span style="color: Gray;"> = </span><span style="color: Blue;">body</span><span style="color: Gray;">.</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">form</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">form</span><span style="color: Gray;">.</span><span style="color: Blue;">attr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">action</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">options</span><span style="color: Gray;">.</span><span style="color: Blue;">script</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">form</span><span style="color: Gray;">.</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">input[name=filename]</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: Blue;">options</span><span style="color: Gray;">.</span><span style="color: Blue;">filename</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">form</span><span style="color: Gray;">.</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">input[name=content]</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: Blue;">options</span><span style="color: Gray;">.</span><span style="color: Blue;">content</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//提交表单</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">form</span><span style="color: Gray;">.</span><span style="color: Blue;">submit</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li></ol></div>
<h4>初始化插件，生成文件</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#download</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">click</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">e</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; $.</span><span style="color: Blue;">generateFile</span><span style="color: Olive;">({</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">filename</span><span style="color: Gray;">&nbsp; &nbsp; : </span><span style="color: #8b0000;">'</span><span style="color: Red;">export.txt</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">content</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; : $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">textarea</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">()</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">script</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; : </span><span style="color: #8b0000;">'</span><span style="color: Red;">download.php</span><span style="color: #8b0000;">'</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">preventDefault</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4379/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Validation-Engine—jquery表单验证插件详解</title>
		<link>http://www.36ria.com/4370</link>
		<comments>http://www.36ria.com/4370#comments</comments>
		<pubDate>Sat, 02 Jul 2011 07:33:47 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[jquery插件]]></category>
		<category><![CDATA[jquery表单验证插件]]></category>
		<category><![CDATA[Validation-Engine]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4370</guid>
		<description><![CDATA[先道个歉，这二月明河工作太忙了，没多少时间更新博客，也很少捣鼓东西了。 （ps:RIA之家的全部demo，明河已经托管到github，如果要下载博客的全部demo，传送门在此：https://github.com/minghe/36ria-demo。） 今天明河将着重向各位朋友介绍个强大的jquery表单验证插件：Validation-Engine，明河在很早之前曾队Validation-Engine进行过介绍，传送门在此《validationEngine中文版 — jquery强大的表单......]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-4371" href="http://www.36ria.com/4370/validation-engine"><img class="alignnone size-full wp-image-4371" title="Validation-Engine" src="http://www.36ria.com/wp-content/uploads/2011/07/Validation-Engine.png" alt="" width="680" height="200" /></a><br />
先道个歉，这二月明河工作太忙了，没多少时间更新博客，也很少捣鼓东西了。<br />
（ps:RIA之家的全部demo，明河已经托管到github，如果要下载博客的全部demo，传送门在此：<a href="https://github.com/minghe/36ria-demo">https://github.com/minghe/36ria-demo</a>。）<br />
今天明河将着重向各位朋友介绍个强大的jquery表单验证插件：<strong>Validation-Engine</strong>，明河在很早之前曾队Validation-Engine进行过介绍，传送门在此<a href="http://www.36ria.com/1645">《validationEngine中文版 — jquery强大的表单验证插件》</a>。那时候的validationEngine版本还是比较早的，目前最新的是2.2，跟以前相比改变了非常多，不少朋友给我留言希望更新下validationEngine的文章。所以写了这篇文章。</p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/jquery/validation-engine-2.2/index.html" class="btn-view-demo" target="_blank">点此查看demo</a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=219" title="名称：validation-engine-2.2，下载次数：181，文件大小：166.25 kB" class="btn-download">点此下载</a></li>
</ul>
<p>明河已经把验证规则的提示内容翻译成中文了，请看<strong>validation-engine-2.2\js\languages\jquery.validationEngine-cn.js</strong>。关于时间有二处提示没找到地方，目前没做修改。明河的英文太菜，翻译难免词不达意，欢迎纠正，O(∩_∩)O哈！<br />
（ps：时间有限，demo没做翻译，请见谅。）</p>
<h4>Validation-Engine的使用</h4>
<p>Validation-Engine的调用跟旧版没什么太大区别，可以看<a href="http://www.36ria.com/1645">《validationEngine中文版 — jquery强大的表单验证插件》</a>，明河这里不再累述。这里对其中的二个点进行补充：ajax验证和钩子的使用。这二部分相对而言会难些，所以需要着重介绍下。</p>
<h4>如何处理ajax验证？</h4>
<p>典型场景：如何使用Validation-Engine验证用户名或email的存在性？<br />
这个需求在大部分的注册页面都会用到，那如何使用Validation-Engine进行ajax验证呢？<br />
Validation-Engine的ajax验证有二种模式：</p>
<ul>
<li><a href="http://www.position-relative.net/creation/formValidator/demos/demoAjaxInlinePHP.html">Inline</a>：表单元素即时验证，比如失去焦点后触发ajax验证请求</li>
<li><a href="http://www.position-relative.net/creation/formValidator/demos/demoAjaxSubmitPHP.html">Submit</a>：整个表单的验证</li>
</ul>
<h5> inline验证</h5>
<p>inline验证当表单字段的值发生改变时会触发相应的ajax事件，比如用户名的输入框失去焦点后。<br />
想要使用ajax验证，需要你在语言规则文件上加上相应的ajax验证规则，打开<strong>validation-engine-2.2\js\languages\jquery.validationEngine-cn.js</strong>，找到如下代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ajaxUserCallPhp</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">: </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">url</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">phpajax/ajaxValidateFieldUser.php</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// you may want to pass extra data on the ajax call</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">extraData</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">name=eric</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// if you provide an &quot;alertTextOk&quot;, it will show as a green prompt when the field validates</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">alertTextOk</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">* 恭喜你，此用户名可以使用</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">alertText</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">* 该用户名已经存在</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">alertTextLoad</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">: </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">* 正在验证中，请稍等...</span><span style="color: #8b0000;">&quot;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>上述是一套ajax的验证规则，<strong>url</strong>指向服务器端路径，<strong>alertText</strong>为验证提示，<strong>alertTextLoad</strong>为正在验证时显示的消息。<strong>alertTextOk</strong>即ajax验证成功时显示的消息。<br />
<strong>然后你需要在表单字段上应用上这段规则。</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">input</span><span style="color: Gray;"> </span><span style="color: #00008b;">value</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">validate[required,custom[onlyLetterNumber],maxSize[20],ajax[ajaxUserCallPhp]] text-input</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">user</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">user</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li></ol></div>
<p>留意这里的ajax[ajaxUserCallPhp] ，[]内部即时ajax的验证规则，是必须对应起来的。</p>
<h5> Submit验证</h5>
<p>直接ajax验证整个表单可以如下处理。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">jQuery</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#formID</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">validationEngine</span><span style="color: Olive;">({</span></li>
<li><span style="color: Blue;">ajaxFormValidation</span><span style="color: Gray;">: </span><span style="color: Green;">true</span><span style="color: Gray;">,</span></li>
<li><span style="color: Blue;">onAjaxFormComplete</span><span style="color: Gray;">: </span><span style="color: Blue;">ajaxValidationCallback</span><span style="color: Gray;">,</span></li>
<li><span style="color: Blue;">onBeforeAjaxFormValidation</span><span style="color: Gray;">: </span><span style="color: Blue;">beforeCall</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<ul>
<li>ajaxFormValidation：开启ajax表单验证</li>
<li>onAjaxFormComplete：ajax验证结束后执行的回调函数</li>
<li>onBeforeAjaxFormValidation：在ajax验证前执行的回调函数</li>
</ul>
<p>具体demo可以看：<a href="http://www.position-relative.net/creation/formValidator/demos/demoAjaxSubmitPHP.html">http://www.position-relative.net/creation/formValidator/demos/demoAjaxSubmitPHP.html</a>。</p>
<h4>如何使用钩子？</h4>
<p>Validation-Engine中的钩子是用来做啥？我们来看一个典型的使用场景：当你的表单字段存在错误时，你希望表单提交前，在表单头部打印出一行“你的表单存在错误，请修改！”。<br />
也就是说Validation-Engine中的钩子其实可以理解为自定义事件。<br />
具体来看个demo：<a href="http://www.position-relative.net/creation/formValidator/demos/demoHooks.html">http://www.position-relative.net/creation/formValidator/demos/demoHooks.html</a>。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#formID</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">bind</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">jqv.form.result</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">event</span><span style="color: Gray;"> , </span><span style="color: Blue;">errorFound</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">errorFound</span><span style="color: Olive;">)</span><span style="color: Gray;"> $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#hookError</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">append</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">There is some problems with your form</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span></li></ol></div>
<p>监听jqv.form.result事件，在提交表单前触发。<br />
errorFound是错误标识符，当为false时，表示表单存在错误。</p>
<h5>Validation-Engine目前支持的钩子（自定义事件）</h5>
<ul>
<li>jqv.form.validating:在表单开始验证前</li>
<li>jqv.field.result(event, field, errorFound, prompText) :一个表单字段验证后触发</li>
<li> jqv.form.result(event, errorFound) : 表单验证后触发</li>
</ul>
<h4>注意点</h4>
<p>xiantao同学提了关于Validation-Engine的问题，有使用的朋友可以留意下：<br />
“大家用的时候要注意一点，就是尽可能的把需要验证的框排的不要要密，或者说间距很小，要不会导致验证时弹出的层盖住其他的框，而这些框无法获得焦点，导致用户无法输入，而这个框有是必填的，结果就是用户的表单无法提交。我们整个项目都用的是这个，除了这一点，真的很完美”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4370/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>jquery分页插件—Smart Paginator</title>
		<link>http://www.36ria.com/4343</link>
		<comments>http://www.36ria.com/4343#comments</comments>
		<pubDate>Wed, 25 May 2011 06:52:52 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[jquery插件]]></category>
		<category><![CDATA[jquery分页插件]]></category>
		<category><![CDATA[分页]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4343</guid>
		<description><![CDATA[点此查看demo 很久没介绍jquery相关的东西了，今天推荐一个分页工具条插件：Smart Paginator，这个插件用途还是很广的，而且可定制性相当不错，目前内置三种颜色，有需要的话，可以自己改css定制颜色，明河推荐使用。 1.如何使用Smart Paginator？ 1.1引入以下几个文件 &#60;script src=&#34;jquery-1.4.4.min.js&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; &#160; &#160; &#60;script&#160;src=&#34;smartpagina......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/4343/smart-paginator" rel="attachment wp-att-4344"><img src="http://www.36ria.com/wp-content/uploads/2011/05/smart-paginator.png" alt="" title="smart-paginator" width="680" height="181" class="alignnone size-full wp-image-4344" /></a></p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.egrappler.com/contents/smartpaginator/demo/smartpaginator.htm" class="btn-view-demo" target="_blank">点此查看demo</a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=216" title="名称：smart-paginator，下载次数：475，文件大小：32.79 kB" class="btn-download">点此下载</a></li>
</ul>
<p>很久没介绍jquery相关的东西了，今天推荐一个分页工具条插件：<strong>Smart Paginator</strong>，这个插件用途还是很广的，而且可定制性相当不错，目前内置三种颜色，有需要的话，可以自己改css定制颜色，明河推荐使用。</p>
<h4>1.如何使用Smart Paginator？</h4>
<h5>1.1引入以下几个文件</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">jquery-1.4.4.min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">smartpaginator.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">link</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">smartpaginator.css</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">rel</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">stylesheet</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/css</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li></ol></div>
<h5>1.2添加一个分页容器层</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">smart-paginator</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">&gt;</span><span style="color: Gray;"> </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li></ol></div>
<h5>1.3初始化插件</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: Teal;">document</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">ready</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#smart-paginator</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">smartpaginator</span><span style="color: Olive;">({</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">totalrecords</span><span style="color: Gray;">: </span><span style="color: Maroon;">100</span><span style="color: Gray;">, </span><span style="color: Blue;">recordsperpage</span><span style="color: Gray;">: </span><span style="color: Maroon;">10</span><span style="color: Gray;">, </span><span style="color: Blue;">initval</span><span style="color: Gray;">:</span><span style="color: Maroon;">0</span><span style="color: Gray;"> , </span><span style="color: Blue;">next</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">Next</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">prev</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">Prev</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">first</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">First</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">last</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">Last</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">theme</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">green</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">onchange</span><span style="color: Gray;">: </span><span style="color: Teal;">onChange</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Teal;">onChange</span><span style="color: Olive;">(</span><span style="color: Blue;">newPageValue</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: Blue;">newPageValue</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>可以看到想要初始化Smart Paginator，需要配置不少参数，接下来来看下这些主要参数的含义。</p>
<h4>2.参数说明</h4>
<table border="0" cellspacing="0" cellpadding="0" class="tab1">
<thead>
<tr>
<td width="127" valign="top">
<p><strong>参数</strong></p>
</td>
<td width="108" valign="top">
<p><strong>默认值</strong></p>
</td>
<td width="84" valign="top">
<p><strong>类型</strong></p>
</td>
<td width="249" valign="top">
<p><strong>描述</strong></p>
</td>
</tr>
</thead>
<tbody>
<tr>
<td width="127" valign="top">
<p><strong>totalrecords</strong></p>
</td>
<td width="108" valign="top">
<p>0</p>
</td>
<td width="84" valign="top">
<p>Number</p>
</td>
<td width="249" valign="top">
<p>总的分页数</p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>recordsperpage</strong></p>
</td>
<td width="108" valign="top">
<p>0</p>
</td>
<td width="84" valign="top">
<p>Number</p>
</td>
<td width="249" valign="top">
<p>单页数据量</p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>length</strong></p>
</td>
<td width="108" valign="top">
<p>10</p>
</td>
<td width="84" valign="top">
<p>Number</p>
</td>
<td width="249" valign="top">
<p>这个参数很特殊，上一页、下一页、第一页、最后一页的显示控制依赖于这个参数，当length的值大于totalrecords/recordsperpage时，是不显示上一页、下一页、第一页、最后一页的</p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>next</strong></p>
</td>
<td width="108" valign="top">
<p>Next</p>
</td>
<td width="84" valign="top">
<p>String</p>
</td>
<td width="249" valign="top">
<p>下一页文本</p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>prev</strong></p>
</td>
<td width="108" valign="top">
<p>Prev</p>
</td>
<td width="84" valign="top">
<p>String</p>
</td>
<td width="249" valign="top">
<p>上一页文本</p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>first</strong></p>
</td>
<td width="108" valign="top">
<p>First</p>
</td>
<td width="84" valign="top">
<p>String</p>
</td>
<td width="249" valign="top">
<p>第一页文本</p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>last</strong></p>
</td>
<td width="108" valign="top">
<p>Last</p>
</td>
<td width="84" valign="top">
<p>String</p>
</td>
<td width="249" valign="top">
<p>最后一页文本</p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>go</strong></p>
</td>
<td width="108" valign="top">
<p>Go</p>
</td>
<td width="84" valign="top">
<p>String</p>
</td>
<td width="249" valign="top">
<p>跳转文本</p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>theme</strong></p>
</td>
<td width="108" valign="top">
<p>green</p>
</td>
<td width="84" valign="top">
<p>Stirng</p>
</td>
<td width="249" valign="top">
<p>模板 </p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>display</strong></p>
</td>
<td width="108" valign="top">
<p>double</p>
</td>
<td width="84" valign="top">
<p>String</p>
</td>
<td width="249" valign="top">
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>initval</strong></p>
</td>
<td width="108" valign="top">
<p>1</p>
</td>
<td width="84" valign="top">
<p>Number</p>
</td>
<td width="249" valign="top">
<p>默认显示第几页</p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>datacontainer</strong></p>
</td>
<td width="108" valign="top">
<p>”</p>
</td>
<td width="84" valign="top">
<p>String</p>
</td>
<td width="249" valign="top">
<p>数据容器id，请看demo3 </p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>dataelement</strong></p>
</td>
<td width="108" valign="top">
<p>”</p>
</td>
<td width="84" valign="top">
<p>String</p>
</td>
<td width="249" valign="top">
<p>数据元素，指的是容器下的对应的子元素的选择器，请看demo2</p>
</td>
</tr>
<tr>
<td width="127" valign="top">
<p><strong>onchange</strong></p>
</td>
<td width="108" valign="top">
<p>null</p>
</td>
<td width="84" valign="top">
<p>Function</p>
</td>
<td width="249" valign="top">
<p>分页改变后触发的函数</p>
</td>
</tr>
</tbody>
</table>
<h4>3.自定义颜色模板</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">.green</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background-color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#4f7305</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Blue;">.green.normal</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background-color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#588500</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">White</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">border:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">solid</span><span style="color: Gray;"> </span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: #00008b;">#5f9000</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Blue;">.green.active</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background-color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#344C00</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#F8EB00</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">border:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">solid</span><span style="color: Gray;"> </span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: #00008b;">#5f9000</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Blue;">.green</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">.btn</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background-color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#588500</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">White</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">border:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">solid</span><span style="color: Gray;"> </span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: #00008b;">#5f9000</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4343/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>html5本地存储localStorage实战（2）</title>
		<link>http://www.36ria.com/4261</link>
		<comments>http://www.36ria.com/4261#comments</comments>
		<pubDate>Thu, 19 May 2011 02:45:11 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[html5教程]]></category>
		<category><![CDATA[localStorage]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4261</guid>
		<description><![CDATA[公司网络出问题了，没办法访问国外网站，而RIA之家正好放在国外主机，明河很抑郁，很久没办法更新一篇文章，向各位朋友说声抱歉。 上一篇文章，明河演示了如何使用localStorage本地存储评论信息（用户名、邮箱、站点），今天这篇教程，继续演示localStorage的使用，增加了些难度，实现用户浏览历史记录，就是RIA之家底部的“你曾浏览过的文章”。 点此查看demo 相对于实战......]]></description>
			<content:encoded><![CDATA[<p>公司网络出问题了，没办法访问国外网站，而RIA之家正好放在国外主机，明河很抑郁，很久没办法更新一篇文章，向各位朋友说声抱歉。<br />
<a href="http://www.36ria.com/4261/localstorage2" rel="attachment wp-att-4339"><img src="http://www.36ria.com/wp-content/uploads/2011/05/localStorage2.png" alt="" title="localStorage2" width="640" height="200" class="alignnone size-full wp-image-4339" /></a><br />
<a href="http://www.36ria.com/4247">上一篇文章</a>，明河演示了如何使用localStorage本地存储评论信息（用户名、邮箱、站点），今天这篇教程，继续演示localStorage的使用，增加了些难度，实现用户浏览历史记录，就是RIA之家底部的“你曾浏览过的文章”。</p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/html5/localStorage/histories.html" class="btn-view-demo" target="_blank">点此查看demo</a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=215" title="名称：html5-localStorage，下载次数：182，文件大小：4.92 kB" class="btn-download">点此下载</a></li>
</ul>
<p><a href="http://www.36ria.com/4261/histories" rel="attachment wp-att-4262"><img src="http://www.36ria.com/wp-content/uploads/2011/05/histories.png" alt="" title="histories" width="241" height="393" class="alignnone size-full wp-image-4262" /></a><br />
相对于实战1，这部分的代码更多，明河将其封装成一个组件了，目前没有写成jquery插件，看日后需要，有可能会将其重构成jquery插件，明河把这个类，叫做<strong>Histories</strong>。</p>
<h5>Histories主要有以下几个功能：</h5>
<ul>
<li>显示浏览历史文章列表</li>
<li>可以保存文章数据</li>
<li>可以清理数据</li>
</ul>
<h4>将json字符串存入本地存储</h4>
<p>保存浏览历史，比保存评论信息，有个难得地方，就是数据的处理，一条浏览历史，包含文章id、url、标题，或者图片之类的，明显我们不能使用上一篇教程的方式，一个一个存储，那样成本太高了。<br />
我们需要一个存储字段，能够包含所有的的数据，比如是下面的形式：（默认保存在<strong>data-histories</strong>字段）</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">[{</span><span style="color: #8b0000;">'</span><span style="color: Red;">id</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: Maroon;">1</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">title</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">第1篇文章标题</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">url</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">http://www.36ria.com/</span><span style="color: #8b0000;">'</span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Olive;">{</span><span style="color: #8b0000;">'</span><span style="color: Red;">id</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: Maroon;">2</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">title</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">第2篇文章标题</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">url</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">http://www.36ria.com/</span><span style="color: #8b0000;">'</span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Olive;">{</span><span style="color: #8b0000;">'</span><span style="color: Red;">id</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: Maroon;">3</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">title</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">第3篇文章标题</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">url</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">http://www.36ria.com/</span><span style="color: #8b0000;">'</span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Olive;">{</span><span style="color: #8b0000;">'</span><span style="color: Red;">id</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: Maroon;">4</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">title</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">第4篇文章标题</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">url</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">http://www.36ria.com/</span><span style="color: #8b0000;">'</span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">]</span></li></ol></div>
<p><a href="http://www.36ria.com/4261/2011-5-19-10-01-26" rel="attachment wp-att-4338"><img src="http://www.36ria.com/wp-content/uploads/2011/05/2011-5-19-10-01-26.png" alt="" title="2011-5-19 10-01-26" width="680" height="84" class="alignnone size-full wp-image-4338" /></a><br />
上图截自明河本地运行demo后的本地存储情况。</p>
<h4>保存单条数据</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">data</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span><span style="color: #8b0000;">'</span><span style="color: Red;">id</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: Blue;">id</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">title</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">第</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span><span style="color: Blue;">id</span><span style="color: Gray;">+</span><span style="color: #8b0000;">'</span><span style="color: Red;">篇文章标题</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">url</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">http://www.36ria.com/</span><span style="color: #8b0000;">'</span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">//保存数据</span></li>
<li><span style="color: Blue;">histories</span><span style="color: Gray;">.</span><span style="color: Blue;">save</span><span style="color: Olive;">(</span><span style="color: Blue;">data</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>demo中的id是明河用随机数模拟出来的，最后调用Histories类的save方法，将数据追加到存储字段data-histories内。<br />
接下来我们来看Histories的<strong>save</strong>方法，做了哪些处理。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 将值保存到本地数据</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * @param {Object} singleData 文章数据</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * @return {Boolean}</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">save</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">singleData</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">,</span><span style="color: Blue;">config</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">config</span><span style="color: Gray;">,</span><span style="color: Blue;">ls</span><span style="color: Gray;"> = </span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">ls</span><span style="color: Gray;">,</span><span style="color: Blue;">sData</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//保存的数据类型必须为对象</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Green;">typeof</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">singleData</span><span style="color: Gray;"> == </span><span style="color: #8b0000;">'</span><span style="color: Red;">object</span><span style="color: #8b0000;">'</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//如果已经存在该条数据，直接退出</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">isExist</span><span style="color: Olive;">(</span><span style="color: Blue;">singleData</span><span style="color: Gray;">.</span><span style="color: Blue;">id</span><span style="color: Olive;">))</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//删除多余数据</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">_removeExceedPost</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//向数据缓存追加一条数据</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">unshift</span><span style="color: Olive;">(</span><span style="color: Blue;">singleData</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//转化成json字符串</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">sData</span><span style="color: Gray;"> = </span><span style="color: Blue;">JSON</span><span style="color: Gray;">.</span><span style="color: Blue;">stringify</span><span style="color: Olive;">(</span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//调用本地存储类，保存数据</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">ls</span><span style="color: Gray;">.</span><span style="color: Blue;">item</span><span style="color: Olive;">(</span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">storeName</span><span style="color: Gray;">,</span><span style="color: Blue;">sData</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">true</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>代码中有几个关键点，明河说明下：</p>
<h5>对文章id进行判断，如果已经存在该数据，直接退出save</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//如果已经存在该条数据，直接退出</span></li>
<li><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">isExist</span><span style="color: Olive;">(</span><span style="color: Blue;">singleData</span><span style="color: Gray;">.</span><span style="color: Blue;">id</span><span style="color: Olive;">))</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li></ol></div>
<h5>向数据数组前面插入数据</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">unshift</span><span style="color: Olive;">(</span><span style="color: Blue;">singleData</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p><strong>self.data</strong>为数据数组，<strong>unshift</strong>是js数组方法，前插数据，跟push的作用相反。</p>
<h5>将单条数据转化成json字符串</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//转化成json字符串</span></li>
<li><span style="color: Blue;">sData</span><span style="color: Gray;"> = </span><span style="color: Blue;">JSON</span><span style="color: Gray;">.</span><span style="color: Blue;">stringify</span><span style="color: Olive;">(</span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>JSON是jquery内置的对象，用于处理json，这里将json数据转成字符串，最后保存到data-histories。</p>
<h4>输出列表</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">ul</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">histories</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">ul</span><span style="color: Olive;">&gt;</span></li></ol></div>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">histories</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Histories</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">//添加历史数据列表</span></li>
<li><span style="color: Blue;">histories</span><span style="color: Gray;">.</span><span style="color: Blue;">appendTo</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#histories</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p><strong>appendTo</strong>方法，会把列表数据加入到指定容器内。<br />
接下来来看下appendTo这个方法，做了哪些处理。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 将数据加入dom</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * @param {String} container 容器</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">appendTo</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">,$</span><span style="color: Blue;">container</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">html</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">''</span><span style="color: Gray;">,</span><span style="color: Blue;">data</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">getData</span><span style="color: Olive;">()</span><span style="color: Gray;">,</span><span style="color: Blue;">config</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">config</span><span style="color: Gray;">,</span><span style="color: Blue;">maxTitleLen</span><span style="color: Gray;"> = </span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">maxTitleLen</span><span style="color: Gray;">,</span><span style="color: Blue;">tpl</span><span style="color: Gray;"> = </span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">tpl</span><span style="color: Gray;">,</span><span style="color: Blue;">count</span><span style="color: Gray;"> = </span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">count</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Blue;">container</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Gray;"> || </span><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//遍历数据（数组）</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; $.</span><span style="color: Blue;">each</span><span style="color: Olive;">(</span><span style="color: Blue;">data</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//截取标题</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">title</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">title</span><span style="color: Gray;">.</span><span style="color: Blue;">substr</span><span style="color: Olive;">(</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Blue;">maxTitleLen</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//转换模板</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">html</span><span style="color: Gray;"> += </span><span style="color: Blue;">tpl</span><span style="color: Gray;">.</span><span style="color: Blue;">TFtpl</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//超过最大渲染数，直接退出循环</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Gray;"> &gt;= </span><span style="color: Blue;">count</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;"> $</span><span style="color: Olive;">(</span><span style="color: Blue;">html</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">appendTo</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Blue;">container</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li></ol></div>
<h5>获取json数据</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">data</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">getData</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li></ol></div>
<p><strong>getData</strong>方法，会将json字符串转成json对象：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 获取本地数据</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * @return {Array} </span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">getData</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">,</span><span style="color: Blue;">config</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">config</span><span style="color: Gray;">,</span><span style="color: Blue;">ls</span><span style="color: Gray;"> = </span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">ls</span><span style="color: Gray;">,</span><span style="color: Blue;">sData</span><span style="color: Gray;"> = </span><span style="color: Blue;">ls</span><span style="color: Gray;">.</span><span style="color: Blue;">item</span><span style="color: Olive;">(</span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">storeName</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">sData</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Gray;"> = </span><span style="color: Blue;">JSON</span><span style="color: Gray;">.</span><span style="color: Blue;">parse</span><span style="color: Olive;">(</span><span style="color: Blue;">sData</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>留意下面的代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Gray;"> = </span><span style="color: Blue;">JSON</span><span style="color: Gray;">.</span><span style="color: Blue;">parse</span><span style="color: Olive;">(</span><span style="color: Blue;">sData</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>parse是JSON很重要的方法，会将json数据字符串，转换成json对象。</p>
<h5>列表模板</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//列表的li模板&nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">tpl</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;li data-id=&quot;{id}&quot;&gt;&lt;a href=&quot;{url}&quot; target=&quot;_blank&quot;&gt;{title}&lt;/a&gt;&lt;/li&gt;</span><span style="color: #8b0000;">'</span></li></ol></div>
<p>我们需要模板是可配置的，appendTo这个方法最主要的工作就是解析模板，然后把html片段添加到容器内。</p>
<h5>解析模板</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//遍历数据（数组）</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; $.</span><span style="color: Blue;">each</span><span style="color: Olive;">(</span><span style="color: Blue;">data</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//截取标题</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">title</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">title</span><span style="color: Gray;">.</span><span style="color: Blue;">substr</span><span style="color: Olive;">(</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Blue;">maxTitleLen</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//转换模板</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">html</span><span style="color: Gray;"> += </span><span style="color: Blue;">tpl</span><span style="color: Gray;">.</span><span style="color: Blue;">TFtpl</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//超过最大渲染数，直接退出循环</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Gray;"> &gt;= </span><span style="color: Blue;">count</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p><strong>TFtpl</strong>是明河写的简单的模板解析方法：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//简单的转换模板函数</span></li>
<li><span style="color: Teal;">String</span><span style="color: Gray;">.</span><span style="color: Blue;">prototype</span><span style="color: Gray;">.</span><span style="color: Blue;">TFtpl</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">o</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">replace</span><span style="color: Olive;">(</span><span style="color: #8b0000;">/</span><span style="color: Red;">{([^{}]*)}</span><span style="color: #8b0000;">/g</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">a</span><span style="color: Gray;">,</span><span style="color: Blue;">b</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">r</span><span style="color: Gray;"> = </span><span style="color: Blue;">o</span><span style="color: Olive;">[</span><span style="color: Blue;">b</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">typeof</span><span style="color: Gray;"> </span><span style="color: Blue;">r</span><span style="color: Gray;">===</span><span style="color: #8b0000;">'</span><span style="color: Red;">string</span><span style="color: #8b0000;">'</span><span style="color: Gray;">?</span><span style="color: Blue;">r</span><span style="color: Gray;">:</span><span style="color: Blue;">a</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li></ol></div>
<h4>明河结语</h4>
<p>不知道经过二个demo的实战教程，对大家了解localStorage的用法有没有帮助，这篇教程代码还是比较多了，如果你有什么以后，都可以给明河留言，感谢大家的支持。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4261/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>利用WAI-ARIA role=”menubar”提高菜单可访问性</title>
		<link>http://www.36ria.com/4291</link>
		<comments>http://www.36ria.com/4291#comments</comments>
		<pubDate>Sun, 15 May 2011 19:27:51 +0000</pubDate>
		<dc:creator>妙净</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4291</guid>
		<description><![CDATA[WAI-ARIA即W3C Announces Roadmap for Accessible Rich Internet Applications。wai-aria主要是为了帮助读屏软件识别页面中动态的内容（如：ajax,DHtml等），同时aria约定了很多结构化的组件或区域，如（导航，菜单, 主要内容，次要内容，banner等等）；这样读屏软件就可以在黑暗中快速定位到要找的内容。 wai-aria1.0约定了61种role,点击相应的role可查看具体的使用demo示例，有些角色（role）还有状态（s......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.w3.org/WAI/intro/aria.php" target="_blank">WAI-ARIA</a>即W3C Announces Roadmap for Accessible Rich Internet Applications。wai-aria主要是为了帮助读屏软件识别页面中动态的内容（如：ajax,DHtml等），同时aria约定了很多结构化的组件或区域，如（导航，菜单, 主要内容，次要内容，banner等等）；这样读屏软件就可以在黑暗中快速定位到要找的内容。</p>
<p>wai-aria1.0约定了<a href="http://www.w3.org/TR/wai-aria/appendices#quickref" target="_blank">61种role</a>,点击相应的role可查看具体的使用demo示例，有些角色（role）还有状态（state）信息。如：<br />
<a href="http://www.36ria.com/4291/role" rel="attachment wp-att-4292"><img src="http://www.36ria.com/wp-content/uploads/2011/05/role.jpg" alt="61种role" title="role" width="504" height="493" class="alignnone size-full wp-image-4292" /></a></p>
<p>利用wai-aria如何提升菜单的可访问性呢，以role=”menubar”菜单实现为例：<br />
<a href="http://www.36ria.com/4291/tba" rel="attachment wp-att-4322"><img src="http://www.36ria.com/wp-content/uploads/2011/05/tba.jpg" alt="一淘团购菜单" title="一淘团购菜单" width="352" height="153" class="alignnone size-full wp-image-4322" /></a><br />
首先html代码遵循aria 1.0的约定，这是一个菜单栏，所以选择role=”menubar”<br />
主体htlm代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">ul</span><span style="color: Gray;"> </span><span style="color: #00008b;">role</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">menubar</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">= </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">menuitem</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">aria-label</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">淘吧菜单, 下键展开下拉菜单，ESC关闭</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">aria-haspopup</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">true</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">role</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">menuitem</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">tabindex</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">0</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: #ffa500;">&lt;!--1.首先这个li加tabindex=0使它变成可tab聚焦</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; 2.添加role=menuitem,声明自身的角色，让读屏软件能识别出来</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; 3.声明当前具有子菜单，则加aria-haspopup=&quot;true&quot;，默认不加aria-haspopup=&quot;false&quot;</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; 4.aria-label是用来说明该菜单的功能及提示的。因为读屏软件读取改li时，读成aria-label的内容加&quot;菜单&quot;标记，所以aria-label的文案后面末尾就不加“菜单”了</span></li>
<li><span style="color: #ffa500;">--&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">herf</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">淘吧</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">role</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">menu</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">连衣裙吧</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">韩国吧</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">= </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">menuitem</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">role</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">menuitem</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">tabindex</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">0</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">aria-label</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">团购菜单, 下键展开下拉菜单，ESC关闭</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">aria-haspopup</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">true</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">role</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">menuitem</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">tabindex</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">0</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">团购</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">role</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">menu</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">北京</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">杭州</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">= </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">menuitem</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">role</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">menuitem</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">a</span><span style="color: Gray;"> </span><span style="color: #00008b;">herf</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">促销</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">ul</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>html完成时，当tab到“团购”时，阳光读屏在ff下（国内读屏软件在win7的ie下支持不如ff好）读出“团购菜单, 下键展开下拉菜单，ESC关闭菜单”。虽然读屏软件读出”团购菜单, 下键展开下拉菜单，ESC关闭菜单“，但还是要用js真正实现读屏所读出说的功能。这里的交互方式参考ebay的导航菜单，一方面从交互上说符合用户的心智模型，另一方面从规范上说符合windows application的操作习惯。</p>
<p>下键展开下拉菜单/ESC关闭菜单实现伪代码（具体效果请查看www.etao.com首页菜单）是：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//为每个menuitem注册keydown事件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">E</span><span style="color: Gray;">.</span><span style="color: Blue;">on</span><span style="color: Olive;">(</span><span style="color: Blue;">menuitem</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">keydown</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// esc取消弹出层</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">keyCode</span><span style="color: Gray;"> == </span><span style="color: Maroon;">27</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">halt</span><span style="color: Olive;">(</span><span style="color: Green;">true</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">menu</span><span style="color: Gray;">.</span><span style="color: Blue;">removeClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">hover</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #ffa500;">//下键展开弹出层</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">keyCode</span><span style="color: Gray;"> == </span><span style="color: Maroon;">40</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">halt</span><span style="color: Olive;">(</span><span style="color: Green;">true</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">menu</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">hover</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>同时还需要实现当tab到下一个menuitem时，前一个menuitem自动关闭菜单；当鼠标移出弹出菜单时，该菜单应该消失。因为键盘和鼠标同时用的用户场景也是存在的。</p>
<p><strong>这样实现菜单的好处是，当键盘用户（包括盲人朋友）对菜单的内容不感兴趣时，可自主选择跳过一批菜单链接；感兴趣时可以按照提示打开菜单，这也实现了所有菜单内容通过键盘操作都是可访问的。</strong></p>
<p>类似这种方式，可以应用到网页的各种popup上面，从而提高页面的可访问性。</p>
<p>参考资料：<br />
<a href="http://www.w3.org/WAI/intro/aria.php" target="_blank">http://www.w3.org/WAI/intro/aria.php</a><br />
<a href="http://www.w3.org/TR/wai-aria/appendices#quickref" target="_blank">http://www.w3.org/TR/wai-aria/appendices#quickref</a><br />
<a href="http://www.ebay.com" target="_blank">http://www.ebay.com</a><br />
<a href="http://isd.tencent.com/?p=1284" target="_blank">http://isd.tencent.com/?p=1284</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4291/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>kissy的cookbook—15天学会kissy（完结）</title>
		<link>http://www.36ria.com/4228</link>
		<comments>http://www.36ria.com/4228#comments</comments>
		<pubDate>Wed, 04 May 2011 03:10:07 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[kissy]]></category>
		<category><![CDATA[15天学会kissy]]></category>
		<category><![CDATA[kissy教程]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4228</guid>
		<description><![CDATA[kissy的系列教程已经完结，时间拖得很长，过意不去，今天这篇将收集kissy使用中的问题，形成一个问答集，明河日后会不断补充。 dom操作 如何创建新的DOM节点？ 关于创建节点，在系列教程中没有提到，实际上这部分的操作还是很常用的，详细说明请看文档：http://docs.kissyui.com/kissy/docs/dom/dom-create.html。 var S = KISSY, DOM = S.DOM; //创建一个层 DOM.create('&#60;div&#62;'); //创建一个a DOM.cre......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/4228/kissy-day-15" rel="attachment wp-att-4244"><img src="http://www.36ria.com/wp-content/uploads/2011/05/kissy-day-15.png" alt="" title="kissy-day-15" width="680" height="200" class="alignnone size-full wp-image-4244" /></a><br />
kissy的系列教程已经完结，时间拖得很长，过意不去，今天这篇将收集kissy使用中的问题，形成一个问答集，明河日后会不断补充。</p>
<h4>dom操作</h4>
<h5>如何创建新的DOM节点？</h5>
<p>关于创建节点，在系列教程中没有提到，实际上这部分的操作还是很常用的，详细说明请看文档：<a href="http://docs.kissyui.com/kissy/docs/dom/dom-create.html">http://docs.kissyui.com/kissy/docs/dom/dom-create.html</a>。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;"> = </span><span style="color: Blue;">KISSY</span><span style="color: Gray;">, </span><span style="color: Blue;">DOM</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">DOM</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">//创建一个层</span></li>
<li><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">create</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;div&gt;</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">//创建一个a</span></li>
<li><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">create</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;a&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">href</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">http://www.36ria.com</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">title</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">RIA之家</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<h5>如何把新创建的节点追加到DOM中？</h5>
<p>请看文档：<a href="http://docs.kissyui.com/kissy/docs/dom/dom-insertion.html">http://docs.kissyui.com/kissy/docs/dom/dom-insertion.html</a>，使用<strong>append()</strong>。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;"> = </span><span style="color: Blue;">KISSY</span><span style="color: Gray;">, </span><span style="color: Blue;">DOM</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">DOM</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">div</span><span style="color: Gray;"> = </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">create</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;div&gt;</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">append</span><span style="color: Olive;">(</span><span style="color: Blue;">div</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">body</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h5>如何把新创建的节点插入到指定DOM节点后面？</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;"> = </span><span style="color: Blue;">KISSY</span><span style="color: Gray;">, </span><span style="color: Blue;">DOM</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">DOM</span><span style="color: Gray;">;</span></li>
<li><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">div</span><span style="color: Gray;"> = </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">create</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;div&gt;</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">insertAfter</span><span style="color: Olive;">(</span><span style="color: Blue;">div</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">header</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h5>如何获取文档的高度？</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;"> = </span><span style="color: Blue;">KISSY</span><span style="color: Gray;">, </span><span style="color: Blue;">DOM</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">DOM</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">docHeight</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li></ol></div>
<p>使用docHeight可以获取 document 的 height 值。</p>
<h5>如何获取容器相对于页面的偏移？</h5>
<p>获取容器偏移值，还是颇为常见的操作，可以使用<strong>DOM.offset()</strong>。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;"> = </span><span style="color: Blue;">KISSY</span><span style="color: Gray;">, </span><span style="color: Blue;">DOM</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">DOM</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">// 获取 offset:</span></li>
<li><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">offset</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">header</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// 返回 { left: 0, top: 0 }</span></li></ol></div>
<p>返回的是一个对象哦。</p>
<h4>event事件</h4>
<h4>ajax异步</h4>
<h5>获取json时不执行回调函数</h5>
<p>关于这个问题，明河有特意写了一篇文章，请看《<a href="http://www.36ria.com/3746">说说kissy的ajax获取json时不执行回调函数的问题</a>》。在遇到类似问题时，一定要认真检查数据源格式，最好copy一份数据到本地，在本地模拟调试，确定是哪一方面的问题。<br />
ajax有时会遇到不少无厘头的问题，只要有足够的耐心，还是可以解决的。</p>
<h4>anim动画</h4>
<h4>常用组件</h4>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4228/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>使用jQuery和css进行更好的checkbox按钮设计</title>
		<link>http://www.36ria.com/4203</link>
		<comments>http://www.36ria.com/4203#comments</comments>
		<pubDate>Tue, 03 May 2011 11:22:56 +0000</pubDate>
		<dc:creator>苏河</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery插件]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4203</guid>
		<description><![CDATA[有很多场景需要我们用checkbox来进行诠释，比如一些开关配置的启用与否，当然，原始的checkbox已经深入人心，相信大多数的网站都会采用这种方式与用户进行交互，苏河今天要提出的就是一种不同的交互方式，我们姑且称它为开关式交互（请猛击这里查看demo），这种交互方式相信大家或多或少都能在一些网站上见到过，那么今天，苏河就采用jQuery插件对这种交互进行实现。 ......]]></description>
			<content:encoded><![CDATA[<p>有很多场景需要我们用checkbox来进行诠释，比如一些开关配置的启用与否，当然，原始的checkbox已经深入人心，相信大多数的网站都会采用这种方式与用户进行交互，苏河今天要提出的就是一种不同的交互方式，我们姑且称它为开关式交互（请猛击<a href="http://www.36ria.com/demo/jquery-checkbox/index.html" target="_blank">这里</a>查看demo），这种交互方式相信大家或多或少都能在一些网站上见到过，那么今天，苏河就采用jQuery插件对这种交互进行实现。</p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/jquery-checkbox/index.html" class="btn-view-demo" target="_blank">点此查看demo</a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=214" title="名称：jquery checkbox ，下载次数：168，文件大小：7.7 kB" class="btn-download">点此下载</a></li>
</ul>
<h4>
1. HTML<br />
</h4>
<p>首先是文档结构，我们需要一个带有form标签的checkbox，我们还需要引入一个jQuery以及一个自定义的css样式。</p>
<p><b>index.html</b></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Gray;">!</span><span style="color: #00008b;">DOCTYPE</span><span style="color: Gray;"> </span><span style="color: #00008b;">html</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">html</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">head</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">meta</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">http-equiv</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Content-Type</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">content</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/html; charset=utf-8</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">title</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Better Check Boxes with jQuery and CSS | Tutorialzine Demo</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">title</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">link</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">rel</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">stylesheet</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/css</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">css/styles.css</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">link</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">rel</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">stylesheet</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/css</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">jquery.tzCheckbox/jquery.tzCheckbox.css</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">head</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">body</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">page</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">form</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">method</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">get</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">action</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">./</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">ul</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">label</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">for</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_effects</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Display effects: </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">label</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">input</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">checkbox</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_effects</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_effects</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">data-on</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Show effects</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">data-off</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Hide effects</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">label</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">for</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_location</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Enable location tracking: </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">label</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">input</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">checkbox</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_location</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_location</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">checked</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">label</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">for</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_showsearch</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Include me in search results: </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">label</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">input</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">checkbox</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_showsearch</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_showsearch</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">label</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">for</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_emails</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Email notifications: </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">label</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">input</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">checkbox</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_emails</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ch_emails</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">data-on</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ON</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">data-off</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">OFF</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">ul</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">form</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">jquery.tzCheckbox/jquery.tzCheckbox.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">js/script.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">body</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">html</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>这段代码主容器page包含一个form元素，form元素里面用label诠释相应checkbox，checkbox通过data-on和data-off属性来定义勾选与否显示的文字。<br />
下面一段代码是jQuery插件执行完之后用来替代checkbox显示开关的代码</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">&lt;</span><span style="color: Blue;">span</span><span style="color: Gray;"> </span><span style="color: Green;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">tzCheckBox checked</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &lt;</span><span style="color: Blue;">span</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">tzCBContent</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">&gt;</span><span style="color: Blue;">ON</span><span style="color: Gray;">&lt;</span><span style="color: #8b0000;">/</span><span style="color: Red;">span&gt;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &lt;span class=&quot;tzCBPart&quot;&gt;&lt;</span><span style="color: #8b0000;">/</span><span style="color: Blue;">span</span><span style="color: Gray;">&gt;</span></li>
<li><span style="color: Gray;">&lt;</span><span style="color: #8b0000;">/</span><span style="color: Red;">span&gt;</span></li></ol></div>
<p>当插件被调用的时候，将做一次循环遍历checkbox的操作，然后在每个checkbox后插入上面这段代码，并隐藏checkbox以达到偷梁换柱的目的。</p>
<h4>css</h4>
<p><a href="http://www.36ria.com/4203/checkbox-replacement-explai-2" rel="attachment wp-att-4221"><img src="http://www.36ria.com/wp-content/uploads/2011/05/checkbox-replacement-explai1.png" alt="" title="背景" width="620" height="260" class="alignleft size-full wp-image-4221" /></a><br />
好了，接下来我们将注意力转移到样式上，苏河用一张透明的图片来显示开关的背景，这是一张会随着开关文字增加而自动延伸背景的sprites。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">.</span><span style="color: Blue;">tzCheckBox</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">background</span><span style="color: Gray;">:</span><span style="color: Blue;">url</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">background.png</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">no</span><span style="color: Gray;">-</span><span style="color: Blue;">repeat</span><span style="color: Gray;"> </span><span style="color: Blue;">right</span><span style="color: Gray;"> </span><span style="color: Blue;">bottom</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">display</span><span style="color: Gray;">:</span><span style="color: Blue;">inline</span><span style="color: Gray;">-</span><span style="color: Blue;">block</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">min</span><span style="color: Gray;">-</span><span style="color: Blue;">width</span><span style="color: Gray;">:</span><span style="color: Maroon;">60</span><span style="color: Blue;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">height</span><span style="color: Gray;">:</span><span style="color: Maroon;">33</span><span style="color: Blue;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">white</span><span style="color: Gray;">-</span><span style="color: Blue;">space</span><span style="color: Gray;">:</span><span style="color: Blue;">nowrap</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">position</span><span style="color: Gray;">:</span><span style="color: Blue;">relative</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">cursor</span><span style="color: Gray;">:</span><span style="color: Blue;">pointer</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">margin</span><span style="color: Gray;">-</span><span style="color: Blue;">left</span><span style="color: Gray;">:</span><span style="color: Maroon;">14</span><span style="color: Blue;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">.</span><span style="color: Blue;">tzCheckBox</span><span style="color: Gray;">.</span><span style="color: Blue;">checked</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">background</span><span style="color: Gray;">-</span><span style="color: Blue;">position</span><span style="color: Gray;">:</span><span style="color: Blue;">top</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">left</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">margin</span><span style="color: Gray;">:</span><span style="color: Maroon;">0</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">14</span><span style="color: Blue;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">.</span><span style="color: Blue;">tzCheckBox</span><span style="color: Gray;"> .</span><span style="color: Blue;">tzCBContent</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">color</span><span style="color: Gray;">: </span><span style="color: Blue;">white</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">line</span><span style="color: Gray;">-</span><span style="color: Blue;">height</span><span style="color: Gray;">: </span><span style="color: Maroon;">31</span><span style="color: Blue;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">padding</span><span style="color: Gray;">-</span><span style="color: Blue;">right</span><span style="color: Gray;">: </span><span style="color: Maroon;">38</span><span style="color: Blue;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">text</span><span style="color: Gray;">-</span><span style="color: Blue;">align</span><span style="color: Gray;">: </span><span style="color: Blue;">right</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">.</span><span style="color: Blue;">tzCheckBox</span><span style="color: Gray;">.</span><span style="color: Blue;">checked</span><span style="color: Gray;"> .</span><span style="color: Blue;">tzCBContent</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">text</span><span style="color: Gray;">-</span><span style="color: Blue;">align</span><span style="color: Gray;">:</span><span style="color: Blue;">left</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">padding</span><span style="color: Gray;">:</span><span style="color: Maroon;">0</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">38</span><span style="color: Blue;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">.</span><span style="color: Blue;">tzCBPart</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">background</span><span style="color: Gray;">:</span><span style="color: Blue;">url</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">background.png</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">no</span><span style="color: Gray;">-</span><span style="color: Blue;">repeat</span><span style="color: Gray;"> </span><span style="color: Blue;">left</span><span style="color: Gray;"> </span><span style="color: Blue;">bottom</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">width</span><span style="color: Gray;">:</span><span style="color: Maroon;">14</span><span style="color: Blue;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">position</span><span style="color: Gray;">:</span><span style="color: Blue;">absolute</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">top</span><span style="color: Gray;">:</span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">left</span><span style="color: Gray;">:-</span><span style="color: Maroon;">14</span><span style="color: Blue;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">height</span><span style="color: Gray;">:</span><span style="color: Maroon;">33</span><span style="color: Blue;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">overflow</span><span style="color: Gray;">: </span><span style="color: Blue;">hidden</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">.</span><span style="color: Blue;">tzCheckBox</span><span style="color: Gray;">.</span><span style="color: Blue;">checked</span><span style="color: Gray;"> .</span><span style="color: Blue;">tzCBPart</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">background</span><span style="color: Gray;">-</span><span style="color: Blue;">position</span><span style="color: Gray;">:</span><span style="color: Blue;">top</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">right</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">left</span><span style="color: Gray;">:</span><span style="color: Blue;">auto</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">right</span><span style="color: Gray;">:-</span><span style="color: Maroon;">14</span><span style="color: Blue;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>这里的<b>tzCheckBox</b>用inline-block的行内的块元素进行定义，为的是tzCheckBox子元素的背景和文字在同一行，同时position的相对定位也为其子元素的背景元素的定位提供一个参考的标准，可以让<b>tzCBPart</b>显示剩余的背景。</p>
<h4>jQuery插件</h4>
<p>好了，接下来介绍jQuery插件，这个插件公布了一个可写属性labels供外部进行开关文字的定义，另外，将选择器作为this指针传入函数进行checkbox的遍历。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $.</span><span style="color: Blue;">fn</span><span style="color: Gray;">.</span><span style="color: Blue;">tzCheckbox</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">options</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//默认是ON和OFF:</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">options</span><span style="color: Gray;"> = $.</span><span style="color: Blue;">extend</span><span style="color: Olive;">({</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">labels</span><span style="color: Gray;"> : </span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">ON</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">OFF</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span><span style="color: Blue;">options</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">each</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">originalCheckBox</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">labels</span><span style="color: Gray;"> = </span><span style="color: Olive;">[]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 检查data-on和data-off属性:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">originalCheckBox</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">on</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">labels</span><span style="color: Olive;">[</span><span style="color: Maroon;">0</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Blue;">originalCheckBox</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">on</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">labels</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Blue;">originalCheckBox</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">off</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">else</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">labels</span><span style="color: Gray;"> = </span><span style="color: Blue;">options</span><span style="color: Gray;">.</span><span style="color: Blue;">labels</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 生成开关HTML代码</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">checkBox</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;span&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">className</span><span style="color: Gray;">&nbsp; &nbsp; : </span><span style="color: #8b0000;">'</span><span style="color: Red;">tzCheckBox </span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">checked</span><span style="color: Gray;">?</span><span style="color: #8b0000;">'</span><span style="color: Red;">checked</span><span style="color: #8b0000;">'</span><span style="color: Gray;">:</span><span style="color: #8b0000;">''</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">html</span><span style="color: Gray;">:&nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;span class=&quot;tzCBContent&quot;&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span><span style="color: Blue;">labels</span><span style="color: Olive;">[</span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">checked</span><span style="color: Gray;">?</span><span style="color: Maroon;">0</span><span style="color: Gray;">:</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;/span&gt;&lt;span class=&quot;tzCBPart&quot;&gt;&lt;/span&gt;</span><span style="color: #8b0000;">'</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//插入开关代码，并隐藏原始的checkbox </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">checkBox</span><span style="color: Gray;">.</span><span style="color: Blue;">insertAfter</span><span style="color: Olive;">(</span><span style="color: Blue;">originalCheckBox</span><span style="color: Gray;">.</span><span style="color: Blue;">hide</span><span style="color: Olive;">())</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">checkBox</span><span style="color: Gray;">.</span><span style="color: Blue;">click</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">checkBox</span><span style="color: Gray;">.</span><span style="color: Blue;">toggleClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">checked</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">isChecked</span><span style="color: Gray;"> = </span><span style="color: Blue;">checkBox</span><span style="color: Gray;">.</span><span style="color: Blue;">hasClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">checked</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 记录开关变化至原始的checkbox中</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">originalCheckBox</span><span style="color: Gray;">.</span><span style="color: Blue;">attr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">checked</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">isChecked</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">checkBox</span><span style="color: Gray;">.</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">.tzCBContent</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">html</span><span style="color: Olive;">(</span><span style="color: Blue;">labels</span><span style="color: Olive;">[</span><span style="color: Blue;">isChecked</span><span style="color: Gray;">?</span><span style="color: Maroon;">0</span><span style="color: Gray;">:</span><span style="color: Maroon;">1</span><span style="color: Olive;">])</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 监听原始checkbox的改变，做开关模拟点击</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">originalCheckBox</span><span style="color: Gray;">.</span><span style="color: Blue;">bind</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">change</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">checkBox</span><span style="color: Gray;">.</span><span style="color: Blue;">click</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">})(</span><span style="color: Blue;">jQuery</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>当然，针对开关的操作定义了click事件来进行一些响应，比如是否选中会记录到原始的checkbox（虽然它被隐藏了）中，比如开关文字的变化。有人会问为什么要记录到原始的checkbox中，因为这是一个表单，当提交的时候它就需要post一个正确的值了。<br />
我们可以使用下面的代码来调用这段插件。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">input[type=checkbox]</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">tzCheckbox</span><span style="color: Olive;">({</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">labels</span><span style="color: Gray;">: </span><span style="color: Olive;">[</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;">Enable</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">Disable</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> </span><span style="color: Olive;">]</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>这段代码的含义就是调用页面所有的checkbox，并写入开关对应的文字Enable和Disable。</p>
<p>到此为止，这个demo也结束了。</p>
<h4>结束语</h4>
<p>这个插件的用处就在于其取代了原来的checkbox，在某些场合能给用户更好的交互体验，相信大家一定在一些配置应用或者管理员页面中经常见到这样的交互吧，当然，当用户禁用了javascript的时候，展现给用户的就是原始的checkbox了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4203/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>自定义事件（事件高级篇）—15天学会kissy</title>
		<link>http://www.36ria.com/4192</link>
		<comments>http://www.36ria.com/4192#comments</comments>
		<pubDate>Wed, 27 Apr 2011 12:44:35 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[kissy]]></category>
		<category><![CDATA[15天学会kissy]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4192</guid>
		<description><![CDATA[点此查看demo 在《第三天event事件（基础篇）》中明河介绍了kissy中事件的基础使用，今天介绍如何自定义事件，猛击此处进入相关文档。 1.为什么需要自定义事件？ 哪些场景需要自定义事件？当你希望模块或组件在供第三方使用时能够提供更强的可定制性和扩展性时，就需要一批自定义事件。举个前面教程的例子。我们完成了一个步骤条组件，可以基本上满足我们的需求，但......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/4192/kissy-day-14-2" rel="attachment wp-att-4194"><img src="http://www.36ria.com/wp-content/uploads/2011/04/kissy-day-141.png" alt="" title="kissy-day-14" width="680" height="200" class="alignnone size-full wp-image-4194" /></a></p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/ks/day-14.html" class="btn-view-demo" target="_blank">点此查看demo</a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=191" title="名称：15天学会kissy实例，下载次数：611，文件大小：665.22 kB" class="btn-download">点此下载</a></li>
</ul>
<p>在<a href="http://www.36ria.com/3202">《第三天event事件（基础篇）》</a>中明河介绍了kissy中事件的基础使用，今天介绍如何自定义事件，<a href="http://docs.kissyui.com/kissy/docs/event/event-target.html">猛击此处进入相关文档</a>。</p>
<h4>1.为什么需要自定义事件？</h4>
<p>哪些场景需要自定义事件？当你希望模块或组件在供第三方使用时能够提供更强的可定制性和扩展性时，就需要一批自定义事件。举个前面教程的例子。我们完成了一个步骤条组件，可以基本上满足我们的需求，但现在有这样的需求：用户希望在改变步骤条颜色后弹出一个对话框，或者在组件运行完成后打印出一行信息。为了满足上述需求，我们需要给步骤条组件增加二个事件afterColorChange和render事件。<br />
如何新增自定义事件呢？接着往下看。</p>
<h4>2.给组件新增事件</h4>
<p>明河先去掉步骤条组件的业务逻辑代码，新的KISSY.Steps的代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">KISSY</span><span style="color: Gray;">.</span><span style="color: Blue;">add</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">steps</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">S</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * 步骤条组件</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @class Steps</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @constructor</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @param {Object} container 表单容器</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @param {Object} config 配置对象</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Steps</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Gray;"> ,</span><span style="color: Blue;">config</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Olive;">(</span><span style="color: Blue;">self</span><span style="color: Gray;"> </span><span style="color: Green;">instanceof</span><span style="color: Gray;"> </span><span style="color: Blue;">Steps</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Steps</span><span style="color: Olive;">(</span><span style="color: Blue;">config</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">container</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//超类初始化</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">superclass</span><span style="color: Gray;">.</span><span style="color: Blue;">constructor</span><span style="color: Gray;">.</span><span style="color: Blue;">call</span><span style="color: Olive;">(</span><span style="color: Blue;">self</span><span style="color: Gray;">, </span><span style="color: Blue;">config</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//继承于KISSY.Base</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">extend</span><span style="color: Olive;">(</span><span style="color: Blue;">Steps</span><span style="color: Gray;">, </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Base</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 设置参数</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">ATTRS</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//步骤条颜色</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">color</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">red</span><span style="color: #8b0000;">'</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 方法</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">augment</span><span style="color: Olive;">(</span><span style="color: Blue;">Steps</span><span style="color: Gray;">, </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 运行</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Object} 对象</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">render</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">fire</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">render</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Olive;">{</span><span style="color: Blue;">author</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">明河共影</span><span style="color: #8b0000;">'</span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Steps</span><span style="color: Gray;"> = </span><span style="color: Blue;">Steps</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">, </span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">requires</span><span style="color: Gray;">: </span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">core</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<h5>1)继承S.EventTarget</h5>
<p>想要使你的组件可以自定义事件，必须继承KISSY.EventTarget，或者继承KISSY.Base。比如：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//继承于KISSY.Base</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">extend</span><span style="color: Olive;">(</span><span style="color: Blue;">Steps</span><span style="color: Gray;">, </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Base</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h5>2)fire组件内触发事件</h5>
<p>想要用户在外部触发事件，必须在组件相应位置fire该事件，比如明河希望用户可以监听到组件的运行后触发的事件。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">render</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">fire</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">render</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Olive;">{</span><span style="color: Blue;">author</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">明河共影</span><span style="color: #8b0000;">'</span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>fire接受二个参数：</p>
<ol>
<li>第一个参数：自定义的事件名称</li>
<li>第二个参数：事件供外部使用的数据</li>
</ol>
<h4>3.监听事件</h4>
<p>接下来我们在外部监听该事件。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;"> = </span><span style="color: Blue;">KISSY</span><span style="color: Gray;">,</span><span style="color: Blue;">Event</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Event</span><span style="color: Gray;">,</span><span style="color: Blue;">DOM</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">DOM</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//实例化组件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Steps</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#demo1</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//监听组件运行后事件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">on</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">render</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">ev</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">组件已经运行！</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">'</span><span style="color: Red;">作者名称：</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: Blue;">ev</span><span style="color: Gray;">.</span><span style="color: Blue;">author</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//运行组件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">render</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li></ol></div>
<p>启动页面后，会在控制台上打印出如下消息：<br />
<a href="http://www.36ria.com/4192/dat-14-2" rel="attachment wp-att-4197"><img src="http://www.36ria.com/wp-content/uploads/2011/04/dat-14-2.png" alt="" title="dat-14-2" width="226" height="85" class="alignnone size-full wp-image-4197" /></a><br />
on的用法与监听原生事件类似：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">on</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">render</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">ev</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">组件已经运行！</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">'</span><span style="color: Red;">作者名称：</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: Blue;">ev</span><span style="color: Gray;">.</span><span style="color: Blue;">author</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<h4>4.KISSY.Base内置的自定义事件</h4>
<p>当你的组件继承于KISSY.Base，会自动带有属性事件，比如：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">ATTRS</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//步骤条颜色</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">color</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">red</span><span style="color: #8b0000;">'</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li></ol></div>
<p>设置了color属性，在整页的代码中，明河并没有fire “afterColorChange”事件，但外部依旧可以监听的到该事件，比如：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//监听颜色改变事件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">on</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">afterColorChange</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">ev</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">log</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">颜色已经改变！</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">'</span><span style="color: Red;">新的颜色：</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: Blue;">ev</span><span style="color: Gray;">.</span><span style="color: Blue;">newVal</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//改变颜色</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">set</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">color</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">green</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>这是KISSY.Base的强大之处，KISSY.Base会自动为定义的属性创建自定义事件，包括“ afterAttrChange”（Attr为属性名称，第一个字母大写，比如Color）、“beforeAttrChange”。</p>
<h4>5.注销事件</h4>
<p>使用detach即可注销事件监听，用法比较简单，这里就不演示了。</p>
<h4>明河结语</h4>
<p>15天学会kissy，已经进入尾声，下一篇的教程，是kissy相关问题的解答，打算做个不断更新的cookbook。这个系列教程是明河写的最长的系列教程，完成后将会对其中的代码进行整理，同时补充上一些新的知识和纠正一些错误。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4192/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>链接与按钮的焦点</title>
		<link>http://www.36ria.com/4183</link>
		<comments>http://www.36ria.com/4183#comments</comments>
		<pubDate>Tue, 26 Apr 2011 14:57:12 +0000</pubDate>
		<dc:creator>天河</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4183</guid>
		<description><![CDATA[我们编写页面，遇到某些依赖JavaScript来实现的功能时，常常使用的a元素来做钩子。这是个简单有效的方法，不过，更合适的方式是使用button元素：换一批商品(button, 可focus)。 在使用a元素时，href属性在这个场景下会显得很尴尬，人们往往使用href=”#”，或者干脆不设置href属性。于是问题来了——a元素在没有href属性时，是不能被聚焦的（就是不能获得焦点），这是个很严重......]]></description>
			<content:encoded><![CDATA[<p>我们编写页面，遇到某些依赖JavaScript来实现的功能时，常常使用的a元素来做钩子。这是个简单有效的方法，不过，更合适的方式是使用button元素：<button type="button">换一批商品(button, 可focus)</button>。</p>
<p>在使用a元素时，href属性在这个场景下会显得很尴尬，人们往往使用href=”#”，或者干脆不设置href属性。于是问题来了——a元素在没有href属性时，是不能被聚焦的（就是不能获得焦点），这是个很严重的可用性障碍。</p>
<p>这里提供两种方式的对比：<br />
<a class="switch">换一批商品(a, 无法focus)</a></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">switch</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">换一批商品(a, 无法focus)</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p><a href="#" class="switch">换一批商品(a, 可focus)</a></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;"> </span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">switch</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">换一批商品(a, 可focus)</span><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>您可以在本页多按几下Tab测试一下。（写完这篇文章，意外发现RIA之家的tabindex有些乱，改天修正下）</p>
<p>实际上，通过CSS，button完全可以胜任这些场景。并且既符合语义，又没可用性问题，赶紧改用button吧 ^_^</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4183/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>第十三天构建步骤条组件（3）—15天学会kissy</title>
		<link>http://www.36ria.com/3929</link>
		<comments>http://www.36ria.com/3929#comments</comments>
		<pubDate>Mon, 11 Apr 2011 08:33:44 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[kissy]]></category>
		<category><![CDATA[15天学会kissy]]></category>
		<category><![CDATA[kissy教程]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=3929</guid>
		<description><![CDATA[上一篇教程，明河讲解了KISSY中的继承以及KISSY.Base的简单用法，今天这篇文章主要讲解步骤条组件的业务逻辑实现。 1.定义组件的常量 javascript并没有真正的常量的概念（所谓常量即一旦被赋值后不能被改变的变量，而在javascript中一切都是可变的），所以我们只能约定，在js中全部大写的变量为常量。比如： //步骤条组件版本号 Steps.VERSION = 2.0; //步骤的起始索引 Steps.ZINDEX = 500;......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/3929/kissy-13" rel="attachment wp-att-4063"><img src="http://www.36ria.com/wp-content/uploads/2011/04/kissy-13.png" alt="" title="kissy-13" width="640" height="200" class="alignnone size-full wp-image-4063" /></a></p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/steps/index.html" class="btn-view-demo" target="_blank"></a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=205" title="名称：KISSY.Steps—步骤条组件，下载次数：253，文件大小：6.81 kB" class="btn-download">点此下载</a></li>
</ul>
<p>上一篇教程，明河讲解了KISSY中的继承以及KISSY.Base的简单用法，今天这篇文章主要讲解步骤条组件的业务逻辑实现。</p>
<h4>1.定义组件的常量</h4>
<p>javascript并没有真正的常量的概念（所谓常量即一旦被赋值后不能被改变的变量，而在javascript中一切都是可变的），所以我们只能约定，在js中全部大写的变量为常量。比如：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//步骤条组件版本号</span></li>
<li><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">VERSION</span><span style="color: Gray;"> = </span><span style="color: Maroon;">2.0</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">//步骤的起始索引</span></li>
<li><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">ZINDEX</span><span style="color: Gray;"> = </span><span style="color: Maroon;">500</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">//箭头模板</span></li>
<li><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">ARROW_TPL</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;div class=&quot;trigon&quot;&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;span class=&quot;bor&quot;&gt;&lt;/span&gt;&lt;span class=&quot;blo&quot;&gt;&lt;/span&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;/div&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li></ol></div>
<p>有一种特殊情况，如果常量为一个对象变量，那如何处理？比如下面代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//步骤条的所有支持的颜色</span></li>
<li><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">color</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span><span style="color: Blue;">ORANGE</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">orange</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">BLUE</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">blue</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">GREEN</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">green</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">RED</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">red</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">PINK</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">pink</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">GRAY</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">gray</span><span style="color: #8b0000;">'</span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">//组件用到的内部样式名</span></li>
<li><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">cls</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span><span style="color: Blue;">STEPS</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ks-steps</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span><span style="color: Blue;">ITEM</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ks-steps-item</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span><span style="color: Blue;">CURRENT</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">current</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span><span style="color: Blue;">DONE</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">done</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span><span style="color: Blue;">FIRST</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">first</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">LAST</span><span style="color: Gray;">:</span><span style="color: #8b0000;">'</span><span style="color: Red;">last</span><span style="color: #8b0000;">'</span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li></ol></div>
<p>对象变量不大写，对象内部成员的key名大写，这也是一种约定。<br />
（既然是约定，也就是不要求强制遵守，但明河的建议是使用这种约定还是靠谱的，也有助于其他程序员理解你的代码。）</p>
<h5>为什么使用常量？</h5>
<p><strong>ORANGE:&#8217;orange&#8217;</strong>是不是觉得就是一句废话，为什么我们需要常量？</p>
<ol>
<li>使程序更易于修改，达到一改全改的目的；</li>
<li>增加可读性（<em>通过color这个对象，你可以很直观的知道组件支持哪些颜色</em>）和移值性；</li>
<li>使程序调试起来更方便（<em>举个简单例子：你需要对颜色进行判断比如if(c == &#8216;orage&#8217;) alert(c);结果没出现弹出框，why？原来拼写错误了！应该是‘orange’，别少看这个错误，很多朋友都犯过拼写错误，而且还找半天，没发现原因，如果你使用常量if(c == Steps.color.ORAGE) alert(c);报错了！于是你就定位到这一行的代码，就很容易发现ORANGE拼错了！</em>）</li>
</ol>
<h4>2.思考供用户配置的参数</h4>
<p>明河在写步骤条组件的时候，最开始做的一件事，不是敲代码，而是思考这个组件需要满足用户哪些需求，并将这些需求记录成清单，然后根据这些需求设计参数和方法。<br />
步骤条组件需要下面的功能：</p>
<ol>
<li>可以控制什么时候生成步骤条</li>
<li>用户可以自定义步骤条颜色</li>
<li>可以自定义单个步骤的宽度</li>
<li>自由控制是激活第几个步骤</li>
</ol>
<p>好的，根据这些需求，明河设计了以下参数：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 设置参数</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">ATTRS</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//是否自动运行</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">autoRender</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Green;">false</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//步骤宽度</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">width</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Blue;">EMPTY</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//步骤条颜色</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">color</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">color</span><span style="color: Gray;">.</span><span style="color: Blue;">ORANGE</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//激活</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">act</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Maroon;">0</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li></ol></div>
<p>如果你对上面设置参数的形式感到迷惑，请看<a href="http://www.36ria.com/3922">前一篇教程</a>。</p>
<h4>3.设计组件方法</h4>
<p>与设计参数一样，明河的建议是先思考，组件需要哪些方法，哪些是共有的，用户可以调用的；哪些是私有的方法；方法的函数名采用什么更合理。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 方法</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">augment</span><span style="color: Olive;">(</span><span style="color: Blue;">Steps</span><span style="color: Gray;">, </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 初始化</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">_init</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 运行</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Object} 对象</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">render</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 获取步骤条组件允许设置的颜色值</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Array} 颜色数组</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">allowColor</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 是否是允许设置的颜色</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param {String} color 颜色</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Boolean}</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">isAllowColor</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">color</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 设置每个步骤的样式</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_setItemStyle</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 设置宽度</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param {Number} w 宽度</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Number}</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_setWidth</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">w</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 设置颜色</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param {String} c 颜色</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {String}</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_setColor</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">c</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 设置激活的当前步骤</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param {Number} i 当前步骤</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Number}</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_setAct</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 向每个步骤添加三角</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Object} 对象</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">_addTrigon</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>在javascript并没有共有、私有概念，我们一样采用约定，凡是带“_”下划线的变量或函数名即表示私有的。</p>
<h4>4.render方法</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 运行</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Object} 对象</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">render</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">,</span><span style="color: Blue;">event</span><span style="color: Gray;"> = </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">event</span><span style="color: Gray;">,</span><span style="color: Blue;">container</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">container</span><span style="color: Gray;">,</span><span style="color: Blue;">steps</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;"> = </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">cls</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//不存在容器，直接退出</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Gray;"> == </span><span style="color: Green;">null</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//步骤列表li元素</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;"> = </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">children</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Gray;">,</span><span style="color: Blue;">LI</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//给容器添加“ks-steps”样式</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;">.</span><span style="color: Blue;">STEPS</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//设置steps属性（li元素集合）</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">steps</span><span style="color: Gray;"> = </span><span style="color: Blue;">steps</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//如果不存在li直接退出</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//isRender属性标示组件已经运行</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">isRender</span><span style="color: Gray;"> = </span><span style="color: Green;">true</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//设置每个步骤的样式</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">_setItemStyle</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//设置宽度</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">_setWidth</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//设置颜色</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">_setColor</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//设置激活的当前步骤</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">_setAct</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//向每个步骤添加三角</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">_addTrigon</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>render是最重要的组件方法，在实例化组件后，用户还需要调用下该方法，表示真正运行组件，比如：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">//示例1</li>
<li>&nbsp;&nbsp; &nbsp;step1 = new S.Steps('#steps-demo-1');</li>
<li>&nbsp;&nbsp; &nbsp;//运行</li>
<li>&nbsp;&nbsp; &nbsp;step1.render();</li></ol></div>
<p>有用过ext的朋友应该对render非常熟悉，组件真正干活的就是render方法。</p>
<h4>5._init做啥？</h4>
<p>在步骤条组件中，_init函数中，没有任何一行代码，为什么呢？<br />
_init可以理解为初始化，kissy的不少组件_init作用和render是类似的，但这种方式有个不合理的地方，实例化组件即运行组件，不够颗粒化，有时候我们希望实例化组件，但不运行，只有符合一定条件或在符合一个时间点的时候再运行。<br />
为了保持和kissy其他组件的风格一致，明河这里依旧保留_init这个方法。</p>
<h4>6.设置每个步骤的样式</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 设置每个步骤的样式</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_setItemStyle</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">,</span><span style="color: Blue;">steps</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">steps</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;"> = </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">cls</span><span style="color: Gray;">,</span><span style="color: Blue;">zIndex</span><span style="color: Gray;"> = </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">ZINDEX</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//遍历li</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">each</span><span style="color: Olive;">(</span><span style="color: Blue;">steps</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//给li增加“ks-steps-item”样式</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;">.</span><span style="color: Blue;">ITEM</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//设置li的z-index</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">css</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">zIndex</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">zIndex</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">zIndex</span><span style="color: Gray;"> --;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>这个方法有二个目的，给li增加“ks-steps-item”样式，同时设置li的z-index（保证li和li之间箭头正确的覆盖关系）。<br />
<a href="http://www.36ria.com/3929/steps-1" rel="attachment wp-att-4058"><img src="http://www.36ria.com/wp-content/uploads/2011/04/steps-1.png" alt="" title="steps-1" width="445" height="84" class="alignnone size-full wp-image-4058" /></a></p>
<h4>7.设置每个步骤的宽度</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 设置宽度</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param {Number} w 宽度</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Number}</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_setWidth</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">w</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">,</span><span style="color: Blue;">width</span><span style="color: Gray;"> = </span><span style="color: Blue;">w</span><span style="color: Gray;"> || </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">width</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">container</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">container</span><span style="color: Gray;">,</span><span style="color: Blue;">steps</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">steps</span><span style="color: Gray;">,</span><span style="color: Blue;">itemLen</span><span style="color: Gray;"> = </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">,</span><span style="color: Blue;">containerWidth</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//宽度为空时，自动设置每个步骤宽度（平分）</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">width</span><span style="color: Gray;"> == </span><span style="color: Blue;">EMPTY</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">itemLen</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">containerWidth</span><span style="color: Gray;"> = </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">width</span><span style="color: Gray;"> = </span><span style="color: Teal;">Number</span><span style="color: Olive;">(</span><span style="color: Blue;">containerWidth</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">/</span><span style="color: Red;"> itemLen);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DOM.width(steps,width);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return width;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li></ol></div>
<p><a href="http://www.36ria.com/3929/steps-2-2" rel="attachment wp-att-4059"><img src="http://www.36ria.com/wp-content/uploads/2011/04/steps-2.png" alt="" title="steps-2" width="445" height="84" class="alignnone size-full wp-image-4059" /></a><br />
当宽度为空时，自动平分步骤宽度，这是默认值的处理。</p>
<h4>8.设置步骤条颜色</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 设置颜色</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param {String} c 颜色</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {String}</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_setColor</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">c</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">,</span><span style="color: Blue;">color</span><span style="color: Gray;"> = </span><span style="color: Blue;">c</span><span style="color: Gray;"> || </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">color</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">container</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">container</span><span style="color: Gray;">,</span><span style="color: Blue;">allowColors</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">allowColor</span><span style="color: Olive;">()</span><span style="color: Gray;">,</span><span style="color: Blue;">isAllowColor</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">isAllowColor</span><span style="color: Olive;">(</span><span style="color: Blue;">color</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//如果组件不支持该颜色直接退出</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">color</span><span style="color: Gray;"> == </span><span style="color: Blue;">EMPTY</span><span style="color: Gray;"> || !</span><span style="color: Blue;">isAllowColor</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//移除步骤条容器的所有颜色样式名</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">removeClass</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Gray;">,</span><span style="color: Blue;">allowColors</span><span style="color: Gray;">.</span><span style="color: Blue;">join</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//给步骤条容器添加指定颜色样式名</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Gray;">,</span><span style="color: Blue;">color</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">color</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p><a href="http://www.36ria.com/3929/steps-3-2" rel="attachment wp-att-4060"><img src="http://www.36ria.com/wp-content/uploads/2011/04/steps-3.png" alt="" title="steps-3" width="496" height="114" class="alignnone size-full wp-image-4060" /></a></p>
<h4>10.设置激活的当前步骤</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 设置激活的当前步骤</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param {Number} i 当前步骤</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Number}</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_setAct</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">,</span><span style="color: Blue;">act</span><span style="color: Gray;"> = </span><span style="color: Blue;">i</span><span style="color: Gray;"> || </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">act</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;"> = </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">cls</span><span style="color: Gray;">,</span><span style="color: Blue;">steps</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">steps</span><span style="color: Gray;">,</span><span style="color: Blue;">itemLen</span><span style="color: Gray;"> = </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//当参数为空或值超过允许或小于1时移除全部样式</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">act</span><span style="color: Gray;"> == </span><span style="color: Blue;">EMPTY</span><span style="color: Gray;"> || </span><span style="color: Blue;">act</span><span style="color: Gray;"> &gt; </span><span style="color: Blue;">itemLen</span><span style="color: Gray;"> || </span><span style="color: Blue;">act</span><span style="color: Gray;"> &lt; </span><span style="color: Maroon;">1</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">removeClass</span><span style="color: Olive;">(</span><span style="color: Blue;">steps</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;">.</span><span style="color: Blue;">DONE</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">'</span><span style="color: Red;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: Blue;">cls</span><span style="color: Gray;">.</span><span style="color: Blue;">CURRENT</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//遍历li</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">each</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">,</span><span style="color: Blue;">i</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//给第一个步骤增加“first”样式名</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">i</span><span style="color: Gray;"> == </span><span style="color: Maroon;">0</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;">.</span><span style="color: Blue;">FIRST</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//给最后一个步骤增加&quot;last&quot;样式名</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">i</span><span style="color: Gray;"> == </span><span style="color: Blue;">itemLen</span><span style="color: Gray;"> - </span><span style="color: Maroon;">1</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;">.</span><span style="color: Blue;">LAST</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//移除所有步骤的&quot;done&quot;和&quot;current&quot;样式名</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">removeClass</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;">.</span><span style="color: Blue;">DONE</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">'</span><span style="color: Red;">&nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: Blue;">cls</span><span style="color: Gray;">.</span><span style="color: Blue;">CURRENT</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">act</span><span style="color: Gray;"> --;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//添加'current'当前样式</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: Blue;">steps</span><span style="color: Olive;">[</span><span style="color: Blue;">act</span><span style="color: Olive;">]</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;">.</span><span style="color: Blue;">CURRENT</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">each</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">,</span><span style="color: Blue;">i</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">i</span><span style="color: Gray;"> &gt;= </span><span style="color: Blue;">act</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">false</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//添加'done'已完成样式</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">,</span><span style="color: Blue;">cls</span><span style="color: Gray;">.</span><span style="color: Blue;">DONE</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">act</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p><a href="http://www.36ria.com/3929/steps-4" rel="attachment wp-att-4061"><img src="http://www.36ria.com/wp-content/uploads/2011/04/steps-4.png" alt="" title="steps-4" width="485" height="82" class="alignnone size-full wp-image-4061" /></a></p>
<h4>11. 向每个步骤添加三角</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 向每个步骤添加三角</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return {Object} 对象</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">_addTrigon</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">,</span><span style="color: Blue;">steps</span><span style="color: Gray;"> = </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">steps</span><span style="color: Gray;">,</span><span style="color: Blue;">stepLen</span><span style="color: Gray;"> = </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">html</span><span style="color: Gray;"> = </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">ARROW_TPL</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">each</span><span style="color: Olive;">(</span><span style="color: Blue;">steps</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">elem</span><span style="color: Gray;">,</span><span style="color: Blue;">i</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//除了最后一个步骤之外全部添加三角样式</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">i</span><span style="color: Gray;"> &lt; </span><span style="color: Blue;">stepLen</span><span style="color: Gray;"> - </span><span style="color: Maroon;">1</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">append</span><span style="color: Olive;">(</span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">create</span><span style="color: Olive;">(</span><span style="color: Blue;">html</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">elem</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p><a href="http://www.36ria.com/3929/steps-5" rel="attachment wp-att-4062"><img src="http://www.36ria.com/wp-content/uploads/2011/04/steps-5.png" alt="" title="steps-5" width="405" height="106" class="alignnone size-full wp-image-4062" /></a><br />
有不明白三角生成技术原理的请看《<a href="http://www.36ria.com/3841">步骤条组件原理说明</a>》。</p>
<h4>12.设置setter</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 设置参数</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">ATTRS</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//是否自动运行</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">autoRender</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Green;">false</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">setter</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">v</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">render</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">v</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//步骤宽度</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">width</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Blue;">EMPTY</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">setter</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">v</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">isRender</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">_setWidth</span><span style="color: Olive;">(</span><span style="color: Blue;">v</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">v</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//步骤条颜色</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">color</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">color</span><span style="color: Gray;">.</span><span style="color: Blue;">ORANGE</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">setter</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">v</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">isRender</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">_setColor</span><span style="color: Olive;">(</span><span style="color: Blue;">v</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">v</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//激活</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">act</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">setter</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">v</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">isRender</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">_setAct</span><span style="color: Olive;">(</span><span style="color: Blue;">v</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">v</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li></ol></div>
<p>组件基本上已经完成了，接下来就是测试再测试&#8230;<br />
还少了一个知识点没讲到：<strong>kissy的自定义事件</strong>。下一篇继续&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/3929/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Firefox4-前端开发视角</title>
		<link>http://www.36ria.com/4068</link>
		<comments>http://www.36ria.com/4068#comments</comments>
		<pubDate>Sun, 10 Apr 2011 08:13:08 +0000</pubDate>
		<dc:creator>苏河</dc:creator>
				<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[firefox4]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4068</guid>
		<description><![CDATA[随着IE9的高调发布，firefox4也随之降临。到目前为止，这个版本还是非常受欢迎的，在它发布的第一个24小时之内就超过了700万的下载量。今天，苏河就带大家浏览下firefox4的变化。 类chrome界面 不管是IE9，还是firefox4，可以看到，其界面都越来越chrome化了，其实不存在谁抄袭谁，好的东西大家都要借鉴，用户都喜欢简单实用的东西，苏河很欣慰，浏览器的外观终于统一化，但是......]]></description>
			<content:encoded><![CDATA[<p>随着IE9的高调发布，firefox4也随之降临。到目前为止，这个版本还是非常受欢迎的，在它发布的第一个24小时之内就超过了700万的下载量。今天，苏河就带大家浏览下firefox4的变化。</p>
<h2>类chrome界面</h2>
<p><a rel="attachment wp-att-4069" href="http://www.36ria.com/4068/%e7%95%8c%e9%9d%a2"><img class="alignnone size-medium wp-image-4069" title="界面" src="http://www.36ria.com/wp-content/uploads/2011/04/界面-400x153.jpg" alt="" width="400" height="153" /></a><br />
不管是IE9，还是firefox4，可以看到，其界面都越来越chrome化了，其实不存在谁抄袭谁，好的东西大家都要借鉴，用户都喜欢简单实用的东西，苏河很欣慰，浏览器的外观终于统一化，但是我们与浏览器的兼容性却还是无止境的斗争。</p>
<h2>更多的HTML5语言</h2>
<p><a rel="attachment wp-att-4070" href="http://www.36ria.com/4068/html5-2"><img class="alignnone size-medium wp-image-4070" title="HTML5" src="http://www.36ria.com/wp-content/uploads/2011/04/HTML5-231x200.jpg" alt="" width="231" height="200" /></a><br />
HTML5在将来势必会成为主流，Firefox4基于Gecko 2.0 Web平台，正如开发者所期望的，它提供给面向网络开发的大力支持，全新的HTML5解析器，将带来更强大更丰富的功能，你甚至可以嵌入SVG。<br />
Firefox4对HTML5进行了更多的支持，这里苏河也一点一点给大家分享：</p>
<ol>
<li>扩展了HTML5表单，想想看复杂的表单验证吧，想想其复杂的正则吧，也许你会使用一个庞大的框架来支持表单验证，但是firefox4让你不需要javascript代码便能完成表单的验证。</li>
<li>扩展了HTML5音频的API，相信HTML5音频让大家又爱又狠吧，爱的是其简单实用，狠的是其格式的多样化和浏览器支持不一，但是苏河相信，连adobe都宣布向HTML5靠齐，将来各浏览器对音频的支持一定会逐步统一化的。</li>
<li>更多的HTML5标签和属性，这样一来，一个前端开发者要完成一块相同的功能的模块将会大量的减少javascript代码量，何乐而不为？</li>
</ol>
<h2>WebGL</h2>
<p><a href="http://www.36ria.com/4068/webgl" rel="attachment wp-att-4071"><img src="http://www.36ria.com/wp-content/uploads/2011/04/webGL-532x400.jpg" alt="" title="webGL" width="450" height="338" class="alignnone size-large wp-image-4071" /></a><br />
WebGL在firefox早期的版本已经被支持，firefox4则全力支持该平台的运行。不可否认webGL强大且真实的3D渲染，其API会比你想象中提供更多的灵活性，试想，一个你需要在桌面程序才能将其完美展现的应用，现在也能在网页上展现，多么令人激动！</p>
<h2>硬件加速</h2>
<p><a href="http://www.36ria.com/4068/%e7%a1%ac%e4%bb%b6%e5%8a%a0%e9%80%9f" rel="attachment wp-att-4072"><img src="http://www.36ria.com/wp-content/uploads/2011/04/硬件加速.jpg" alt="" title="硬件加速" width="558" height="562" class="alignnone size-full wp-image-4072" /></a><br />
这项是firefox4带来的新的选项，那么什么是图形硬件加速呢？硬件加速就是充分利用您机器显卡上的GPU来进行图形和图像计算，而不是单纯的使用机器的CPU。这会大大加速图形处理效率。<br />
当浏览器在渲染页面内容的时候，比如圆角，比如边框，比如2D的canvas，这个时候，启用这项便可以让你用Direct2D来进行加速，但是硬件加速非常依赖平台和硬件，就比如Direct2D的加速，这个只能在windows7或者vista进行，所以XP的同学们，果断只能打酱油啊！</p>
<p>关于图形硬件加速有篇非常详细的文章，苏河推荐朋友们看下，请猛击这里<a href="http://mozilla.com.cn/blog/2010/9/8/27/" target="_blank">http://mozilla.com.cn/blog/2010/9/8/27/</a>，这里面有个非常有意思的硬件压力测试页面：<a href="http://demos.hacks.mozilla.org/openweb/HWACCEL/" target="_blank">http://demos.hacks.mozilla.org/openweb/HWACCEL/</a> 感兴趣的朋友们可以尝试下。</p>
<h2>新的javascript引擎</h2>
<p><a href="http://www.36ria.com/4068/javascript" rel="attachment wp-att-4073"><img src="http://www.36ria.com/wp-content/uploads/2011/04/javascript.jpg" alt="" title="javascript" width="558" height="269" class="alignnone size-full wp-image-4073" /></a><br />
新的javascript引擎，一个增强版的TraceMonkey，名为：JägerMonkey，<br />
可以看到javascript性能的明显的变化，这个数量级，确实让人感觉腰不酸了，腿不疼了。</p>
<h2>对css3 transitions的支持</h2>
<p>Firefox4增加css3 transitions的支持，这让苏河非常兴奋。其他浏览器很早以前便声称对css3 transitions的支持，但是到现在却仍未改变。Firefox却在短时间被便做到了这点，提供了几近完美的支持。<br />
Css3 transitions通过改变css属性提供了纯CSS对动画的支持，比如变化缩放，旋转和倾斜都为你准备好了，你可以用这些来创造漂亮的效果，如果你使用过jquery，你是否读过关于动画的复杂的代码，而现在，你只需要几行css代码便能实现它。</p>
<h2>WebM</h2>
<p><a rel="attachment wp-att-4074" href="http://www.36ria.com/4068/webm"><img class="alignnone size-medium wp-image-4074" title="webM" src="http://www.36ria.com/wp-content/uploads/2011/04/webM-299x200.jpg" alt="" width="299" height="200" /></a><br />
什么是webM？这里苏河简单解释下：其实webM就是谷歌设立的一个开放的、免费的视频格式，大家看到上图应该会有些了解，还想做进一步了解的同学请猛击这<a href="http://zh.wikipedia.org/wiki/WebM" target="_blank">http://zh.wikipedia.org/wiki/WebM</a>。<br />
其实苏河觉得webM吸引人的地方主要还是它免费的特质。Firefox4宣布支持webM，这样，谷歌就不需要为firefox制作专门的插件了，但是IE9和safari却只支持H.264，这也不得不让一些视频网站准备多种视频格式做好兼容所有浏览器的准备。</p>
<h2>IndexDB</h2>
<p>Firefox4将支持IndexDB，什么是IndexDB？简单来说，IndexedDB是本地数据库储存标准，能让Web应用程序离线使用，它将能改进Google Docs等应用程序的离线使用与编辑功能。在本地架设数据库or去服务器取数据，不言而喻。</p>
<h2>控制台</h2>
<p><a rel="attachment wp-att-4075" href="http://www.36ria.com/4068/%e6%8e%a7%e5%88%b6%e5%8f%b0"><img class="alignnone size-medium wp-image-4075" title="控制台" src="http://www.36ria.com/wp-content/uploads/2011/04/控制台-354x200.jpg" alt="" width="354" height="200" /></a><br />
新的网络控制台代替了以前版本的错误控制台，但是，当然对于开发者来说，它是不能取代firebug的，这个控制台可以用命令<strong>ctrl+shift+K</strong>来打开：<br />
在这个控制台，你可以看到：</p>
<ol>
<li>Javascript的下载时间</li>
<li>一些css和javascript的错误</li>
<li>类似firebug的控制台的javascript的控制台</li>
</ol>
<h2>更帅的字体</h2>
<p><a rel="attachment wp-att-4076" href="http://www.36ria.com/4068/opentype"><img class="alignnone size-medium wp-image-4076" title="openType" src="http://www.36ria.com/wp-content/uploads/2011/04/openType-400x184.jpg" alt="" width="400" height="184" /></a><br />
从现在开始，你可以使用OpenType格式的字体，想想很久很久的以前，你是如何整出上图那些奇妙的字体的呢？是用flash？还是用javascript？或者是图片？但是现在，我们可以在firefox4下直接使用。</p>
<h2>结束语</h2>
<p>这是苏河的第一篇文章，结合了外文和自己的想法的成果，Firefox4比起原来的版本已经有很大的补充和改善，不管对于开发者还是设计者。更强大的javascript引擎，更多的html5和css3的支持， 强大的硬件加速，会让你对这款新的浏览器屡试不爽。当然，浏览器总是在不断创新的，也期待firefox的下个版本给我们带来更多的惊喜吧！</p>
<p>那么你是怎么看他的呢？爱他？恨他？哈哈，请给苏河留言吧！<a href="http://www.36ria.com/4068/%e6%96%87%e7%ab%a0%e5%9b%be%e7%89%87%e6%a8%a1%e6%9d%bf" rel="attachment wp-att-4095"><img src="http://www.36ria.com/wp-content/uploads/2011/04/文章图片模板-296x140.png" alt="" title="firefox4" width="296" height="140" class="alignleft size-thumbnail wp-image-4095" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4068/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>提升用户体验之道：图片预加载</title>
		<link>http://www.36ria.com/4030</link>
		<comments>http://www.36ria.com/4030#comments</comments>
		<pubDate>Fri, 08 Apr 2011 15:06:23 +0000</pubDate>
		<dc:creator>天河</dc:creator>
				<category><![CDATA[javascript教程]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=4030</guid>
		<description><![CDATA[随着网站构建越来越倾向于实现“桌面般的体验”，网站中的图片数量也开始显著地增长。想想网站中的对话框、Tabs、Tooltips、Sliders以及日历控件吧，这都是实现“桌面般体验”的必要元素。 预加载这一堆图片对网站性能及可用性的提升是有好处的，这样避免了图片加载过程中页面的闪烁、破裂（视觉上）等问题。 常用的技术 有两种常用的图片预加载技术： CSS sprites CSS spri......]]></description>
			<content:encoded><![CDATA[<p>随着网站构建越来越倾向于实现“桌面般的体验”，网站中的图片数量也开始显著地增长。想想网站中的对话框、Tabs、Tooltips、Sliders以及日历控件吧，这都是实现“桌面般体验”的必要元素。</p>
<p>预加载这一堆图片对网站性能及可用性的提升是有好处的，这样避免了图片加载过程中页面的闪烁、破裂（视觉上）等问题。</p>
<h4>常用的技术</h4>
<p>有两种常用的图片预加载技术：</p>
<h5>CSS sprites</h5>
<p>CSS sprites技术可以用来减少页面产生的HTTP请求数。它是这么实现的，把所有的图型状态（比如按钮的默认状态，悬停及激活等状态）保存到一张图片中。并依据元素的状态，使用CSS对图片进行相应的定位、切割。</p>
<p>不过这样有个重要的缺点——需要提前加载的图片不适用这项技术。一些后面才需要显示的图片并没有被加载，这可能会导致一个延迟。因此，此技术一般适合静态站点，主要用来减少图片加载数。</p>
<h5>JavaScript</h5>
<p>另一个可以使用的技术是使用JavaScript的image对象。这个方法是这样的，先把网站中使用的每个图片的地址（URL）放到一个数组中。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">myImages</span><span style="color: Gray;"> = </span><span style="color: Olive;">[</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">image_1.jpg', 'image_2.jpg', 'image_3.jpg', ...];</span></li></ol></div>
<p>然后遍历这个数组，根据图片地址创建各自的image对象。这样可以保证所有的图片都能被浏览器缓存，等用到的时候就无需等待了。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">for</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">i</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">; </span><span style="color: Blue;">i</span><span style="color: Gray;"> &lt;= </span><span style="color: Blue;">myImages</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">; </span><span style="color: Blue;">i</span><span style="color: Gray;">++</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">img</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Teal;">Image</span><span style="color: Olive;">()</span><span style="color: Gray;">; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">img</span><span style="color: Gray;">.</span><span style="color: Blue;">src</span><span style="color: Gray;"> = </span><span style="color: Blue;">myImages</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>此方案费时的地方是，不仅要制造一个包含每张图片地址的数组，还要维护它的一致性。网站的每个需求变更（添加或更改图片地址）都会影响到这个数组。试想频繁变更的应用，又拥有数百张图片，这真会让人筋疲力尽的。</p>
<h4>图片自动预加载（带进度指示器）</h4>
<p>一个更好的方式是自动收集图片的地址。</p>
<p>首先要分析页面中（包括外链及内联）的样式表。这可以通过遍历“document.styleSheets”对象来获得页面使用的所有样式表。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">for</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">i</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">; </span><span style="color: Blue;">i</span><span style="color: Gray;"> &lt; </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">; </span><span style="color: Blue;">i</span><span style="color: Gray;">++</span><span style="color: Olive;">){</span></li></ol></div>
<p>接下来要找出样式表的根目录。用来得到各个图片的绝对地址。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">baseURL</span><span style="color: Gray;"> = </span><span style="color: Blue;">getBaseURL</span><span style="color: Olive;">(</span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">href</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>考虑到浏览器的兼容性，必须同时检查每个样式表的“cssRules”或“rules”中是否包含CSS规则。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">cssRules</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">cssRules</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">cssRules</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Green;">else</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">rules</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">cssRules</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">rules</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>所有非空的CSS规则都要被解析，来确认它是否关联了图片。一个简单的正则表达式就可以解析出图片地址。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">cssRule</span><span style="color: Gray;"> = </span><span style="color: Blue;">cssRules</span><span style="color: Olive;">[</span><span style="color: Blue;">j</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">style</span><span style="color: Gray;">.</span><span style="color: Blue;">cssText</span><span style="color: Gray;">.</span><span style="color: Blue;">match</span><span style="color: Olive;">(</span><span style="color: #8b0000;">/</span><span style="color: Red;">[^\(]+\.(gif|jpg|jpeg|png)</span><span style="color: #8b0000;">/g</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>然后，把这里收集到的所有图片地址保存到一个数组中供后面使用。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">analyzeCSSFiles</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cssRules</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// CSS rules</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">for</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">i</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">; </span><span style="color: Blue;">i</span><span style="color: Gray;"> &lt; </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">; </span><span style="color: Blue;">i</span><span style="color: Gray;">++</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: #ffa500;">// loop through all linked/inline stylesheets</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">baseURL</span><span style="color: Gray;"> = </span><span style="color: Blue;">getBaseURL</span><span style="color: Olive;">(</span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">href</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// get stylesheet's base URL </span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// get CSS rules</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">cssRules</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">cssRules</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">cssRules</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">else</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">rules</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">cssRules</span><span style="color: Gray;"> = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">styleSheets</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">rules</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// loop through all CSS rules</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">for</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">j</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">; </span><span style="color: Blue;">j</span><span style="color: Gray;"> &lt; </span><span style="color: Blue;">cssRules</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">; </span><span style="color: Blue;">j</span><span style="color: Gray;">++</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">cssRules</span><span style="color: Olive;">[</span><span style="color: Blue;">j</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">style</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">cssRules</span><span style="color: Olive;">[</span><span style="color: Blue;">j</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">style</span><span style="color: Gray;">.</span><span style="color: Blue;">cssText</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// extract only image related CSS rules </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// parse rules string and extract image URL</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">cssRule</span><span style="color: Gray;"> = </span><span style="color: Blue;">cssRules</span><span style="color: Olive;">[</span><span style="color: Blue;">j</span><span style="color: Olive;">]</span><span style="color: Gray;">.</span><span style="color: Blue;">style</span><span style="color: Gray;">.</span><span style="color: Blue;">cssText</span><span style="color: Gray;">.</span><span style="color: Blue;">match</span><span style="color: Olive;">(</span><span style="color: #8b0000;">/</span><span style="color: Red;">[^\(]+\.(gif|jpg|jpeg|png)</span><span style="color: #8b0000;">/g</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">cssRule</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// add image URL to array</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">cssRule</span><span style="color: Gray;"> = </span><span style="color: Olive;">(</span><span style="color: Blue;">cssRule</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">replace</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Navy;">\&quot;</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">imageURLs</span><span style="color: Gray;">.</span><span style="color: Blue;">push</span><span style="color: Olive;">(</span><span style="color: Blue;">baseURL</span><span style="color: Gray;"> + </span><span style="color: Blue;">cssRule</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>数组中存放的图片地址是绝对路径，为了得到它，我们实现了“getBaseUrl”函数来解析每个CSS文件的绝对地址。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">getBaseURL</span><span style="color: Olive;">(</span><span style="color: Blue;">cssLink</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">cssLink</span><span style="color: Gray;"> = </span><span style="color: Olive;">(</span><span style="color: Blue;">cssLink</span><span style="color: Olive;">)</span><span style="color: Gray;"> ? </span><span style="color: Blue;">cssLink</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">window.location.href</span><span style="color: #8b0000;">'</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// window.location.href for inline style definitions</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">urlParts</span><span style="color: Gray;"> = </span><span style="color: Blue;">cssLink</span><span style="color: Gray;">.</span><span style="color: Blue;">split</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">/</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// split link at '/' into an array</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">urlParts</span><span style="color: Gray;">.</span><span style="color: Blue;">pop</span><span style="color: Olive;">()</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// remove file path from URL array</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">baseURL</span><span style="color: Gray;"> = </span><span style="color: Blue;">urlParts</span><span style="color: Gray;">.</span><span style="color: Blue;">join</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">/</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// create base URL (rejoin URL parts)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">baseURL</span><span style="color: Gray;"> != </span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">baseURL</span><span style="color: Gray;"> += </span><span style="color: #8b0000;">'</span><span style="color: Red;">/</span><span style="color: #8b0000;">'</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// expand URL with a '/'</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">baseURL</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>现在，遍历这个列表，为网站的每个图片创建一个JavaScript图片对象，来实现图片预加载并强制浏览器进行缓存。请注意“setTimeout”的使用，它确保了每个图片加载是依序执行的，当前图片加载完成才会加载下一个。原因是某些浏览器无法同时处理超过2个请求（译者注：IE6单域下的并发连接数限制就是2个）。为了避免可能的死锁，这里使用jQuery的bind方法给“load”、“onreadystatechange”和“error”事件绑定了一个处理器。这样可以确保遇到无法加载的遗失图片时，“errorTimer”可以把你带回正确的轨道。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">preloadImages</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">imageURLs</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">imageURLs</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">imageURLs</span><span style="color: Olive;">[</span><span style="color: Blue;">imagesLoaded</span><span style="color: Olive;">])</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"> </span><span style="color: #ffa500;">// if image URLs array isn't empty</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">img</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Teal;">Image</span><span style="color: Olive;">()</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// create a new imgage object</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">img</span><span style="color: Gray;">.</span><span style="color: Blue;">src</span><span style="color: Gray;"> = </span><span style="color: Blue;">imageURLs</span><span style="color: Olive;">[</span><span style="color: Blue;">imagesLoaded</span><span style="color: Olive;">]</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// set the image source to the extracted image URL</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">setTimeout</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">img</span><span style="color: Gray;">.</span><span style="color: Blue;">complete</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">jQuery</span><span style="color: Olive;">(</span><span style="color: Blue;">img</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">bind</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">onreadystatechange load error</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">onImageLoaded</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// bind event handler</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">onImageLoaded</span><span style="color: Olive;">()</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// image loaded successfully, continue with the next one</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">errorTimer</span><span style="color: Gray;"> = </span><span style="color: Blue;">setTimeout</span><span style="color: Olive;">(</span><span style="color: Blue;">onImageLoaded</span><span style="color: Gray;">, </span><span style="color: Maroon;">1000</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// handle missing files (load the next image after 1 second)</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">, </span><span style="color: Maroon;">25</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">else</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">showPreloadedImages</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">onImageLoaded</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">clearTimeout</span><span style="color: Olive;">(</span><span style="color: Blue;">errorTimer</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// clear error timer</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">imagesLoaded</span><span style="color: Gray;">++; </span><span style="color: #ffa500;">// increase image counter</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">preloadImages</span><span style="color: Olive;">()</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// preload next image</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p>为了提升预加载时的用户体验，这里对“onImageLoaded”事件处理器做点改动，来添加一个进度条。</p>
<p>首先，引入jQuery UI的样式和显示进度条所需要的JavaScript文件。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">link</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/css</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">css/ui-lightness/jquery-ui-1.8.6.custom.css</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">rel</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">stylesheet</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">js/jquery-1.4.2.min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">js/jquery-ui-1.8.6.custom.min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>然后在DOMReady事件被触发时初始化进度条。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: Teal;">document</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">ready</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#progressbar</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">progressbar</span><span style="color: Olive;">({</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">value</span><span style="color: Gray;">: </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Olive;">})</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// initialize progress bar</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>最后要做的一件事是扩展“onImageLoaded”事件处理函数。每加载完一张图片，就计算一次进度并更新进度条。</p>
<p>为了验证预加载的效果，这里把所有图片都添加到页面中。在预加载全部完成时，所有的图片会同时显示。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">onImageLoaded</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">clearTimeout</span><span style="color: Olive;">(</span><span style="color: Blue;">errorTimer</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// clear error timer</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#imagelist</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">append</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">&lt;span&gt;</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> + </span><span style="color: Blue;">imagesLoaded</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">: &lt;/span&gt;&lt;img src='</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> + </span><span style="color: Blue;">imageURLs</span><span style="color: Olive;">[</span><span style="color: Blue;">imagesLoaded</span><span style="color: Olive;">]</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">'/&gt;</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">// append image tag to image list</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">imagesLoaded</span><span style="color: Gray;">++; </span><span style="color: #ffa500;">// increase image counter</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">percent</span><span style="color: Gray;"> = </span><span style="color: Blue;">parseInt</span><span style="color: Olive;">(</span><span style="color: Maroon;">100</span><span style="color: Gray;"> * </span><span style="color: Blue;">imagesLoaded</span><span style="color: Gray;"> </span><span style="color: #8b0000;">/</span><span style="color: Red;"> (imageURLs.length - 1)); </span><span style="color: #8b0000;">//</span><span style="color: Red;"> calculate progress</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; $(&quot;#progressbar&quot;).progressbar({ value: percent }); </span><span style="color: #8b0000;">//</span><span style="color: Red;"> refresh progress bar</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; $(&quot;#progressbarTitle&quot;).text(&quot;Preloading progress: &quot; + percent + &quot;%&quot;); </span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; preloadImages(); </span><span style="color: #8b0000;">//</span><span style="color: Red;"> preload next image</span></li>
<li><span style="color: Red;">}</span></li></ol></div>
<h4>优秀只需一小步</h4>
<p>预加载图片是一个提升用户体验，以及让自己的网站看起来更专业的一个途径。通过自动分析CSS规则来进行图片的批量预加载也避免了大量的体力活。</p>
<p>进度条可以让用户知道加载的进展，避免用户的冷落感。另外，jQuery提供了大批优秀组件，进度条就是其中一个，只需简单的配置就可以满足我们的需求。使用它们无疑能显著提升你的网站形象。</p>
<p>希望这篇文章能给你带来灵感，去思考你的项目是否也能从这里描述的技术受益。</p>
<p>最后附上zip文件，它包含所有上面的预加载示例文件。下载并解压后，用浏览器打开preloading.html，并单击“Start preloading”就可以观看示例了。</p>
<p>再做些简单修改，你就可以把它集成到你自己的项目里了。</p>
<p>原文：<a href="http://msdn.microsoft.com/en-us/scriptjunkie/gg681862.aspx">Improving User Experience: Preload Images</a></p>
<p>附：这是天河在这里发的第一篇文章，翻译的不好，望大家见谅。顺道给大家打个招呼，以后望大家多多关照哈。原文附件在Chrome下有些小问题，待我修正后附上。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/4030/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>jquery+canvas实现html5幻灯片</title>
		<link>http://www.36ria.com/3994</link>
		<comments>http://www.36ria.com/3994#comments</comments>
		<pubDate>Sat, 02 Apr 2011 05:50:40 +0000</pubDate>
		<dc:creator>明河</dc:creator>
				<category><![CDATA[html5]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[canvas教程]]></category>
		<category><![CDATA[html5教程]]></category>
		<category><![CDATA[jquery教程]]></category>
		<category><![CDATA[幻灯片]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=3994</guid>
		<description><![CDATA[点此查看demo html5最重要的更新之一：增加了canvas，开始支持矢量绘画，目前浏览器支持比较好的是canvas的2d接口，3d有点遥远，通过canvas，我们可以在web设计中实现很炫的效果，从理论上来讲，大部分的flash动画特效都有办法使用canvas实现，当然实现的成本还是过高了。今天明河向各位讲解个canvas相关的实战教程：jquery+canvas实现html5幻灯片。 关于html5的canvas有个非常经典的教程......]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.36ria.com/3994/slide-show" rel="attachment wp-att-4020"><img src="http://www.36ria.com/wp-content/uploads/2011/04/slide-show.png" alt="" title="slide-show" width="680" height="200" class="alignnone size-full wp-image-4020" /></a></p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/slide-show/index.html" class="btn-view-demo" target="_blank">点此查看demo</a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=213" title="名称：html5幻灯片，下载次数：276，文件大小：270.77 kB" class="btn-download">点此下载</a></li>
</ul>
<p>html5最重要的更新之一：增加了canvas，开始支持矢量绘画，目前浏览器支持比较好的是canvas的2d接口，3d有点遥远，通过canvas，我们可以在web设计中实现很炫的效果，从理论上来讲，大部分的flash动画特效都有办法使用canvas实现，当然实现的成本还是过高了。今天明河向各位讲解个canvas相关的实战教程：jquery+canvas实现html5幻灯片。<br />
关于html5的canvas有个非常经典的教程，你不得不看：来自opera中国的《<a href="http://kb.operachina.com/node/190">HTML 5 canvas —— 基本语法</a>》。<br />
canvas内容太丰富了，想要通过一篇文章都讲解到，难免流于浅谈则止，所以这篇教程只让大家了解canvas的<strong>drawImage</strong>接口。<br />
也许你会疑惑，html早就有插入图片的标签了，在canvas中插入图像有意义吗？明河的回答是：有！canvas的图像是可以实现像素级的操作！</p>
<h4>1.原理简述</h4>
<p>这篇教程的难点在于切换图片时先提高图片的对比度，然后再予以渐隐（由于使用canvas，请勿在IE下查看demo）。提高图片的对比度用的是photoshop的对比度算法，当然这个算法的细节大家无需纠结，明河只是希望通过这篇教程大家能够大致了解canvas的图像处理方面的技巧。<br />
排除这个对比度处理，其他的jquery代码其实难度不高，明河特意加了翔实的中文注释，只要你有耐心，我相信你一定看的懂。</p>
<h4>2.开始构建个用于幻灯片的图片列表</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">&lt;!-- 幻灯片 START --&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">slideshow</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">ul</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">slides</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">img</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">img/photos/1.jpg</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">width</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">620</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">height</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">320</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">alt</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">照片1</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">img</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">img/photos/2.jpg</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">width</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">620</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">height</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">320</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">alt</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">照片2</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">img</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">img/photos/3.jpg</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">width</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">620</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">height</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">320</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">alt</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">照片3</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">img</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">img/photos/4.jpg</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">width</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">620</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">height</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">320</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">alt</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">照片4</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;&lt;/</span><span style="color: Green;">li</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">ul</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">span</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">arrow previous</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">span</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">span</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">arrow next</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">span</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">&lt;!-- 幻灯片 END --&gt;</span></li></ol></div>
<p>非常简单的结构，除了图片列表外，当然还免不了上一张、下一张的箭头。样式不是本文的重点，这里略过。</p>
<h4>3.在页面加载结束后加载初始化幻灯片</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: Teal;">window</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">load</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){})</span></li></ol></div>
<p>这里可能朋友们有疑惑：为啥不用<strong>$(function(){})</strong>，不是更简单？<br />
之所以使用$(window).load()而不使用更简洁的$()，是因为我们需要确保图片全部加载完成，而不是DOM加载完成，还有个原因canvas还是很耗资源的。</p>
<h4>4.判断浏览器是否支持canvas</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//测试浏览器是否支持canvas</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">supportCanvas</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">getContext</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> </span><span style="color: Green;">in</span><span style="color: Gray;"> </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">createElement</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">canvas</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>这一步很重要哦，当用户的浏览器不支持canvas，我们需要另外一种降级处理。</p>
<h4>5.遍历每张图片</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//遍历每张图片</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#slideshow img</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">each</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//第一张图片时先设置下幻灯片的宽高（将图片的宽高缓存起来，供其他代码调用）</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">slideshow</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">slideshow</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">slideshow</span><span style="color: Gray;">.</span><span style="color: Blue;">height</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">height</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//在图片之前产生canvas</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">createCanvasOverlay</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>这里有二步操作：</p>
<ul>
<li>将图片尺寸写入缓存变量slideshow，供日后调用</li>
<li>执行createCanvasOverlay()函数，插入canvas</li>
</ul>
<h4>6.创造canvas对像</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 创造canvas对像</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; * @param {Object} image 图片</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">createCanvasOverlay</span><span style="color: Olive;">(</span><span style="color: Blue;">image</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//创建canvas元素</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">canvas</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">createElement</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">canvas</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//获取2d canvas上下文（如果不支持canvas，这个对象是不存在的）</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvasContext</span><span style="color: Gray;">&nbsp; &nbsp; = </span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">getContext</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">2d</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 设置canvas的宽度和高度</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;"> = </span><span style="color: Blue;">slideshow</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">height</span><span style="color: Gray;"> = </span><span style="color: Blue;">slideshow</span><span style="color: Gray;">.</span><span style="color: Blue;">height</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//在canvas内绘制一张图片</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvasContext</span><span style="color: Gray;">.</span><span style="color: Blue;">drawImage</span><span style="color: Olive;">(</span><span style="color: Blue;">image</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//获取canvas图片像素数据，这非常重要</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">imageData</span><span style="color: Gray;">&nbsp; &nbsp; = </span><span style="color: Blue;">canvasContext</span><span style="color: Gray;">.</span><span style="color: Blue;">getImageData</span><span style="color: Olive;">(</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;">,</span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">height</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">data</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; = </span><span style="color: Blue;">imageData</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// Loop through all the pixels in the imageData array, and modify</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// the red, green, and blue color values.</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//遍历所有的像素并修改红色、绿色、蓝色通道的值，这是整个教程中最难的部分，如果没理解没关系，但希望通过这一个操作，让各位直观的感受canvas像素级操作的强大</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">for</span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">i</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Blue;">z</span><span style="color: Gray;">=</span><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">;</span><span style="color: Blue;">i</span><span style="color: Gray;">&lt;</span><span style="color: Blue;">z</span><span style="color: Gray;">;</span><span style="color: Blue;">i</span><span style="color: Gray;">++</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Olive;">((</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> &lt; </span><span style="color: Maroon;">128</span><span style="color: Olive;">)</span><span style="color: Gray;"> ? </span><span style="color: Olive;">(</span><span style="color: Maroon;">2</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">/</span><span style="color: Red;"> 255) : (255 - 2 * (255 - data[i]) * (255 - data[i]) </span><span style="color: #8b0000;">/</span><span style="color: Gray;"> </span><span style="color: Maroon;">255</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Gray;">++</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Olive;">((</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> &lt; </span><span style="color: Maroon;">128</span><span style="color: Olive;">)</span><span style="color: Gray;"> ? </span><span style="color: Olive;">(</span><span style="color: Maroon;">2</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">/</span><span style="color: Red;"> 255) : (255 - 2 * (255 - data[i]) * (255 - data[i]) </span><span style="color: #8b0000;">/</span><span style="color: Gray;"> </span><span style="color: Maroon;">255</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Gray;">++</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Olive;">((</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> &lt; </span><span style="color: Maroon;">128</span><span style="color: Olive;">)</span><span style="color: Gray;"> ? </span><span style="color: Olive;">(</span><span style="color: Maroon;">2</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">/</span><span style="color: Red;"> 255) : (255 - 2 * (255 - data[i]) * (255 - data[i]) </span><span style="color: #8b0000;">/</span><span style="color: Gray;"> </span><span style="color: Maroon;">255</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//为了更好的说明，这里明河加入颜色反转效果，可以把上面的代码去掉，换成下面的试下</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/*data[i] = 255 - data[i];</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data[++i] = 255 - data[++i];</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data[++i] = 255 - data[++i];*/</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ++</span><span style="color: Blue;">i</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//重新应用下像素数据，后面二个参数是x\y坐标值</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvasContext</span><span style="color: Gray;">.</span><span style="color: Blue;">putImageData</span><span style="color: Olive;">(</span><span style="color: Blue;">imageData</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//将canvas插入到图片前面</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">image</span><span style="color: Gray;">.</span><span style="color: Blue;">parentNode</span><span style="color: Gray;">.</span><span style="color: Blue;">insertBefore</span><span style="color: Olive;">(</span><span style="color: Blue;">canvas</span><span style="color: Gray;">,</span><span style="color: Blue;">image</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>这是教程代码的关键部分。我们一步一步来看。</p>
<h5>1)创建个canvas元素</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//创建canvas元素</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">canvas</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = </span><span style="color: Teal;">document</span><span style="color: Gray;">.</span><span style="color: Blue;">createElement</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">canvas</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//获取2d canvas上下文（如果不支持canvas，这个对象是不存在的）</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvasContext</span><span style="color: Gray;">&nbsp; &nbsp; = </span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">getContext</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">2d</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">// 设置canvas的宽度和高度</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;"> = </span><span style="color: Blue;">slideshow</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">height</span><span style="color: Gray;"> = </span><span style="color: Blue;">slideshow</span><span style="color: Gray;">.</span><span style="color: Blue;">height</span><span style="color: Gray;">;</span></li></ol></div>
<p>设置canvas的尺寸等于图片尺寸，正好遮住图片，当切换图片时，先出现canvas（canvas的图片是修改过的高对比度的图片）。最后我们输出的节点如下：<br />
<a href="http://www.36ria.com/3994/slide-show-2" rel="attachment wp-att-4021"><img src="http://www.36ria.com/wp-content/uploads/2011/04/slide-show-2.png" alt="" title="slide-show-2" width="424" height="63" class="alignnone size-full wp-image-4021" /></a><br />
想要使用canvas的API，请先获取2d canvas上下文，这非常重要，所有基于canvas的操作都基于<strong>getContext(“2d”)</strong>。</p>
<h5>2)向canvas内插入图片</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//在canvas内绘制一张图片</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvasContext</span><span style="color: Gray;">.</span><span style="color: Blue;">drawImage</span><span style="color: Olive;">(</span><span style="color: Blue;">image</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>严重推荐阅读：<a href="http://kb.operachina.com/node/190#insertingimages">http://kb.operachina.com/node/190#insertingimages</a>。<br />
drawImage方法允许在 canvas 中插入图像，共有九个参数（恐怖吧&#8230;常用的是前面三个）：</p>
<ol>
<li>图片对象</li>
<li>x轴坐标</li>
<li>y轴坐标</li>
<li>图像宽度</li>
<li>图像高度</li>
</ol>
<p>之前说过，在canvas中插入图像的优势，在于可以实现像素级的操作，比如这里我们要加强图像的对比度。</p>
<h5>3)获取canvas图片像素数据</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//获取canvas图片像素数据，这非常重要</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">imageData</span><span style="color: Gray;">&nbsp; &nbsp; = </span><span style="color: Blue;">canvasContext</span><span style="color: Gray;">.</span><span style="color: Blue;">getImageData</span><span style="color: Olive;">(</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;">,</span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">height</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">data</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; = </span><span style="color: Blue;">imageData</span><span style="color: Gray;">.</span><span style="color: Blue;">data</span><span style="color: Gray;">;</span></li></ol></div>
<p>getImageData方法，将获取canvas图片像素数据，此对象有个data数组，用于存放像素数据。getImageData共有四个参数：x坐标、y坐标、宽度、高度。</p>
<h5>4)强化图像对比度</h5>
<p>这段代码有点复杂，特别是对比度强化处理</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//遍历所有的像素并修改红色、绿色、蓝色通道的值，这是整个教程中最难的部分，如果没理解没关系，但希望通过这一个操作，让各位直观的感受canvas像素级操作的强大</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">for</span><span style="color: Olive;">(</span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">i</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Blue;">z</span><span style="color: Gray;">=</span><span style="color: Blue;">data</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">;</span><span style="color: Blue;">i</span><span style="color: Gray;">&lt;</span><span style="color: Blue;">z</span><span style="color: Gray;">;</span><span style="color: Blue;">i</span><span style="color: Gray;">++</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Olive;">((</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> &lt; </span><span style="color: Maroon;">128</span><span style="color: Olive;">)</span><span style="color: Gray;"> ? </span><span style="color: Olive;">(</span><span style="color: Maroon;">2</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">/</span><span style="color: Red;"> 255) : (255 - 2 * (255 - data[i]) * (255 - data[i]) </span><span style="color: #8b0000;">/</span><span style="color: Gray;"> </span><span style="color: Maroon;">255</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Gray;">++</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Olive;">((</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> &lt; </span><span style="color: Maroon;">128</span><span style="color: Olive;">)</span><span style="color: Gray;"> ? </span><span style="color: Olive;">(</span><span style="color: Maroon;">2</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">/</span><span style="color: Red;"> 255) : (255 - 2 * (255 - data[i]) * (255 - data[i]) </span><span style="color: #8b0000;">/</span><span style="color: Gray;"> </span><span style="color: Maroon;">255</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Gray;">++</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Olive;">((</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;"> &lt; </span><span style="color: Maroon;">128</span><span style="color: Olive;">)</span><span style="color: Gray;"> ? </span><span style="color: Olive;">(</span><span style="color: Maroon;">2</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">*</span><span style="color: Blue;">data</span><span style="color: Olive;">[</span><span style="color: Blue;">i</span><span style="color: Olive;">]</span><span style="color: Gray;">&nbsp;</span><span style="color: #8b0000;">/</span><span style="color: Red;"> 255) : (255 - 2 * (255 - data[i]) * (255 - data[i]) </span><span style="color: #8b0000;">/</span><span style="color: Gray;"> </span><span style="color: Maroon;">255</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ++</span><span style="color: Blue;">i</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>来着photoshop强化对比度的算法，如果这个算法没弄明白，没关系，只要记得有这样的用法即可。简单说明下原理：强化对比度，实际是处理红（data[i]）、绿（data[i+1]）、蓝（data[i+2]）三个通道数据，大部分对图像像素数据，更准确的将应该是矩阵的处理，实际上都是对三个通道的处理。<br />
说真的，这个算法内部细节的含义，明河也不清楚，欢迎讨论。</p>
<h5>5)重新输出图像像素</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//重新应用下像素数据，后面二个参数是x\y坐标值</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">canvasContext</span><span style="color: Gray;">.</span><span style="color: Blue;">putImageData</span><span style="color: Olive;">(</span><span style="color: Blue;">imageData</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h5>6)将canvas插入到DOM中</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//将canvas插入到图片前面</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">image</span><span style="color: Gray;">.</span><span style="color: Blue;">parentNode</span><span style="color: Gray;">.</span><span style="color: Blue;">insertBefore</span><span style="color: Olive;">(</span><span style="color: Blue;">canvas</span><span style="color: Gray;">,</span><span style="color: Blue;">image</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h4>7.监听箭头切换幻灯片事件</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#slideshow .arrow</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">click</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">li</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = </span><span style="color: Blue;">slides</span><span style="color: Gray;">.</span><span style="color: Blue;">eq</span><span style="color: Olive;">(</span><span style="color: Blue;">current</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvas</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; = </span><span style="color: Blue;">li</span><span style="color: Gray;">.</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">canvas</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">nextIndex</span><span style="color: Gray;">&nbsp; &nbsp; = </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//下一张</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">hasClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">next</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">nextIndex</span><span style="color: Gray;"> = </span><span style="color: Blue;">current</span><span style="color: Gray;"> &gt;= </span><span style="color: Blue;">slides</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Gray;"> ? </span><span style="color: Maroon;">0</span><span style="color: Gray;"> : </span><span style="color: Blue;">current</span><span style="color: Gray;">+</span><span style="color: Maroon;">1</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//上一张</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">else</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">nextIndex</span><span style="color: Gray;"> = </span><span style="color: Blue;">current</span><span style="color: Gray;"> &lt;= </span><span style="color: Maroon;">0</span><span style="color: Gray;"> ? </span><span style="color: Blue;">slides</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Gray;"> : </span><span style="color: Blue;">current</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">next</span><span style="color: Gray;"> = </span><span style="color: Blue;">slides</span><span style="color: Gray;">.</span><span style="color: Blue;">eq</span><span style="color: Olive;">(</span><span style="color: Blue;">nextIndex</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//支持canvas的情况</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">supportCanvas</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//渐现canvas</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">fadeIn</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//显示下个容器</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">next</span><span style="color: Gray;">.</span><span style="color: Blue;">show</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">current</span><span style="color: Gray;"> = </span><span style="color: Blue;">nextIndex</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//隐藏当前图片容器，并移除激活样式，给新出现的图片容器加上激活样式</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">li</span><span style="color: Gray;">.</span><span style="color: Blue;">fadeOut</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">li</span><span style="color: Gray;">.</span><span style="color: Blue;">removeClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">slideActive</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">canvas</span><span style="color: Gray;">.</span><span style="color: Blue;">hide</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">next</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">slideActive</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">else</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//如果浏览器不支持canvas只做简单的显隐处理</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">current</span><span style="color: Gray;">=</span><span style="color: Blue;">nextIndex</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">next</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">slideActive</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">show</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">li</span><span style="color: Gray;">.</span><span style="color: Blue;">removeClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">slideActive</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">hide</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>这代码相当简单多了。这里有个推荐学习的技巧，将next和prev方法合并，其实不管是next还是prev方法执行的动作都是类似的，我们根据按钮是否带有“next”样式来判断是上一张还是下一张。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//下一张</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">hasClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">next</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">nextIndex</span><span style="color: Gray;"> = </span><span style="color: Blue;">current</span><span style="color: Gray;"> &gt;= </span><span style="color: Blue;">slides</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Gray;"> ? </span><span style="color: Maroon;">0</span><span style="color: Gray;"> : </span><span style="color: Blue;">current</span><span style="color: Gray;">+</span><span style="color: Maroon;">1</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//上一张</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">else</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">nextIndex</span><span style="color: Gray;"> = </span><span style="color: Blue;">current</span><span style="color: Gray;"> &lt;= </span><span style="color: Maroon;">0</span><span style="color: Gray;"> ? </span><span style="color: Blue;">slides</span><span style="color: Gray;">.</span><span style="color: Blue;">length</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Gray;"> : </span><span style="color: Blue;">current</span><span style="color: Gray;">-</span><span style="color: Maroon;">1</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<h4>8.轮播幻灯片</h4>
<p>轮播幻灯片，实际上是定时触发next（下一张箭头）的click事件。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">timeOut</span><span style="color: Gray;"> = </span><span style="color: Green;">null</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#slideshow .arrow</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">click</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">e</span><span style="color: Gray;">,</span><span style="color: Blue;">simulated</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//点击箭头，清除定时器</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">simulated</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">clearTimeout</span><span style="color: Olive;">(</span><span style="color: Blue;">timeOut</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">autoAdvance</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//触发箭头点击事件，当第二个参数为false时，清理定时器</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#slideshow .next</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">trigger</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">click</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Olive;">[</span><span style="color: Green;">true</span><span style="color: Olive;">])</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//5秒定时轮放</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">timeOut</span><span style="color: Gray;"> = </span><span style="color: Blue;">setTimeout</span><span style="color: Olive;">(</span><span style="color: Blue;">autoAdvance</span><span style="color: Gray;">,</span><span style="color: Maroon;">5000</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})()</span><span style="color: Gray;">;</span></li></ol></div>
<p>代码请看<strong>autoadvance.js</strong>。这里有个很有意思的jquery技巧，触发事件，并给事件传递自定义参数。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#slideshow .arrow</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">click</span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">e</span><span style="color: Gray;">,</span><span style="color: Blue;">simulated</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#slideshow .next</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">trigger</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">click</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Olive;">[</span><span style="color: Green;">true</span><span style="color: Olive;">])</span><span style="color: Gray;">;</span></li></ol></div>
<p>trigger接受第二个参数，并且是数组类型，分别对应事件方法的第二至N个参数，比如这里的true对应simulated，事件内部根据simulated值做相应的处理。</p>
<h4>9.明河结语</h4>
<p>这篇教程有点长&#8230;..内容还是很丰富的，算是jquery和canvas实战性比较强的教程，希望大家喜欢，如果你对代码有任何疑问，都可以给明河留言，明天就是清明假期了，祝大家假期愉快！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/3994/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>zoomy—jquery图片放大镜插件</title>
		<link>http://www.36ria.com/3985</link>
		<comments>http://www.36ria.com/3985#comments</comments>
		<pubDate>Mon, 28 Mar 2011 10:28:25 +0000</pubDate>
		<dc:creator>明河共影</dc:creator>
				<category><![CDATA[jquery插件]]></category>
		<category><![CDATA[jquery图片放大镜插件]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=3985</guid>
		<description><![CDATA[很久没介绍jquery方面的东西了，今天偶然发现了一个相当不错的jquery图片放大镜插件：zoomy，分享给给位。 使用上非常简单。 1.引入jquery和插件 &#60;script type=&#34;text/javascript&#34; src=&#34;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js&#34;&#62;&#60;/script&#62; &#60;link&#160;type=&#34;text/css&#34; rel=&#34;stylesheet&#34; href=&#34;path-to/zoom1.0.css&#34;/&#62; &#60;script&#160;type=&#34;text/javascript&#34; src=&#34;path-to/......]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.36ria.com/wp-content/uploads/2011/03/zoomy.png" alt="" title="zoomy" width="640" height="200" class="alignleft size-full wp-image-3986" /><br />
很久没介绍jquery方面的东西了，今天偶然发现了一个相当不错的jquery图片放大镜插件：<strong>zoomy</strong>，分享给给位。</p>
<ul class="tow-columns clearfix">
<li class="l"><a target="_blank" class="btn-view-demo" href="http://redeyeoperations.com/plugins/zoomy/"></a></li>
<li class="l"><a class="btn-download" href="http://redeyeoperations.com/plugins/zoomy/zoomy1.0.zip"></a></li>
</ul>
<p>使用上非常简单。</p>
<h4>1.引入jquery和插件</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">link</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/css</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">rel</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">stylesheet</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">path-to/zoom1.0.css</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">path-to/zoomy1.0.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li></ol></div>
<h4>2.建立类似如下的html结构</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">a</span><span style="color: Gray;"> </span><span style="color: #00008b;">href</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">zoomImg.jpg</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">zoom</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">img</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">displayImg.jpg</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">a</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>a的路径指向大图路径。</p>
<h4>3.初始化</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">.zoom</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">zoomy</span><span style="color: Olive;">({</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">zoomSize</span><span style="color: Gray;">: </span><span style="color: Maroon;">200</span><span style="color: Gray;">, </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">round</span><span style="color: Gray;">: </span><span style="color: Green;">true</span><span style="color: Gray;">, </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">glare</span><span style="color: Gray;">: </span><span style="color: Green;">true</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">zoomText</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">click to Zoom</span><span style="color: #8b0000;">'</span></li>
<li><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<h4>4.原理简述</h4>
<p>图片放大镜的原理并不复杂，当鼠标滑过图片时，不存在放大镜层，创建一个放大镜层，这个层的背景图片指向大图，当你的鼠标在图片移动时候，鼠标坐标改变了，同时改变放大镜层背景图片的位移。<br />
当然，实际的情况会要复杂的多，你要处理下边界，不能让你的放大镜超越可视图片的边界。<br />
zoomy有个有意思的放大镜层，是完全使用css3完成的，效果如下<br />
<img src="http://www.36ria.com/wp-content/uploads/2011/03/zoomy-2.png" alt="" title="zoomy-2" width="205" height="191" class="alignleft size-full wp-image-3987" /><br />
圆形的放大镜层，是使用css3的圆角属性生成的，而圆形内部还有一个白色半透明的圆形层，再加上阴影，就形成了比较逼真的放大镜效果。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">.zoomy</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">position:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">absolute</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">display:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">none</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background-repeat:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">no-repeat</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; -</span><span style="color: Green;">webkit-box-shadow:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">5</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">10</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: #00008b;">#000</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; -</span><span style="color: Green;">moz-box-shadow:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">5</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">10</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: #00008b;">#000</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">border:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Red;">solid</span><span style="color: Gray;"> </span><span style="color: #00008b;">#999</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">line-height:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">100</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">text-align:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">center</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background-image:</span><span style="color: Gray;"> url(loading.gif)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background-position:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">center</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background-color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#fff</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">z-index:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">1000</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">overflow:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">hidden</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Blue;">.zoomy</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">span</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">display:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">block</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">margin:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">5</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Red;">auto</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background:</span><span style="color: Gray;"> -moz-linear-gradient(</span><span style="color: Red;">top</span><span style="color: Gray;">, rgba(</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">.61</span><span style="color: Gray;">) </span><span style="color: Maroon;">0</span><span style="color: Red;">%</span><span style="color: Gray;">, rgba(</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">) </span><span style="color: Maroon;">24</span><span style="color: Red;">%</span><span style="color: Gray;">, rgba(</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">) </span><span style="color: Maroon;">71</span><span style="color: Red;">%</span><span style="color: Gray;">, rgba(</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">.61</span><span style="color: Gray;">) </span><span style="color: Maroon;">100</span><span style="color: Red;">%</span><span style="color: Gray;">)</span><span style="color: Gray;">; /</span><span style="color: Blue;">*</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">firefox</span><span style="color: Gray;"> </span><span style="color: Blue;">*</span><span style="color: Gray;">/</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background:</span><span style="color: Gray;"> -webkit-gradient(linear, </span><span style="color: Red;">left</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">top</span><span style="color: Gray;">, </span><span style="color: Red;">left</span><span style="color: Gray;"> </span><span style="color: Red;">bottom</span><span style="color: Gray;">, color-stop(</span><span style="color: Maroon;">0</span><span style="color: Red;">%</span><span style="color: Gray;">,rgba(</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">.61</span><span style="color: Gray;">)), color-stop(</span><span style="color: Maroon;">24</span><span style="color: Red;">%</span><span style="color: Gray;">,rgba(</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">)), color-stop(</span><span style="color: Maroon;">71</span><span style="color: Red;">%</span><span style="color: Gray;">,rgba(</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Gray;">)), color-stop(</span><span style="color: Maroon;">100</span><span style="color: Red;">%</span><span style="color: Gray;">,rgba(</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">255</span><span style="color: Gray;">,</span><span style="color: Maroon;">.61</span><span style="color: Gray;">)))</span><span style="color: Gray;">; /</span><span style="color: Blue;">*</span><span style="color: Gray;"> </span><span style="color: Blue;">webkit</span><span style="color: Gray;"> </span><span style="color: Blue;">*</span><span style="color: Gray;">/</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Blue;">.zoomBar</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">font-family:</span><span style="color: Gray;"> arial, helvetica</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#fff</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">text-decoration:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">none</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">display:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">block</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">position:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">absolute</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">bottom:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">left:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">background:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#000</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">border-width:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">border-style:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">solid</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">border-color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#000000</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">padding:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">5</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">10</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; -</span><span style="color: Green;">webkit-border-radius:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">5</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; -</span><span style="color: Green;">moz-border-radius:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">5</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">opacity:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">.8</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">filter:</span><span style="color: Gray;">alpha(opacity=</span><span style="color: Maroon;">80</span><span style="color: Gray;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/3985/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>如何使用kissy的flash本地存储</title>
		<link>http://www.36ria.com/3931</link>
		<comments>http://www.36ria.com/3931#comments</comments>
		<pubDate>Thu, 10 Mar 2011 04:53:04 +0000</pubDate>
		<dc:creator>明河共影</dc:creator>
				<category><![CDATA[kissy]]></category>
		<category><![CDATA[flash本地存储]]></category>
		<category><![CDATA[本地共享对象]]></category>
		<category><![CDATA[本地存储]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=3931</guid>
		<description><![CDATA[在web开发中，难免遇到记忆用户信息的需求，比如为了不让用户评论时重复输入用户名、邮箱、站点信息，一般的做法是使用cookies，但大家都知道cookies的容量是很小的（字节数和个数都是有限制的，关于限制大小信息请猛击这里查看），在平常的小站点不会遇到cookies不够用的情况，但如果你正在处理大型的web应用，就很有可能遇到该问题（大的互联网公司，开发人员想要写......]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.36ria.com/wp-content/uploads/2011/03/kissy-store.png" alt="" title="kissy-store" width="640" height="200" class="alignleft size-full wp-image-3940" /><br />
在web开发中，难免遇到记忆用户信息的需求，比如为了不让用户评论时重复输入用户名、邮箱、站点信息，一般的做法是使用cookies，但大家都知道cookies的容量是很小的（字节数和个数都是有限制的，关于限制大小信息<a href="http://topmanopensource.javaeye.com/blog/552063">请猛击这里查看</a>），在平常的小站点不会遇到cookies不够用的情况，但如果你正在处理大型的web应用，就很有可能遇到该问题（大的互联网公司，开发人员想要写入cookies一般是需要申请的）。<br />
为了解决cookies的容量过小的问题，出现了其他比cookies更强大的方案，比如：flash的本地共享对象（flash cookie）、google的gears（wordpress支持，目前好像停止更新了）、html5本地存储（localStorage）。html5本地存储，明河日后将详细介绍给大家，今天明河介绍下flash的本地共享对象。</p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/kissy-store/index.html" class="btn-view-demo" target="_blank"></a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=210" title="名称：kissy-store，下载次数：100，文件大小：30.97 kB" class="btn-download">点此下载</a></li>
</ul>
<h4>1.什么是本地共享对象（ISO）</h4>
<p><a href="http://www.adobe.com/cn/products/flashplayer/articles/lso/">猛击这里进入查看官方文档说明</a>，简单点讲，flash的本地共享对象就是加强版的cookies，机制上也是类似的，比如无法跨域访问，不会主动记忆用户信息。<br />
想要在web页面js调用flash的本地共享对象，这里必然要借助flash的actionscript和javascript的通信接口：<strong>ExternalInterface</strong>。<br />
整个过程的确比浏览器的cookies繁琐不少，幸运的是，很多js框架（包括kissy）已经帮我们封装好了本地共享对象方法，我们无需了解flash的内部实现，即可在外部轻松的调用该接口。<br />
kissy是如何调用flash的本地共享对象的呢？</p>
<h4>2.使用本地共享对象，需要引入的kissy模块</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;"> </span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">kissy/flash/flash-pkg-min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">kissy/ajbridge/ajbridge/ajbridge-pkg-min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">script</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text/javascript</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">src</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">kissy/ajbridge/store/store-pkg-min.js</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">script</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>这三个模块，缺一不可哦，接下来明河分别简单介绍下这三个模块</p>
<h4>3.kissy的flash模块</h4>
<p>kissy的flash模块中，有个很重要的子模块叫：<a href="http://docs.kissyui.com/kissy/docs/flash/flash-embed.html">flash-embed</a>，通过flash-embed，你可以快速的向DOM插入flash对象，你这里自由的控制flashvars（向flash对象传递一些复杂数据的参数）。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">F</span><span style="color: Gray;">.</span><span style="color: Blue;">add</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#test-flash3</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">src</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">36ria.com/test.swf</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">version</span><span style="color: Gray;">: </span><span style="color: Maroon;">9</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">attrs</span><span style="color: Gray;">: </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">width</span><span style="color: Gray;">: </span><span style="color: Maroon;">100</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">height</span><span style="color: Gray;">: </span><span style="color: Maroon;">100</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">params</span><span style="color: Gray;">: </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">flashvars</span><span style="color: Gray;">: </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">site</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">36ria.com</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">author</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">明河共影</span><span style="color: #8b0000;">'</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>上述代码会在id为test-flash3的层上，生成一个宽高为100像素，flashvars为site=36ria.com&#038;author=明河共影的flash对象。</p>
<h4>4.什么是ajbridge？</h4>
<p><a href="http://docs.kissyui.com/kissy-ajbridge/docs/">ajbridge</a>是由龙藏教主牵头开发的kissy独立项目， Actionscript 和 Javascript集合应用，包括flash文件上传、flash本地共享对象等。</p>
<h4>5.ajbridge的store</h4>
<p>&#8230;..总算进入整主的介绍了，store是flash本地存储模块，继承于ajbridge，同时会调用kissy的flash模块，所以想要使用store模块，必须保证flash模块和ajbridge模块已经引入。</p>
<h5>1.请确保在服务器端运行demo页面</h5>
<p>如果你打开的路劲类似file://这是无效的！根据明河观察使用http://localhost/也是无效的，在本地运行demo的朋友，请使用ip。</p>
<h5>2.白名单文件</h5>
<p>你可以在明河的压缩包内找到storage-whitelist.xml（kissy\ajbridge\store），该文件必须和<strong>store.swf</strong>在同一个目录下。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;?</span><span style="color: Green;">xml</span><span style="color: Gray;"> </span><span style="color: #00008b;">version</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">1.0</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">encoding</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">utf-8</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">?&gt;</span></li>
<li><span style="color: Olive;">&lt;</span><span style="color: Green;">domain-policy</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">allow-access-from</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">domain</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">*</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">domain-policy</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>“*”允许保存所有的域的数据。</p>
<h5>3.准备一个flash容器层层</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;"> </span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ks-fl-store</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p>留意不可设置这个层的display:none！</p>
<h5>3.配置Store参数</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">config</span><span style="color: Gray;">=</span><span style="color: Olive;">{</span><span style="color: Blue;">id</span><span style="color: Gray;">:</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ks-ajb-store</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span><span style="color: Blue;">attrs</span><span style="color: Gray;">: </span><span style="color: Olive;">{</span><span style="color: Blue;">width</span><span style="color: Gray;">: </span><span style="color: Maroon;">1</span><span style="color: Gray;">,</span><span style="color: Blue;">height</span><span style="color: Gray;">: </span><span style="color: Maroon;">1</span><span style="color: Olive;">}</span><span style="color: Gray;">,</span><span style="color: Blue;">src</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">kissy/ajbridge/store/store.swf</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">params</span><span style="color: Gray;">:</span><span style="color: Olive;">{</span><span style="color: Blue;">bgcolor</span><span style="color: Gray;">:</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#C4C4C4</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: Olive;">}}</span></li></ol></div>
<p>id（flash对象的id）是必不可少的,src为swf路径，也是必不可少的，还有其他参数请看文档。</p>
<h5>4.实例化Store</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;"> = </span><span style="color: Blue;">KISSY</span><span style="color: Gray;">,</span><span style="color: Blue;">Event</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Event</span><span style="color: Gray;">,</span><span style="color: Blue;">DOM</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">DOM</span><span style="color: Gray;">,</span><span style="color: Blue;">F</span><span style="color: Gray;"> = </span><span style="color: Blue;">KISSY</span><span style="color: Gray;">.</span><span style="color: Blue;">Flash</span><span style="color: Gray;">,</span><span style="color: Blue;">A</span><span style="color: Gray;"> = </span><span style="color: Blue;">AJBridge</span><span style="color: Gray;">,</span><span style="color: Blue;">Store</span><span style="color: Gray;"> = </span><span style="color: Blue;">A</span><span style="color: Gray;">.</span><span style="color: Blue;">Store</span><span style="color: Gray;">,</span><span style="color: Blue;">storeContainer</span><span style="color: Gray;">=</span><span style="color: #8b0000;">'</span><span style="color: Red;">ks-fl-store</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li>
<li><span style="color: #ffa500;">//实例化Store</span></li>
<li><span style="color: Blue;">demoStore</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Store</span><span style="color: Olive;">(</span><span style="color: Blue;">storeContainer</span><span style="color: Gray;">,</span><span style="color: Blue;">config</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h5>5.contentReady事件</h5>
<p>contentReady（本地存储就绪后触发）事件是非常重要的事件，从理论上来讲针对Store的所有操作要在flash本地存储准备完成后才能操作。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//本地存储就绪后触发</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">on</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">contentReady</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">ev</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">user</span><span style="color: Gray;"> = </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">getItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">user</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">email</span><span style="color: Gray;"> = </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">getItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">email</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">site</span><span style="color: Gray;"> = </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">getItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">site</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">user</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#user</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">user</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">email</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#email</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">email</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">site</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#site</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">site</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span></li></ol></div>
<p>上述的代码，将获取本地存储三个字段：用户名、邮箱、网站信息，并把三个信息写入到对应的输入框。</p>
<h5>6.获取指定字段的值</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">user</span><span style="color: Gray;"> = </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">getItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">user</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span></li></ol></div>
<h5>7.设置存储字段</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">setItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">user</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#user</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li></ol></div>
<h4>6.demo完整代码</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;"> = </span><span style="color: Blue;">KISSY</span><span style="color: Gray;">,</span><span style="color: Blue;">Event</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Event</span><span style="color: Gray;">,</span><span style="color: Blue;">DOM</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">DOM</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">F</span><span style="color: Gray;"> = </span><span style="color: Blue;">KISSY</span><span style="color: Gray;">.</span><span style="color: Blue;">Flash</span><span style="color: Gray;">,</span><span style="color: Blue;">A</span><span style="color: Gray;"> = </span><span style="color: Blue;">AJBridge</span><span style="color: Gray;">,</span><span style="color: Blue;">Store</span><span style="color: Gray;"> = </span><span style="color: Blue;">A</span><span style="color: Gray;">.</span><span style="color: Blue;">Store</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">config</span><span style="color: Gray;">=</span><span style="color: Olive;">{</span><span style="color: Blue;">id</span><span style="color: Gray;">:</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">ks-ajb-store</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">,</span><span style="color: Blue;">attrs</span><span style="color: Gray;">: </span><span style="color: Olive;">{</span><span style="color: Blue;">width</span><span style="color: Gray;">: </span><span style="color: Maroon;">1</span><span style="color: Gray;">,</span><span style="color: Blue;">height</span><span style="color: Gray;">: </span><span style="color: Maroon;">1</span><span style="color: Olive;">}</span><span style="color: Gray;">,</span><span style="color: Blue;">src</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">kissy/ajbridge/store/store.swf</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Blue;">params</span><span style="color: Gray;">:</span><span style="color: Olive;">{</span><span style="color: Blue;">bgcolor</span><span style="color: Gray;">:</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#C4C4C4</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">}}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">storeContainer</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">ks-fl-store</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//实例化Store</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">demoStore</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Store</span><span style="color: Olive;">(</span><span style="color: Blue;">storeContainer</span><span style="color: Gray;">,</span><span style="color: Blue;">config</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//本地存储就绪后触发</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">on</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">contentReady</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">ev</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">user</span><span style="color: Gray;"> = </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">getItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">user</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">email</span><span style="color: Gray;"> = </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">getItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">email</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span><span style="color: Blue;">site</span><span style="color: Gray;"> = </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">getItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">site</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">user</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#user</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">user</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">email</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#email</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">email</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">site</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#site</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">site</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//demo1</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">Event</span><span style="color: Gray;">.</span><span style="color: Blue;">on</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#save</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">click</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">ev</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">setItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">user</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#user</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">setItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">email</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#email</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">demoStore</span><span style="color: Gray;">.</span><span style="color: Blue;">setItem</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">site</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#site</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">保存成功！请重新打开浏览器试下！</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})</span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/3931/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第十二天构建步骤条组件（2）—15天学会kissy</title>
		<link>http://www.36ria.com/3922</link>
		<comments>http://www.36ria.com/3922#comments</comments>
		<pubDate>Thu, 03 Mar 2011 07:42:55 +0000</pubDate>
		<dc:creator>明河共影</dc:creator>
				<category><![CDATA[kissy]]></category>
		<category><![CDATA[15天学会kissy]]></category>
		<category><![CDATA[kissy教程]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=3922</guid>
		<description><![CDATA[在谈KISSY.Base类之前，明河先来说说kissy中的继承，这是绕不开的话题，想要用好kissy，必须掌握kissy的继承机制。 猛击这里进入查看kissy的继承API，mix、merge、augment、extend这四个核心方法是非常重要的方法，明河严重推荐掌握，接下来明河将通过二个demo说特别明下merge和extend的用法。 1.merge KISSY.merge(a,b)有个很经典的应用场景：合并配置参数，比如合并b对象与a对象，b的对象成......]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.36ria.com/wp-content/uploads/2011/03/kissy-day-12.png" alt="" title="kissy-day-12" width="640" height="200" class="alignleft size-full wp-image-3923" /></p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/ks/day-11.html" class="btn-view-demo" target="_blank"></a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=191" title="名称：15天学会kissy实例，下载次数：611，文件大小：665.22 kB" class="btn-download">点此下载</a></li>
</ul>
<p>在谈KISSY.Base类之前，明河先来说说kissy中的继承，这是绕不开的话题，想要用好kissy，必须掌握kissy的继承机制。<br />
<a href="http://docs.kissyui.com/kissy/docs/seed/kissy.html">猛击这里进入查看kissy的继承API</a>，mix、merge、augment、extend这四个核心方法是非常重要的方法，明河严重推荐掌握，接下来明河将通过二个demo说特别明下merge和extend的用法。</p>
<h4>1.merge</h4>
<p>KISSY.merge(a,b)有个很经典的应用场景：合并配置参数，比如合并b对象与a对象，b的对象成员会覆盖a的对象成员。<br />
比如：我们的步骤条组件要暴露三个参数供用户自定义，分别是width（宽度）、color（颜色）、act（当前激活步骤）；当然我们需要有默认配置参数，这样当用户不输入参数时，保证有正确的参数供组件使用。<br />
（以下代码为模拟，参见demo页面）</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">param</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span><span style="color: Blue;">width</span><span style="color: Gray;"> : </span><span style="color: Maroon;">300</span><span style="color: Gray;">,</span><span style="color: Blue;">color</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">blue</span><span style="color: #8b0000;">'</span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">defaultConfig</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span><span style="color: Blue;">width</span><span style="color: Gray;">: </span><span style="color: Maroon;">200</span><span style="color: Gray;">,</span><span style="color: Blue;">color</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">red</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">act</span><span style="color: Gray;"> : </span><span style="color: Maroon;">0</span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">config</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">merge</span><span style="color: Olive;">(</span><span style="color: Blue;">defaultConfig</span><span style="color: Gray;">,</span><span style="color: Blue;">param</span><span style="color: Olive;">)</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">html</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">&amp;lt;p&amp;gt;合并后的参数：width为</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">+</span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;">+</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">,color为</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">+</span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">color</span><span style="color: Gray;">+</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">,act为</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">+</span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">act</span><span style="color: Gray;">+</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;默认配置的width为</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">+</span><span style="color: Blue;">defaultConfig</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;">+</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">&amp;lt;/p&amp;gt; </span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">html</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#demo1-container</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Blue;">html</span><span style="color: Olive;">)</span></li></ol></div>
<p>从demo中可以看到，param上的成员覆盖了同名的defaultConfig上的成员，param上不存在act成员，但defaultConfig存在，所以config也存在成员act，param和defaultConfig这二个对象并不会因为合并操作而改变本身的值。</p>
<h4>2.extend</h4>
<p>前面说到对象的合并，现在讲讲kissy中的类与类的继承（javascript并没有类这个概念，这里是借用，可能用函数对象更准确些）。<br />
举个例子：我们需要步骤条组件KISSY.Steps继承于TestSteps（测试用）。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//父类</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">TestSteps</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">config</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;"> = </span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">TestSteps</span><span style="color: Gray;">.</span><span style="color: Blue;">prototype</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">init</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//子类</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Steps</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">config</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;"> = </span><span style="color: Blue;">config</span><span style="color: Gray;">.</span><span style="color: Blue;">width</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//继承于TestSteps</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">extend</span><span style="color: Olive;">(</span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Steps</span><span style="color: Gray;">,</span><span style="color: Blue;">TestSteps</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">Event</span><span style="color: Gray;">.</span><span style="color: Blue;">on</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#btn-demo2</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">click</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">ev</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">steps</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Steps</span><span style="color: Olive;">({</span><span style="color: Blue;">width</span><span style="color: Gray;">:</span><span style="color: Maroon;">200</span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">init</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span></li></ol></div>
<p>可以看到，KISSY.Steps，并没有init方法，但继承于TestSteps后，一样可以调用到。</p>
<h4>3.为什么让组件继承KISSY.Base？</h4>
<p>在steps.js上，可以找到如下代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//继承于KISSY.Base</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">extend</span><span style="color: Olive;">(</span><span style="color: Blue;">Steps</span><span style="color: Gray;">, </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Base</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>
<strong>KISSY.Base</strong>是<strong>1.1.6</strong>引入的新的方法集合，当你的类继承于KISSY.Base后就拥有了属性的<strong>getter和setter</strong>方法，总所周知，javascript是没有大部分语言拥有的取值器和设值器，所以KISSY.Base模拟出该方法，利用这个特性，你可以很方便的设置参数、获取参数、重置参数，并可以监听参数改变前、改变后事件。现在这么说，的确很抽象，<a href="http://docs.kissyui.com/kissy/docs/base/index.html">猛击这里进入KISSY.Base文档</a>，再<a href="http://docs.kissyui.com/kissy/docs/base/attribute.html">猛击这里进入 attribute文档</a>。
</p>
<p>
举个场景作为例子：KISSY.Steps开放了width参数供用户自定义，有一种情况我们需要考虑的，即初始化结束后，用户因为某种业务需求，需要改变这个width参数，初始化后width为300，用户点击一个按钮，width变成200，当单是参数变量数值的改变是没任何作用的，我们需要一个方法，比如setWidth()，来实际改变步骤li在DOM中的宽度，当然最好还要暴露出一个getWidth()方法，供用户获取宽度。还有一种情况更复杂些，你希望暴露出changeWidth事件，当宽度改变时可以触发。当加上这些需求后，一个参数的设置也许你不会觉得增加了多少代码量，但如果你的参数很多呢？
</p>
<p>这就是KISSY.Base的意义。有兴趣的朋友，可以看下1.1.6中的suggest.js（采用旧的kissy模块写法）和<strong>imagezoom.js</strong>（采用继承KISSY.Base的模块写法），具体体会下二者之间代码风格的差异。imagezoom供配置的参数相当丰富，如果采用旧式的写法，你会发现API非常的繁琐。
</p>
<p>继承KISSY.Base，另外一个好处是<strong>可以直接自定义事件</strong>，而无需再继承<strong>KISSY.EventTarget</strong>，什么是自定义事件？如何自定义事件？这是系列教程事件高级篇的内容，明河将整合到构建步骤条组件里面讲，现在只是提一下，继续我们的KISSY.Base。</p>
<h4>4.实战KISSY.Base</h4>
<p>继承KISSY.Base有几个步骤是不得不提的。</p>
<h5>1)在构造函数中初始化父类(KISSY.Base)</h5>
<p>你可以在function Steps(){}这个构造函数中，发现如下语法：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//超类初始化</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">superclass</span><span style="color: Gray;">.</span><span style="color: Blue;">constructor</span><span style="color: Gray;">.</span><span style="color: Blue;">call</span><span style="color: Olive;">(</span><span style="color: Blue;">self</span><span style="color: Gray;">, </span><span style="color: Blue;">config</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>这语句非常重要，如果缺少这个语句，KISSY.Base就没办法处理配置参数。至于为什么需要这样调用方式？有机会再跟大家分享。</p>
<h5>2)继承KISSY.Base</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//继承于KISSY.Base</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">extend</span><span style="color: Olive;">(</span><span style="color: Blue;">Steps</span><span style="color: Gray;">, </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Base</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h5>3)配置组件的默认参数</h5>
<p>这个步骤也非常的关键</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * 设置参数</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">ATTRS</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//是否自动运行</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">autoRender</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Green;">false</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">setter</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">v</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">this</span><span style="color: Gray;">.</span><span style="color: Blue;">render</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">v</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//步骤宽度</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">width</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Maroon;">100</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">setter</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">v</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">当你调用set方法时触发</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">v</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li></ol></div>
<p>ATTRS是Steps的静态对象（采用大写），每个对象成员对应着一个参数，每个参数又有三个成员：value（默认值）、getter（取值器，可以不用）、setter（设值器，可以不用）：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">width</span><span style="color: Gray;"> : </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">value</span><span style="color: Gray;"> : </span><span style="color: Maroon;">100</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">setter</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">v</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">v</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>留意getter和setter方法必须有返回值，即必须有return。</p>
<h5>4)扩展组件方法</h5>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">augment</span><span style="color: Olive;">(</span><span style="color: Blue;">Steps</span><span style="color: Gray;">, </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">})</span></li></ol></div>
<p><strong>S.augment</strong>用于复制原型prototype方法。</p>
<h5>5)如何设置参数、获取参数？</h5>
<p>请看demo页面，代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">steps</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Steps</span><span style="color: Olive;">()</span><span style="color: Gray;">,</span><span style="color: Blue;">width</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">set</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">width</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: Maroon;">300</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">width</span><span style="color: Gray;"> = </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">width</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">reset</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">DOM</span><span style="color: Gray;">.</span><span style="color: Blue;">html</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#demo3-container</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">'</span><span style="color: Red;">新的width为</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span><span style="color: Blue;">width</span><span style="color: Gray;">+</span><span style="color: #8b0000;">'</span><span style="color: Red;">，reset后width变成初始值</span><span style="color: #8b0000;">'</span><span style="color: Gray;">+</span><span style="color: Blue;">steps</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">width</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></li></ol></div>
<p>当继承KISSY.Base后，组件自动带有set()、get()和reset()三个方法，用法简单明了，你无须再写setWidth()，resetWidth()之类的方法。</p>
<h4>4.明河结语</h4>
<p>令人头晕的理论总算讲完了，没有太深入，只是让大家了解一些kissy的继承用法，下面几篇教程开始真正的逻辑处理，应用之前学的dom、event等。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/3922/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用jquery制作ajax提交表单时的交互按钮</title>
		<link>http://www.36ria.com/3886</link>
		<comments>http://www.36ria.com/3886#comments</comments>
		<pubDate>Sat, 19 Feb 2011 13:56:35 +0000</pubDate>
		<dc:creator>明河共影</dc:creator>
				<category><![CDATA[jquery教程]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[表单]]></category>
		<category><![CDATA[表单设计]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=3886</guid>
		<description><![CDATA[当你的表单使用ajax来提交的时候，有一个点要关注：防止用户重复点击提交按钮，同时要跟用户一个良好的交互反馈，比如点击提交后，有“正在提交中&#8230;.”的提示或者出现一张loading图片。 在这个demo很好的展示ajax表单提交时的按钮交互处理，同时代码也不会特别复杂，算是一个学习jquery的不错demo，原文请看《Create a Simple Interactive CSS Button with jQuery》。 1.构建一个简单表......]]></description>
			<content:encoded><![CDATA[<p>当你的表单使用ajax来提交的时候，有一个点要关注：防止用户重复点击提交按钮，同时要跟用户一个良好的交互反馈，比如点击提交后，有“正在提交中&#8230;.”的提示或者出现一张loading图片。</p>
<p>在这个demo很好的展示ajax表单提交时的按钮交互处理，同时代码也不会特别复杂，算是一个学习jquery的不错demo，原文请看《<a href="http://www.queness.com/post/3157/create-a-simple-interactive-css-button-with-jquery">Create a Simple Interactive CSS Button with jQuery</a>》。</p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.queness.com/resources/html/button/index.html" class="btn-view-demo" target="_blank"></a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=207" title="名称：jquery-ajax-form-button，下载次数：222，文件大小：24.86 kB" class="btn-download">点此下载</a></li>
</ul>
<h4>1.构建一个简单表单</h4>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Olive;">&lt;</span><span style="color: Green;">form</span><span style="color: Gray;"> </span><span style="color: #00008b;">method</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">post</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">action</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">subscribeForm</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">fieldset</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">label</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Name: </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">label</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">input</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">effect</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">name</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">fieldset</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">fieldset</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">label</span><span style="color: Olive;">&gt;</span><span style="color: Gray;">Email: </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">label</span><span style="color: Olive;">&gt;&lt;</span><span style="color: Green;">input</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">text</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">class</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">effect</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">email</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">fieldset</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">div</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">id</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">button</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">&lt;</span><span style="color: Green;">input</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">type</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">submit</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">value</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Subscribe</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> </span><span style="color: #00008b;">name</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">subscribeForm</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">/&gt;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">&lt;/</span><span style="color: Green;">div</span><span style="color: Olive;">&gt;</span></li>
<li><span style="color: Olive;">&lt;/</span><span style="color: Green;">form</span><span style="color: Olive;">&gt;</span></li></ol></div>
<p><img class="alignleft size-full wp-image-3887" title="button" src="http://www.36ria.com/wp-content/uploads/2011/02/button.gif" alt="" width="600" height="250" /><br />
没什么太特别的地方，接下来看下表单样式，特别留意提交按钮。</p>
<h4>2.表单样式</h4>
<p>按钮样式设置：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">#button</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">margin-top:</span><span style="color: Maroon;">10</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">padding-right:</span><span style="color: Maroon;">20</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">text-align:</span><span style="color: Red;">right</span><span style="color: Gray;">;&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">#button</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">input</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">margin:</span><span style="color: Maroon;">0</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">auto</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">a.cssSubmitButton</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">font-size:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">12</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">background:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#fff</span><span style="color: Gray;"> </span><span style="color: Red;">no-repeat</span><span style="color: Gray;"> </span><span style="color: Maroon;">4</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">5</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">display:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">inline-block</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">padding:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">5</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">20</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">6</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">color:</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">#333</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">border:</span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">solid</span><span style="color: Gray;"> </span><span style="color: #00008b;">#ccc</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">text-decoration:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">none</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">font-weight:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">bold</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">line-height:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">1.2</span><span style="color: Red;">em</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">border-radius:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">15</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -</span><span style="color: Green;">moz-border-radius:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">15</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -</span><span style="color: Green;">webkit-border-radius:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">15</span><span style="color: Red;">px</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -</span><span style="color: Green;">moz-box-shadow:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">3</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: #00008b;">#999</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -</span><span style="color: Green;">webkit-box-shadow:</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span><span style="color: Gray;"> </span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: Maroon;">3</span><span style="color: Red;">px</span><span style="color: Gray;"> </span><span style="color: #00008b;">#999</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">position:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">relative</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">cursor:</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">pointer</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">outline:</span><span style="color: Red;">none</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">a.cssSubmitButton</span><span style="color: Navy;">:visited</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">a.cssSubmitButton</span><span style="color: Navy;">:hover</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">border:</span><span style="color: Maroon;">1</span><span style="color: Red;">px</span><span style="color: Gray;">&nbsp;</span><span style="color: Red;">solid</span><span style="color: Gray;"> </span><span style="color: #00008b;">#333</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>cssSubmitButton这个样式，是脚本用a替换input时加上去了，也是说最后输出的按钮其实是个链接，之后会讲到，留言按钮的几种状态：可用、不可用、正在提交、鼠标滑过。按钮样式无视IE&#8230;&#8230;.</p>
<h4>3.js脚本</h4>
<p>以下脚本会发送ajax请求，同时会给按钮添加loading样式：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">value</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#button input</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">val</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">name</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#button input</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">attr</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">name</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//将按钮容器内的input替换成链接，链接伪装成按钮</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#button input</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">remove</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#button</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">html</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;a href=&quot;#&quot; class=&quot;cssSubmitButton&quot; rel=</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: Blue;">name</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">'</span><span style="color: Red;">&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> + </span><span style="color: Blue;">value</span><span style="color: Gray;"> + </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;/a&gt;</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;&nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//监听单击事件</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">#button a</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: Blue;">live</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">click</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//使用$('form[name=' + $(this).attr('rel') + ']').submit();直接提交表单&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">link</span><span style="color: Gray;"> = $</span><span style="color: Olive;">(</span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//ajax提交表单</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.</span><span style="color: Blue;">ajax</span><span style="color: Olive;">({</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">url</span><span style="color: Gray;"> : </span><span style="color: #8b0000;">'</span><span style="color: Red;">load.php</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">data</span><span style="color: Gray;">: </span><span style="color: #8b0000;">''</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">type</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">GET</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">cache</span><span style="color: Gray;">: </span><span style="color: #8b0000;">'</span><span style="color: Red;">false</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">beforeSend</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//提交前，给链接，添加loading样式</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">link</span><span style="color: Gray;">.</span><span style="color: Blue;">addClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">loading</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">success</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">link</span><span style="color: Gray;">.</span><span style="color: Blue;">removeClass</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">loading</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;&nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Submitted</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<p>大功告成！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/3886/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>第十一天构建步骤条组件（1）—15天学会kissy</title>
		<link>http://www.36ria.com/3849</link>
		<comments>http://www.36ria.com/3849#comments</comments>
		<pubDate>Tue, 25 Jan 2011 05:42:58 +0000</pubDate>
		<dc:creator>明河共影</dc:creator>
				<category><![CDATA[kissy]]></category>
		<category><![CDATA[15天学会kissy]]></category>
		<category><![CDATA[kissy教程]]></category>

		<guid isPermaLink="false">http://www.36ria.com/?p=3849</guid>
		<description><![CDATA[余下几篇教程将基于kissy1.1.6而不是1.1.5。 kissy模块化思想说明 虽然明河不大喜欢讲理论，不过模块化对于日后使用kissy完成中大型的web应用而言非常重要，kissy模块化思想的核心是提供一种颗粒化、松耦合、易于扩展、可异步加载、明确依赖的js代码组织方式，现在不理解这句话没关系，在实际应用后，你将体会到kissy模块化思想的先进性。在kissy1.1.5后做了拆分，独立出了seed.j......]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.36ria.com/wp-content/uploads/2011/01/kissy-day-11.png" alt="" title="kissy-day-11" width="640" height="200" class="alignleft size-full wp-image-3850" /></p>
<ul class="tow-columns clearfix">
<li class="l"><a href="http://www.36ria.com/demo/steps/index.html" class="btn-view-demo" target="_blank"></a></li>
<li class="l"><a href="http://www.36ria.com/wp-content/plugins/download-monitor/download.php?id=205" title="名称：KISSY.Steps—步骤条组件，下载次数：253，文件大小：6.81 kB" class="btn-download">点此下载</a></li>
</ul>
<p>余下几篇教程将基于kissy1.1.6而不是1.1.5。</p>
<h4>kissy模块化思想说明</h4>
<p>虽然明河不大喜欢讲理论，不过模块化对于日后使用kissy完成中大型的web应用而言非常重要，kissy模块化思想的核心是提供一种颗粒化、松耦合、易于扩展、可异步加载、明确依赖的js代码组织方式，现在不理解这句话没关系，在实际应用后，你将体会到kissy模块化思想的先进性。在kissy1.1.5后做了拆分，独立出了seed.js文件，seed是KISSY的核心基础模块，定义了继承、命名空间、模块创建和使用等一系列方法。在《<a href="http://www.36ria.com/3185">第二天Hello World—15天学会kissy</a>》中提到过一些关键API的用法，比如KISSY.ready()、KISSY.use()。今天继续讲解模块方面的API。</p>
<h4>1.创建一个独立的模块文件</h4>
<p>比如是步骤条组件，创建一个steps.js，这不是必须的，你可以在一个js中包含多个模块，但明河极力推荐1个模块对应一个js文件，以便于管理，当然这样引出一个新的问题，如果模块很多，那么请求数过多了，所以发布的时候还是要使用ant或combo将模块文件合并成一个js，关于这一点，日后明河我继续深入探讨。</p>
<h4>2.创建一个新的模块到KISSY对象</h4>
<p>现在明河想为KISSY扩展一个步骤条组件，模块名叫steps(一般对应文件名，统一为小写),代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">KISSY</span><span style="color: Gray;">.</span><span style="color: Blue;">add</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">steps</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">S</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Olive;">})</span></li></ol></div>
<p>第一个参数为模块名，第二个参数为模块实现函数（S指的是KISSY）。</p>
<h4>3.明确模块依赖</h4>
<p>steps这个模块依赖于core(KISSY的核心模块包含DOM、Event、ajax等)，在KISSY.add()中传递第三个参数，代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">KISSY</span><span style="color: Gray;">.</span><span style="color: Blue;">add</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">steps</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">S</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">, </span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">requires</span><span style="color: Gray;">: </span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">core</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">})</span></li></ol></div>
<p><strong>requires</strong>为一个数组，存储所有该模块的依赖模块。kissy会自动检查模块依赖，然后会自动加载依赖模块。</p>
<h4>4.给模块加上jsdoc注释</h4>
<p>注释很重要，严重推荐使用jsdoc的注释格式，比如在模块文件头部加上如下注释：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;"> * @fileOverview 步骤条组件</span></li>
<li><span style="color: #ffa500;"> * @extends&nbsp; KISSY.Base</span></li>
<li><span style="color: #ffa500;"> * @creator 剑平（明河共影）&lt;</span><span style="color: Blue;">riahome@126.com</span><span style="color: #ffa500;">&gt;</span></li>
<li><span style="color: #ffa500;"> * @depends&nbsp; ks-core</span></li>
<li><span style="color: #ffa500;"> * @version 2.0</span></li>
<li><span style="color: #ffa500;"> * @update 2011-01-02</span></li>
<li><span style="color: #ffa500;"> * @example</span></li>
<li><span style="color: #ffa500;"> *&nbsp; &nbsp;&nbsp; var steps = new S.Steps(&quot;#steps-1&quot;);</span></li>
<li><span style="color: #ffa500;"> */</span></li></ol></div>
<p>有几个模块描述是必须的，fileOverview（文件用途）、creator或author（作者）、version（版本）。<br />
大家一定会觉得奇怪，为什么版本是2.0呢？steps这个组件，明河早在去年9月就有第一个版本了，那时候刚学kissy，是当kissy的练习来写了，代码写的很粗糙，所以在上周做了彻底的重构，代码和API跟原来的完全不同，所以升为2.0。</p>
<h4>5.创建一个组件对象</h4>
<p>在KISSY.add()的第二个参数function内，创建一个对象，代码如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">KISSY</span><span style="color: Gray;">.</span><span style="color: Blue;">add</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">steps</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">S</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">DOM</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">DOM</span><span style="color: Gray;">,</span><span style="color: Blue;">EMPTY</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">''</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; *&nbsp; 步骤条组件</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @class Steps</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @constructor</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @param {Object} container 表单容器</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @param {Object} config 配置对象</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Steps</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Gray;"> ,</span><span style="color: Blue;">config</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">prototype</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Steps</span><span style="color: Gray;"> = </span><span style="color: Blue;">Steps</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">, </span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">requires</span><span style="color: Gray;">: </span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">core</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Steps</span><span style="color: Gray;"> = </span><span style="color: Blue;">Steps</span><span style="color: Gray;">;</span></li></ol></div>
<p>这个语句很关键，在外部是调用不到Steps这个对象的，我们需要将其赋值给KISSY这个命名空间，好让外部可以调用的到。<br />
至此，模块的壳差不多搭完了，当远不够完整，接着看。</p>
<h4>6.外部调用组件</h4>
<p>实例化组件非常简单:</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">var</span><span style="color: Gray;"> </span><span style="color: Blue;">steps</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Steps</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#steps-1</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<h4>7.Steps构造函数</h4>
<p>构造函数主要做以下几件事：</p>
<ul>
<li>参数、配置的处理</li>
<li>属性的定义</li>
<li>调用初始化函数</li>
</ul>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">KISSY</span><span style="color: Gray;">.</span><span style="color: Blue;">add</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">steps</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">S</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">DOM</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">DOM</span><span style="color: Gray;">,</span><span style="color: Blue;">EMPTY</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">''</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; *&nbsp; 步骤条组件</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @class Steps</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @constructor</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @param {Object} container 表单容器</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; * @param {Object} config 配置对象</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">Steps</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Gray;"> ,</span><span style="color: Blue;">config</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">self</span><span style="color: Gray;"> = </span><span style="color: Green;">this</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Olive;">(</span><span style="color: Blue;">self</span><span style="color: Gray;"> </span><span style="color: Green;">instanceof</span><span style="color: Gray;"> </span><span style="color: Blue;">Steps</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Steps</span><span style="color: Olive;">(</span><span style="color: Blue;">config</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 目标容器</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @type HTMLElement</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">container</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//初始化</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">_init</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">Steps</span><span style="color: Gray;">.</span><span style="color: Blue;">prototype</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 初始化</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">_init</span><span style="color: Gray;"> : </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">alert</span><span style="color: Olive;">(</span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">Steps</span><span style="color: Gray;"> = </span><span style="color: Blue;">Steps</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">, </span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">requires</span><span style="color: Gray;">: </span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">core</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">})</span><span style="color: Gray;">;</span></li></ol></div>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Olive;">(</span><span style="color: Blue;">self</span><span style="color: Gray;"> </span><span style="color: Green;">instanceof</span><span style="color: Gray;"> </span><span style="color: Blue;">Steps</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Steps</span><span style="color: Olive;">(</span><span style="color: Blue;">config</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li></ol></div>
<p>我想很多朋友，会对这段代码有疑问。这段代码的作用在于，倘若用户不是通过new实例化的组件的，那么this这个关键字是不会指向Steps对象的，为了防止这种情况出现，在构造函数内部做个判断，确保实例化Steps。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * 目标容器</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @type HTMLElement</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">self</span><span style="color: Gray;">.</span><span style="color: Blue;">container</span><span style="color: Gray;"> = </span><span style="color: Blue;">S</span><span style="color: Gray;">.</span><span style="color: Blue;">get</span><span style="color: Olive;">(</span><span style="color: Blue;">container</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li></ol></div>
<p>设置目标对象，可能使用target作为属性会更准确些，为了保持和KISSY官方组件的统一，这里依旧沿用container。明河喜欢把属性的定义统一放在构造函数，便于管理。<br />
<strong>_init</strong>这个初始化函数，也是为了保持和KISSY官方组件的统一，使用_init函数名，哈在Steps这个对象内啥事没干，真正干活的是<strong>render</strong>函数，之后我会讲到为什么不将组件初始化代码写在_init中，有些场合的确不适用一实例化类就初始化一堆的逻辑。<br />
这里做了个约定：私有方法和私有属性加“_”前缀。</p>
<h4>8.明河结语</h4>
<p>参数的处理以及继承，留待下一篇教程讲解。下一篇教程有个很重要的内容：为什么让组件继承<strong>KISSY.Base</strong>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.36ria.com/3849/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

