<?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>前端观察 &#187; Ajax</title>
	<atom:link href="http://www.qianduan.net/category/ajax-and-javascript-coding/feed" rel="self" type="application/rss+xml" />
	<link>http://www.qianduan.net</link>
	<description>专注于网站前端设计与前端开发</description>
	<lastBuildDate>Wed, 08 Feb 2012 05:05:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>用In.js颗粒化管理、加载你的Javascript模块</title>
		<link>http://www.qianduan.net/particles-with-in-js-management-load-your-javascript-module.html</link>
		<comments>http://www.qianduan.net/particles-with-in-js-management-load-your-javascript-module.html#comments</comments>
		<pubDate>Mon, 18 Jul 2011 11:27:13 +0000</pubDate>
		<dc:creator>郭凯</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[模块]]></category>
		<category><![CDATA[模块化]]></category>
		<category><![CDATA[颗粒]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=12562</guid>
		<description><![CDATA[近一年来，国内外都十分热衷于异步加载的研究，为了加快页面的载入速度，无阻塞加载Javascript的方法和框架成为了前端开发的焦点和亮点之一。... ]]></description>
			<content:encoded><![CDATA[<p>近一年来，国内外都十分热衷于异步加载的研究，为了加快页面的载入速度，无阻塞加载Javascript的方法和框架成为了前端开发的焦点和亮点之一。<span id="more-12562"></span></p>
<p><img src="http://project.benben.cc/In/in.js_logo.png" alt="In.js Logo" /></p>
<p>国外的像基于jQuery的RequireJs，YUI Loader，LabJs，RunJs，国内也有淘宝的SeaJs，豆瓣的DoJs等，这些都是一些十分优秀的模块加载器。但是本文将会向大家介绍一个新的开源的轻量级“多线程”异步模块加载器In.js，In的开发借鉴了Do的一些思路和使用习惯，在此期间感谢@kejun同我的耐心交流，In.js压缩后只有4.77k，不仅小巧而且十分好用。</p>
<p><strong>优点：</strong></p>
<ul>
<li>按需加载</li>
<li>无阻塞加载</li>
<li>依赖关系管理</li>
<li>颗粒化模块管理</li>
</ul>
<p><strong>如何使用？</strong></p>
<p><strong>A.引入In.js</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;in.js&quot;</span> autoload<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;true&quot;</span> core<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;jquery.min.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></td></tr></table></div>

<p>只需要在页面顶部引入in.js即可，这里有两个参数需要注意：</p>
<p>autoload: 是否在加载in.js的时候加载底层核心库 &#8211; {可选参数 &#8211; true|false}<br />
core: 底层核心库的路径 &#8211; {可选参数 &#8211; url}</p>
<p>如果同时设置了core，并且autoload=true，则在引入In.js的同时加载core到页面中。</p>
<p><strong>B.声明各个模块的地址和依赖关系In.add(name,{config})</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">In</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'mod-a'</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>path<span style="color: #339933;">:</span><span style="color: #3366CC;">'mods/a.js'</span><span style="color: #339933;">,</span>type<span style="color: #339933;">:</span><span style="color: #3366CC;">'js'</span><span style="color: #339933;">,</span>charset<span style="color: #339933;">:</span><span style="color: #3366CC;">'utf-8'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">In</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'mod-b'</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>path<span style="color: #339933;">:</span><span style="color: #3366CC;">'mods/b.js'</span><span style="color: #339933;">,</span>type<span style="color: #339933;">:</span><span style="color: #3366CC;">'js'</span><span style="color: #339933;">,</span>charset<span style="color: #339933;">:</span><span style="color: #3366CC;">'utf-8'</span><span style="color: #339933;">,</span>rely<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'mod-b-css'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">In</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'mod-b-css'</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>path<span style="color: #339933;">:</span><span style="color: #3366CC;">'mods/b.css'</span><span style="color: #339933;">,</span>type<span style="color: #339933;">:</span><span style="color: #3366CC;">'css'</span><span style="color: #339933;">,</span>charset<span style="color: #339933;">:</span><span style="color: #3366CC;">'utf-8'</span><span style="color: #339933;">,</span>rely<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'mod-a'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>上述代码声明了三个模块的依赖关系和模块的地址，并将它们加入到队列中去（仅仅是加入队列，并没有加载到页面中去）。</p>
<p><strong>C.加载队列In(queue)</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> demo<span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">In</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'mod-b'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">//do something</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">//do something</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>加载mod-b模块，加载完后执行functionA和functionB，在此假设引入in.js时设置了autoload=true，那么队列中的加载顺序依次为：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">jquery.min.js &gt;&gt;&gt; mod-a &gt;&gt;&gt; mod-b-css &gt;&gt;&gt; mod-b &gt;&gt;&gt; functionA() &gt;&gt;&gt; functionB()</pre></td></tr></table></div>

<p>队列全部加载完成后，demo会被赋值为一个数组，其中存放的是每个function的返回值：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">demo<span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span>returns<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span>undefined<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>complete<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><strong>D.在domReady之后加载队列In.ready(queue)</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">In</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'mod-b'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">//do something</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>队列加载顺序：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">jquery.min.js &gt;&gt;&gt; {domReady} &gt;&gt;&gt; mod-a &gt;&gt;&gt; mod-b-css &gt;&gt;&gt; mod-b &gt;&gt;&gt; function()</pre></td></tr></table></div>

<p>In.ready()和In()的区别在于两点：</p>
<ol>
<li>In.ready()中的队列只有在domReady之后才会执行</li>
<li>In.ready()没有返回值</li>
</ol>
<p><strong>E.监听变量变化，值改变则执行回调In.watch(object,property,function(prop,old,new) {})</strong></p>
<p>由于In加载的队列均为异步非阻塞式加载，所以有时候为了特殊需求（比如后续的操作依赖队列中function的返回值），我们需要在确保队列执行完成后，再执行后续操作。这种情况下，可以用In.watch()监听return.complete变量，当return.complete==true的时候执行回调函数，代码如下：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> model<span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">In</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'model'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">//do something</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #CC0000;">123</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">In</span>.<span style="color: #660066;">watch</span><span style="color: #009900;">&#40;</span>model<span style="color: #339933;">,</span><span style="color: #3366CC;">'complete'</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>prop<span style="color: #339933;">,</span>old<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">new</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>model<span style="color: #009900;">&#91;</span>prop<span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>model.<span style="color: #660066;">returns</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">//print 123</span>
		<span style="color: #000066; font-weight: bold;">In</span>.<span style="color: #660066;">unwatch</span><span style="color: #009900;">&#40;</span>model<span style="color: #339933;">,</span>prop<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">//destroy the watch event of model.complete</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-华丽的分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>In的魅力远远不止上述这些，它的可靠性也已经在几个大项目中得到了印证，除此之外，In也有智能的提示，比如如果用In()加载一个事先未声明的模块，就会提示你检查模块名。真心的希望有更多的前端朋友关注In，使用In，甚至投入到In的后续开发中来。</p>
<p>下图是<a href="http://project.benben.cc/In/in.js_manual.png">In.js的英文版使用图册</a>：</p>
<p><img src="http://project.benben.cc/In/in.js_manual.png" alt="In.js Manual" width="560" /></p>
<p><strong>在哪下载？</strong></p>
<p>In.js是一个开源的项目，你可以在下边的地址找到它的源代码或者下载它使用。</p>
<p><a href="http://project.benben.cc/In">http://project.benben.cc/In</a><br />
<a href="http://github.com/PaulGuo/In">http://github.com/PaulGuo/In</a></p>
<p><strong>关于作者</strong></p>
<p>Author: Guokai （<a href="http://t.qq.com/lajiao">腾讯微博</a> / <a href="http://twitter.com/guokai">Twitter</a> / <a href="http://gplus.to/guokai">Google+</a> / <a href="http://benben.cc/">Blog</a>）<br />
Email/Gtalk: badkaikai@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/particles-with-in-js-management-load-your-javascript-module.html/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>iOS 4.2版safari对HTML5特性支持更新</title>
		<link>http://www.qianduan.net/ios-4-2-version-of-safari-update-feature-support-for-html5.html</link>
		<comments>http://www.qianduan.net/ios-4-2-version-of-safari-update-feature-support-for-html5.html#comments</comments>
		<pubDate>Tue, 23 Nov 2010 04:43:34 +0000</pubDate>
		<dc:creator>神飞</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Front News]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=12314</guid>
		<description><![CDATA[嗯，据说iOS 4.2发布了，所有的iPhone，iPod、iPad啥的，都可以免费更新。令人欣慰的是，这个版本的iOS对HTML5新特性的支持有比较大的升级，其中包括对WebSockets和加速器(Accelerometer)的支持，新的ev... ]]></description>
			<content:encoded><![CDATA[<div>文章整理自 <a href="http://www.mobilexweb.com/blog/safari-ios-accelerometer-websockets-html5" target="_blank">Safari on iOS 4.2: Accelerometer, WebSockets, SVG, AJAX2 &amp; better HTML5 support<br />
</a>请尊重版权，转载请注明出自<a href="http://www.qianduan.net" target="_blank">前端观察</a></div>
<p></p>
<p>嗯，据说iOS 4.2发布了，所有的iPhone，iPod、iPad啥的，都可以免费更新。令人欣慰的是，这个版本的iOS对HTML5新特性的支持有比较大的升级，其中包括对WebSockets和加速器(Accelerometer)的支持，新的event、支持打印、新的JavaScript 数据类型和更好的SVG支持。<span id="more-12314"></span></p>
<p>事实上，Apple还没有更新Safari文档。这里的信息只是基于在Safari(注：文中的Safari指iOS移动设备中的Safari浏览器，不包括PC和Mac机中的Safari)自身的JavaScript研究和测试上。具体来说，检测到的新特性如下：</p>
<ul>
<li>通过DeviceOrientation API支持加速器</li>
<li>HTML5 WebSocket API</li>
<li>HTML5 表单支持增强</li>
<li>打印支持</li>
<li>新的JavaScript 数据类型</li>
<li>新DOM事件</li>
<li>增强对SVG和Canvas的支持</li>
</ul>
<h3>加速器支持</h3>
<p>或许你已经知道，iOS设备都有加速传感器(还有其它的，比如磁力及和陀螺仪)，但是直到现在，网页开发者没有操作这些传感器的权限。Safari现在支持 <a href="http://dev.w3.org/geo/api/spec-source-orientation.html" target="_blank">DeviceOrientation API</a> (W3C草案)，不过，虽然看起来全部的API都是被支持的(包括<strong>ondeviceorientation </strong>和<strong>ondevicemotion</strong>事件)，但是在测试中，我只能成功的使用加速器的数据。</p>
<p>如果你已经有了iOS 4.2的设备，可以用Safari浏览器访问 <a title="Device Orientation Event in iOS 4.2" href="view-source:http://www.mobilexweb.com/tests/4.2/orientation.html" target="_blank">ad.ag/jtjdmj</a> 自行测试。</p>
<p>要想检测每秒钟50次加速计数据变化，你需要在window全局对象监听ondevicemotion事件，然后在DeviceOrientationEvent参数上使用accelerationIncludingGravity属性。它有三个值：x、y和z，分别代表每个坐标上的加速度g (gravity,重力)。你可以将加速计数用于游戏，效果或者CSS动画中。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">window.<span style="color: #660066;">ondevicemotion</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #006600; font-style: italic;">// event.accelerationIncludingGravity.x</span>
<span style="color: #006600; font-style: italic;">// event.accelerationIncludingGravity.y</span>
<span style="color: #006600; font-style: italic;">// event.accelerationIncludingGravity.z</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3>WebSockets</h3>
<p>另一个大更新是对WebSockets的支持。<a href="http://dev.w3.org/html5/websockets/" target="_blank">WebSockets</a>是一个尚处于草案状态的W3C HTML5 API，允许JavaScript使用一种开放的双向、双全工连接到一台服务器，通过TCP sockets。这对于聊天和实时应用来说是一个非常好的消息，因为可以大大减少AJAX周期性调用。</p>
<p>你将需要一台能够通过一种HTTP握手理解新的WebSocket协议的服务器。如果服务器不支持WebSocket或者由于代理/网关的原因，你将还要依赖一种fallback机制。</p>
<h3>HTML5表单支持</h3>
<p>其实webkit对HTML5表单的支持相对已经比较不错，现在iOS 4.2的Safari开始支持 <strong>required</strong>属性以及 <strong>:invalid</strong> CSS伪类。这样的话，下面的代码将展示一个文本框在输入正确的时候显示绿色背景，而不正确的时候显示黄色背景。</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">style</span>&gt;</span>
input {
background-color: green;
color: white;
}
input:invalid {
background-color: yellow;
}
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">style</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> required&gt;</span></pre></div></div>

<h3>AJAX2</h3>
<p>名为<a href="http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html" target="_blank'&gt; XMLHttpRequest Level 2&lt;/a&gt; (Ajax 2)的W3C草案增加了许多新特性到XHR对象和功能性上。Safari支持 &lt;a href=">FormData</a>对象，这允许我们很方便的通过Ajax发生表单数据。</p>
<h3>打印支持</h3>
<p>iOS4.2引入了 AirPrint，一种无限打印方案。也就是说，我们现在可以使用 <strong>window.print</strong> 来在Safari中调用打印对话框了。</p>
<h3>新的JavaScript 数据类型</h3>
<p>Safari现在支持 二进制类 (Blob Class)和许多整数类型的集合，比如 Float32Array，Int8Array，Uint8Array，Int16Array Unit16Array，Int32Array以及Uint32Array等在<a href="https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html" target="_blank">Typed Arrays</a>规范中定义的数组。更多信息可访问 <a href="https://developer.mozilla.org/en/JavaScript_typed_arrays" target="_blank">Firefox 网站</a>。</p>
<h3>新DOM事件</h3>
<p>在新的动作类事件中，我们现在可以使用HTML 5新的 <strong>onhashchange</strong>事件用于检测AJAX类webapp中URL中散列(#)之后的变化，以及HTML5草案规范中的<strong>invalid</strong>、<strong>onbeforeload</strong> 以及<strong>onpopstate</strong>事件。</p>
<p>现在，我们也可以使用<strong>window.captureEvents</strong>和<strong>window.releaseEvents</strong>来监听全局方法中的事件。</p>
<h3>SVG和Canvas支持增强</h3>
<p>iOS支持作为独立文件的SVG以及内联SVG(使用svg标签)。现在我们可以直接在我们的文档中创建SVG文档——使用超过20个SVG___类，比如SVGDocument，SVGImage等&#8230;</p>
<p>对于Canvas，现在支持<a href="http://nooshu.com/using-image-data-inside-the-html5-canvas-element/" target="_blank">imageData</a> data-type，一种从JavaScript以像素级操作图片的方法。</p>
<h3>其它东东</h3>
<ul>
<li>支持window全局对象的一个<strong>styleMedia</strong>属性</li>
<li>一种<strong>WebGLRenderingContext</strong>类可用，3D Drawing API(也就是WebGL)的一部分。</li>
<li>一个全局<strong>RGBColor</strong>构造函数</li>
</ul>
<p>PS：由于我本人并没有iPhone、iPad啥的，所以没有办法对文中的内容进行逐个测试，如果你发现了某些错误或者新的内容，请通过留言提交，我会及时更新本文，多谢——神飞</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/ios-4-2-version-of-safari-update-feature-support-for-html5.html/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Modernizr与HTML5</title>
		<link>http://www.qianduan.net/modernizr-and-html5.html</link>
		<comments>http://www.qianduan.net/modernizr-and-html5.html#comments</comments>
		<pubDate>Wed, 01 Sep 2010 14:10:36 +0000</pubDate>
		<dc:creator>神飞</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=12292</guid>
		<description><![CDATA[好吧，现在流行HTML5，我就给它标题加上个HTML5吧 :... ]]></description>
			<content:encoded><![CDATA[<p>好吧，现在流行HTML5，我就给它标题加上个HTML5吧 :)</p>
<p>其实<a href="http://www.modernizr.com" target="_blank">modernizr</a>就是为HTML5而生的——它是一个检测浏览器对HTML5和CSS3特性支持的JS库，著名的HTML5/CSS3浏览器兼容性网站<a href="http://www.findmebyip.com/litmus" target="_blank">FindmeByIP</a>就是基于该框架实现的。</p>
<p><a href="http://www.findmebyip.com/litmus" target="_blank"><img class="alignnone size-full wp-image-12293" title="findmebyip" src="http://www.qianduan.net/wp-content/uploads/2010/09/findmebyip.jpg" alt="" width="567" height="500" /></a></p>
<p>可以看到，右下角绿色按钮上面有Modernizr的链接。</p>
<h3>Modernizr的功能</h3>
<p>modernizr的功能其实很简单，就是用js检测浏览器对HTML5/CSS3的特性支持情况，支持某个属性，就在页面的&lt;html&gt;标签上添加一个相应的class，不支持的话就添加一个no-前缀的class，比如，如果检测的浏览器支持video标签，modernizr就会在&lt;html&gt;标签上添加video类，否则，添加no-video类。</p>
<p>查看FindMeByIP的源码或者用firebug之类的工具查看页面代码，就可以看到&lt;HTML&gt;标签中的class。</p>
<p>另外，modernizr也提供了另外一种用法，就是单独的检测浏览器对某个特性的支持情况，例如：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>Modernizr.<span style="color: #660066;">video</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>通过类似的接口检测浏览器对HTML5的支持情况，是比较安全的。</p>
<h3>浏览器检测：UA VS 特性</h3>
<p>其实大家通常都会用UA去检测一个浏览器，当然ua也提供了更丰富的信息，UA不是万能的，它也有一些弱点，比如，用户浏览器的UA伪装，某些落后浏览器提供的UA信息太少，这些都会影响到对浏览器信息的判断。更重要的是，<strong>对于HTML5特性来说，用UA去判断一个浏览器是否支持某个特性，实现太复杂而且不靠谱</strong>。</p>
<p>当然，关于UA和特性检测的争论一直都有，我这里想说的是，具体问题具体分析，在网站中使用HTML5来检测特性支持要比UA更靠谱、更方便～～</p>
<h3>使用Modernizr</h3>
<p>modernizr的用法很简单，仅仅在页面中引入库的js文件即可：</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;modernizr-1.5.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div>

<p><a href="http://www.modernizr.com" target="_blank">Modernizr</a>是开源的，但是由于某种原因，它被G-FW给封掉了。</p>
<h4>Modernizr @ git</h4>
<p>modernizr项目托管在git，你可以通过以下地址获取它：<br />
<a href="http://github.com/Modernizr/Modernizr" target="_blank">http://github.com/Modernizr/Modernizr</a><br />
作者还在git提供了一个简单的输出页：<br />
<a href="http://modernizr.github.com/Modernizr/output.html">http://modernizr.github.com/Modernizr/output.html</a><br />
和一个详细测试页面：<br />
<a href="http://modernizr.github.com/Modernizr/test/index.html">http://modernizr.github.com/Modernizr/test/index.html</a></p>
<h3>扩展阅读：</h3>
<p><a href="http://diveintohtml5.org/detect.html">detacting HTML5 features</a><br />
<a href="http://aiminstitute.org/blog/2010/07/safely-deploy-html5-and-css3-with-modernizr/">Safely Deploy HTML5 and CSS3 with Modernizr</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/modernizr-and-html5.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Raphael js库简介</title>
		<link>http://www.qianduan.net/raphael-js-library-introduction.html</link>
		<comments>http://www.qianduan.net/raphael-js-library-introduction.html#comments</comments>
		<pubDate>Wed, 01 Sep 2010 02:06:16 +0000</pubDate>
		<dc:creator>神飞</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[js库]]></category>
		<category><![CDATA[svg]]></category>
		<category><![CDATA[vml]]></category>
		<category><![CDATA[矢量]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=12286</guid>
		<description><![CDATA[Raphael js库是在webrebuild交流会上听到的，后来就看了下，果然很强大——通过SVG/VML+JS实现跨浏览器的动画解决方案... ]]></description>
			<content:encoded><![CDATA[<p><a href="http://raphaeljs.com" target="_blank">Raphael JS</a>库是在webrebuild交流会上听专家将到的，后来就看了下，果然很强大——通过SVG/VML+JS实现跨浏览器的矢量图形实现方案。</p>
<p>这其实和cufon等网络字体的实现原理是有些类似的：非IE浏览器使用SVG绘图，然后IE中使用VML。它的目的是想要提供一种简单易用的真正跨浏览器的矢量图形实现方案，包括一些动画效果。</p>
<p>Raphael的语法也很简单，基本上了解SVG就会很容易上手的：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> c <span style="color: #339933;">=</span> paper.<span style="color: #660066;">path</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;M10 10L90 90&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// 画一条线；</span></pre></div></div>

<h3>浏览器支持</h3>
<p>IE6+、Firefox 3.0+、chrome、opera等都是很好支持的。</p>
<p>一些酷酷的例子：</p>
<p>使用Raphael绘制的117个矢量图标：</p>
<p><a href="http://raphaeljs.com/icons/" target="_blank"><img class="alignnone size-full wp-image-12287" title="raphael icon" src="http://www.qianduan.net/wp-content/uploads/2010/09/raphael.png" alt="" width="489" height="344" /></a></p>
<p>嗯，这些图标都是用Raphael实现的，<a href="http://raphaeljs.com/icons/" target="_blank">点击例子页面</a>中的图标下面就会显示代码。</p>
<p><a href="http://raphaeljs.com/easing.html" target="_blank"><img class="alignnone size-full wp-image-12288" title="raphael demo" src="http://www.qianduan.net/wp-content/uploads/2010/09/raphael_demo.png" alt="" width="331" height="459" /></a></p>
<p>简单的动画效果，虽然也可以用JS+CSS3实现，但是这个可是跨浏览器的哦。。。</p>
<p>感兴趣的同学可访问<a href="http://raphaeljs.com/" target="_blank">官方网站</a>查看更多demo，以及<a href="http://raphaeljs.com/reference.html" target="_blank">参考文档</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/raphael-js-library-introduction.html/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>在IE中使用高级CSS3选择器</title>
		<link>http://www.qianduan.net/use-advanced-css3-selectors-in-ie.html</link>
		<comments>http://www.qianduan.net/use-advanced-css3-selectors-in-ie.html#comments</comments>
		<pubDate>Wed, 20 Jan 2010 11:17:31 +0000</pubDate>
		<dc:creator>神飞</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[选择器]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=11805</guid>
		<description><![CDATA[别误会，IE是不支持CSS3高级选择器，包括最新的IE8，本文我们将介绍一个简单的js方案以及一个很有用的替代方案... ]]></description>
			<content:encoded><![CDATA[<p>别误会，IE是不支持CSS3高级选择器，包括最新的IE8（详见《<a href="http://www.qianduan.net/css-browser-selector-support.html" target="_blank">CSS选择器的浏览器支持</a>》），但是CSS选择器的确是很有用的，它可以大大的简化我们的工作，提高我们的代码效率，并让我们很方便的制作高可维护性的页面。</p>
<p>然而IE对高级CSS选择器特别是CSS3选择器的支持让我们一直不能将CSS选择器推广应用。不过，虽然我们无法左右浏览器的市场份额，却可以通过一些技术改善我们的工作。我们也可以使用其它的一些技术，让IE可以变相支持CSS3选择器。</p>
<p>一位来自英国的网页开发工程师Keith Clark开发了一个JavaScript方案来使IE支持<a href="http://www.w3.org/TR/css3-selectors/" target="_blank">CSS3选择器</a>。该脚本支持从IE5到IE8的各个版本。</p>
<h3>用法</h3>
<p>你只需要下载Robert Nyman的<a href="http://www.domassistant.com/">DOMAssistant</a>脚本和<a href="/labs/ie-css3/ie-css3.zip" target="_blank">ie-css3.js</a>并将它们在你的页面的head标签中导入，如下：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;DOMAssistantCompressed-2.7.4.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;ie-css3.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span></pre></td></tr></table></div>

<h3>支持的选择器</h3>
<ul>
<li>:nth-child</li>
<li>:nth-last-child</li>
<li>:nth-of-type</li>
<li>:nth-last-of-type</li>
<li>:first-child</li>
<li>:last-child</li>
<li>:only-child</li>
<li>:first-of-type</li>
<li>:last-of-type</li>
<li>:only-of-type</li>
<li>:empty</li>
</ul>
<h3>ie-css3的一些限制</h3>
<ul>
<li>样式表必须通过&lt;link&gt;标签引入。页面级的样式表或者内联的样式表将无效。不过你可以在外部样式文件中使用@import 导入其它样式文件；</li>
<li>样式表文件必须和页面放在同一个域名下面；</li>
<li>使用file://路径的样式文件将由于浏览器的安全问题而不起作用；</li>
<li>:not()选择器尚不支持；</li>
<li>该方法不是动态的，样式被应用之后再改变DOM，将会无效。</li>
</ul>
<h3>如何工作的?</h3>
<p>ie-css3.js下载页面的每一个样式文件并解析它的CSS3伪选择器。如果一个选择器被找到，它就会被替换为同名的CSS class。比如： div:nth-child(2) 将会变成 div._iecss-nth-child-2 。然后，Robert Nyman的<a href="http://www.domassistant.com/">DOMAssistant</a>用于寻找匹配元素CSS3选择器的DOM节点然后将相应的CSS类添加给它。</p>
<p>最终，元素的样式表会被新的版本替代，然后用CSS3选择器对相应元素添加对应的样式。</p>
<h3>避免IE的CSS解释器</h3>
<p>根据W3C的规定，一个浏览器应该无视它不认识的CSS规则。这就出现一个问题——我们需要利用样式表文件中的CSS3选择器，但是IE会将它们丢弃。</p>
<p>为了避免这个问题，每一个样式文件都会通过XMLHttpRequest下载。这允许该脚本绕开浏览器内置的CSS解释器并能够读取原始的CSS文件。</p>
<ul>
<li>访问<a href="http://www.keithclark.co.uk/labs/ie-css3/" target="_blank">项目主页</a></li>
<li>下载<a href="http://www.keithclark.co.uk/labs/ie-css3/ie-css3.zip" target="_blank">ie-css3.js</a></li>
<li>下载<a href="http://www.domassistant.com/" target="_blank">DOMAssistant</a></li>
</ul>
<h2>替代方案</h2>
<p>显然这个也并非完美的方案，对于Ajax网站来说，它基本上是不能用的，因为在<strong>生成的样式表被应用之后再改变DOM，就不会有效了</strong>。但是事实上我们可以自己来自定义一个ie-css3的。只是没有它这个这么智能。</p>
<h3>使用 cssQuery</h3>
<p><a href="http://dean.edwards.name/my/cssQuery/" target="_blank">cssQuery</a>是由业界大牛Dean Edwards开发的一个Javascript组件。它就是为CSS 选择器而生的。它可以支持几乎所有的CSS 选择器，包括CSS3选择器。当然它在实现的时候进行了分级，分别针对CSS1，CSS2和CSS3制作了一个独立的js包，以及一个标准包。支持所有A级浏览器。</p>
<p>简单的用法：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> tags <span style="color: #339933;">=</span> cssQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;body &gt; p&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> tags <span style="color: #339933;">=</span> cssQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;[href]&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> tags <span style="color: #339933;">=</span> cssQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[href='#']&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>然后你就可以自己写一些js为相应的对象添加想用的样式了。</p>
<p>我建议对支持CSS高级选择器的浏览器使用原生的CSS选择器写法，然后通过cssQuery在IE中动态的为响应的元素添加一个样式名。</p>
<p>比如，我们可以这样写CSS：</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">a<span style="color: #00AA00;">&#91;</span>herf<span style="color: #00AA00;">=</span><span style="color: #ff0000;">'#'</span><span style="color: #00AA00;">&#93;</span><span style="color: #00AA00;">,</span>a<span style="color: #6666ff;">.empty</span><span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #993333;">red</span><span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>这里的第一条CSS3选择器是用于Firefox/webkit等支持CSS3选择器的非IE浏览器的，a.empty是专门为IE而写。然后通过CSSQuery动态的在IE浏览器中为对应的元素添加样式：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> tags <span style="color: #339933;">=</span> cssQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[href='#']&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tags.<span style="color: #660066;">className</span><span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;empty&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>当然，上面的这段js最好<strong>使用IE的条件注释</strong>。</p>
<h3>使用 jQuery</h3>
<p>据说<a href="http://docs.jquery.com/Selectors" target="_blank">jQuery的选择器</a>比cssQuery要快很多。当然，无可否认，jQuery的选择器是目前流行的js框架中最好用的一个。而使用jquery来实现类似上述功能要方便很多，因为jQuery的选择器更好用。</p>
<p>OK，jQuery的做法和cssQuery有些类似，CSS可以写成上面一样的，JS可以这样写：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[href='#']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;empty&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>更具体的用法可以查看我之前写的一个小例子《<a href="http://www.qianduan.net/jquery-customization-link-style.html">使用jQuery创建个性化链接样式</a>》</p>
<h3>使用 DOMAssistant</h3>
<p><a href="http://www.domassistant.com/" target="_blank">DOMAssistant</a>也是一个很不错的JS库，它提供了一些类似jQuery的功能，比如CSS 选择器、事件以及一些DOM操作。它的优点就是小巧，压缩后只有9KB，我想这就是Keith Clark选择DOMAssistant来作为ie-css3.js的基础框架的主要原因吧。jQuery越来越肥胖了，而且用于实现这个功能有些浪费了。而且DOMAssistant的用法和jQuery非常类似。</p>
<p>事实上，DOMAssistant的选择器和对DOM的CSS Class的操作与jQuery一模一样。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[href='#']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;empty&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>欲了解更多，可查看<a href="http://www.domassistant.com/" target="_blank">DOMAssistant</a>官方，以及<a href="http://www.domassistant.com/documentation/domassistant-documentation-chinese.pdf" target="_blank">下载官方中文PDF文档</a></p>
<h3>总结</h3>
<p>其实，无论是ie-css3.js本身，还是后来我们讨论的三种替代方法，都是一种方法，就是用js动态的添加class到页面元素中。不同是ie-css3自动化的完成了这些工作，而后面的三种方案要自己动手根据自己的项目写一些js来实现。我认为ie-css3最方便，基本不用怎么维护，但是它一刀切，效率比较低，而且灵活性差，不适合于ajax项目。而后面的这几种方案灵活性强，但是要做很多额外的工作，无论你是将IE专用样式独立到一个专用的css文件中还是像文中写的那样和CSS3选择器写到一起，都会大大的增加你的工作量和维护成本。</p>
<p>为IE，我们要额外付出很多。</p>
<p>有更好的想法或创意吗？欢迎与我们分享。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/use-advanced-css3-selectors-in-ie.html/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>jquery 1.4 发布</title>
		<link>http://www.qianduan.net/jquery-1-4-release.html</link>
		<comments>http://www.qianduan.net/jquery-1-4-release.html#comments</comments>
		<pubDate>Fri, 15 Jan 2010 02:18:08 +0000</pubDate>
		<dc:creator>神飞</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=11765</guid>
		<description><![CDATA[时隔一年，jquery在今天正式发布了 1.4版本。事实上，今天也是jquery发布四周年，先祝jquery生日快乐... ]]></description>
			<content:encoded><![CDATA[<p>时隔一年，jquery在今天正式发布了 1.4版本。事实上，今天也是jquery发布四周年，先祝jquery生日快乐。jquery每年周年的时候都会发布一个新的版本，比如<a href="http://www.qianduan.net/jquery-and-jquery13-release-issued-3-years.html" target="_blank">1.3版本是09年1月14号发布</a>的。<span id="more-11765"></span></p>
<p>OK，言归正传。jquery 1.4其实已经发布了两个alpha版本和一个RC版本，相信关注jquery的同学已经有所了解。</p>
<p>jquery团队为了发布1.4，专门启动了一个 <a href="http://jquery14.com" target="_blank">jquery 1.4</a>的网站，计划在14天内逐步揭开jquery1.4的神秘面纱。该网站的内容包括文章和在线视频。</p>
<p>本文就先不简述jquery 1.4带来的新的改进了，在稍后，我们将推出几篇比较好的介绍jquery 1.4的比较详细的文章，敬请期待。</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.4.min.js">jQuery Minified</a> (23kb Gzipped)</li>
<li><a href="http://code.jquery.com/jquery-1.4.js">jQuery 未压缩版</a> (154kb)</li>
<li><a href="http://api.jquery.com/category/version/1.4/"> jQuery 1.4 文档</a></li>
</ul>
<p>PS:从上面的列表可以看出，jquery1.4胖了很多，当然性能和功能肯定提升了不少。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/jquery-1-4-release.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>como js——一个国产的js框架</title>
		<link>http://www.qianduan.net/como-js-framework.html</link>
		<comments>http://www.qianduan.net/como-js-framework.html#comments</comments>
		<pubDate>Wed, 23 Dec 2009 13:21:35 +0000</pubDate>
		<dc:creator>神飞</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[框架]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=11661</guid>
		<description><![CDATA[今天 @karryZhang同学提到一个新的国产的js框架como js，我就去看了一下，觉得还不错。另外我们一直在学习和使用老外写的东西，也应该放眼国内，发现并推广一些国人开发的比较优秀的项目... ]]></description>
			<content:encoded><![CDATA[<p>今天 @<a href="http://twitter.com/karryZhang" target="_blank">karryZhang</a>同学提到一个新的国产的js框架como js，我就去看了一下，觉得还不错。另外我们一直在学习和使用老外写的东西，也应该放眼国内，发现并推广一些国人开发的比较优秀的项目。<span id="more-11661"></span></p>
<p><a href="http://comsome.com/como/" target="_blank">como js</a>是一个比较轻的js框架，但是功能还是比较强大的，实用性比较强。它有以下特性：</p>
<ul>
<li>对原生对象如String扩展常用函数</li>
<li>简约而快速的CSS选择器</li>
<li>支持类的声明与继承</li>
<li>强大的js包扩展机制，支持CSS按需加载</li>
<li>非侵入式切换调用，与第三方框架并存</li>
<li>高效、易操作的动画执行</li>
<li>支持主流浏览器</li>
</ul>
<p>当然，可能和jQuery/YUI等流行的框架相比，还有某些不足，但是任何一个事物从出现到成熟都有一个过程，我相信只要作者不断完善，Como js肯定能越来越好的。</p>
<p><a href="http://comsome.com/como/" target="_blank">官方</a> | <a href="http://comsome.com/como/Pack/Como.1.0.zip" target="_blank">下载 Como JS</a> | <a href="http://comsome.com/como/API/" target="_blank">查看API文档</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/como-js-framework.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Clearbox 3 一个很酷的仿Lightbox脚本</title>
		<link>http://www.qianduan.net/clearbox3-a-cool-lightbox-clone.html</link>
		<comments>http://www.qianduan.net/clearbox3-a-cool-lightbox-clone.html#comments</comments>
		<pubDate>Mon, 21 Dec 2009 14:52:35 +0000</pubDate>
		<dc:creator>神飞</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[clearbox]]></category>
		<category><![CDATA[Lightbox]]></category>
		<category><![CDATA[脚本]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=11626</guid>
		<description><![CDATA[LightBox是一个很酷的，也是很有用的js脚本，可以很方便的查看页面中的图片。但是自从Lightbox诞生之后，一大批的仿Lightbox的脚本就不断涌现，其中不乏优秀的完全超越Lightbox的作品，今天就向... ]]></description>
			<content:encoded><![CDATA[<p>LightBox是一个很酷的，也是很有用的js脚本，可以很方便的查看页面中的图片。但是自从Lightbox诞生之后，一大批的仿Lightbox的脚本就不断涌现，其中不乏优秀的完全超越Lightbox的作品，我们之前也收集过《<a href="http://www.qianduan.net/top-10-mootools-lightbox-plugins.html"> 10个最佳Mootools Lightbox效果脚本收集</a>》和《 <a href="http://www.qianduan.net/top-10-jquery-lightbox-scripts.html"> 10个最佳jQuery Lightbox效果插件收集</a>》今天就向大家介绍一下 clearbox 3，它在实现lightbox基本功能的同时，也有很多创新之处。</p>
<p><span id="more-11626"></span></p>
<p>Clearbox 是一个独立的脚本，不依赖其它JS库或框架。它有很多个部分组成，包括core文件，语言包，以及配置文件，但是你使用的时候只需要引入一个接口文件clearbox.js就可以了。</p>
<p><img class="alignnone size-full wp-image-11627" title="clearbox" src="http://www.qianduan.net/wp-content/uploads/2009/12/clearbox.jpg" alt="" width="500" height="425" /></p>
<h3>clearbox有以下特性：</h3>
<ul>
<li>图片自动播放；</li>
<li>图片旋转；</li>
<li>鼠标滚轮切换图片；</li>
<li>自动检测媒体格式；</li>
<li>多语言支持(目前官方尚未提供中文语言包，不过语言包设置非常简单，只需在简单配置language/目录下新加一个语言文件夹比如cn，然后将翻译好的cb_language.js文件放进去就可以。)</li>
</ul>
<h3>Clearbox支持媒体格式：</h3>
<ul>
<li>图片格式：BMP, GIF, JPG, JPEG, PNG</li>
<li>视频格式：AVI, MOV, MPG, MPEG, WMV</li>
<li>音频格式：MP3, WAV, WMA</li>
<li>Flash： SWF</li>
<li>内联内容： inner#id</li>
<li>HTML内容：通过href添加任何HTML文件</li>
<li>Iframe 内容：可以通过iframe嵌套任何页面</li>
</ul>
<p>从中可以看出，clearbox是一款很强大的Lightbox软件，它可以实现你所需要的各项功能。</p>
<p><a href="http://www.clearbox.hu/index_en.html#4" target="_blank">查看Demo</a> | <a href="http://www.clearbox.hu/download.php" target="_blank">到官方下载</a> | <a href="http://www.clearbox.hu/index_en.html#3" target="_blank">查看详细教程</a></p>
<p>但是，很少有很完美的东西，虽然clearbox很强大，现在我们越来越强调网站性能，而clearbox却调用了多个js文件，这显然会增加网站的HTTP请求数量，从而影响网站的整体性能，所以我建议在使用的时候，可以采取一些措施对其脚本进行必要的合并和压缩。</p>
<p>这里就简单介绍这么多，希望了解更多的童鞋可到<a href="http://www.clearbox.hu/" target="_blank">官方网站</a>查询，如有疑问也可以在本文的评论中交流。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/clearbox3-a-cool-lightbox-clone.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>jQuery视觉手册</title>
		<link>http://www.qianduan.net/jquery-visual-cheat-sheet.html</link>
		<comments>http://www.qianduan.net/jquery-visual-cheat-sheet.html#comments</comments>
		<pubDate>Fri, 25 Sep 2009 03:14:02 +0000</pubDate>
		<dc:creator>神飞</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[手册]]></category>
		<category><![CDATA[视觉手册]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=11353</guid>
		<description><![CDATA[jQuery视觉手册(jQuery Visual Cheat Sheet)是国外知名前端专家Woork制作的对网站设计师和开发人员都灰常有用且实用的参考手册，针对jQuery 1.3。该手册(共6页)包含了全部的附有较详细描述jQuery API参考... ]]></description>
			<content:encoded><![CDATA[<p>jQuery视觉手册(jQuery Visual Cheat Sheet)是国外知名前端专家<a href="http://woork.blogspot.com" target="_blank">Woork</a>制作的对网站设计师和开发人员都灰常有用且实用的参考手册，针对jQuery 1.3。该手册(共6页)包含了全部的附有较详细描述jQuery API参考和部分示例代码。<span id="more-11353"></span></p>
<p>手册的设计风格简洁，模块化的组织结构可以让你很方便的找到自己想要的内容。</p>
<p>预览：</p>
<p><img class="alignnone size-full wp-image-11354" title="jqueryvs" src="http://www.qianduan.net/wp-content/uploads/2009/09/jqueryvs.jpg" alt="jqueryvs" width="409" height="264" /></p>
<p>下载：</p>
<p><a href="http://www.box.net/shared/4aml1u3eia" target="_blank">从box下载</a></p>
<p>本视觉手册官方地址为 <a href="http://woorkup.com/2010/06/13/jquery-1-4-2-visual-cheat-sheet/" target="_blank">http://woorkup.com/2010/06/13/jquery-1-4-2-visual-cheat-sheet/</a> 目前由于某些众所周知的原因，暂时不能访问。另外，<strong>如果你发现上面的下载地址无法下载</strong>，请<strong>通过留言告诉我们</strong>，多谢。</p>
<p>PS:update to 1.4.2 @2010-12-20</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/jquery-visual-cheat-sheet.html/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>jQuery文字变色</title>
		<link>http://www.qianduan.net/jquery-text-color-change.html</link>
		<comments>http://www.qianduan.net/jquery-text-color-change.html#comments</comments>
		<pubDate>Fri, 14 Aug 2009 14:34:59 +0000</pubDate>
		<dc:creator>神飞</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[变色]]></category>
		<category><![CDATA[链接]]></category>

		<guid isPermaLink="false">http://www.qianduan.net/?p=11191</guid>
		<description><![CDATA[很久很久以前，前端观察发布了一篇《jQuery 链接变色》，那个链接变色比较优雅一些。今天我要给大家带来一款更酷的文字变色效果... ]]></description>
			<content:encoded><![CDATA[<p>很久很久以前，我翻译了《<a href="http://www.qianduan.net/jquery-link-color.html">jQuery 链接变色</a>》，原作者是大名鼎鼎的Mootools和jQuery高手<a href="http://davidwalsh.name" target="_blank">David Walsh</a>，那个链接变色比较优雅一些。今天我要给大家带来一款更酷的文字变色效果。</p>
<p><span id="more-11191"></span></p>
<p><a href="http://labs.qianduan.net/ajax_text_color.htm" target="_blank">看一下demo先.</a></p>
<p><a href="http://labs.qianduan.net/ajax_text_color.htm" target="_blank"><img src="http://www.qianduan.net/wp-content/uploads/2009/08/colorful.jpg" /></a></p>
<p>正如你看到的那样，当你将鼠标放到文字上去的时候，文字就会变成五颜六色的。</p>
<p>其实这种效果来自于知名开源微博<a href="http://chyrp.net/" target="_blank">chyrp</a>，它实现起来也并不难。基本原理是使用charAt()函数将文字打散并逐个设置字体颜色，当然，也要用到jquery的选择器和相关函数。</p>
<p>定义色彩数组先，这里定义了7个，当然可以定义更多。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> colors <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;#ff2e99&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#ff8a2d&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#ffe12a&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#caff2a&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#1fb5ff&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#5931ff&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#b848ff&quot;</span><span style="color: #009900;">&#93;</span></pre></div></div>

<p>核心函数:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> colorize<span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> colorized <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span>
    <span style="color: #003366; font-weight: bold;">var</span> bracket_color <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> text.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> index <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span>Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">7</span><span style="color: #009900;">&#41;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;(&quot;</span><span style="color: #009900;">&#41;</span>
            bracket_color <span style="color: #339933;">=</span> colors<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span>
            color <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>bracket_color.<span style="color: #660066;">length</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;(&quot;</span> <span style="color: #339933;">||</span> text<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> bracket_color <span style="color: #339933;">:</span> colors<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span><span style="color: #006600; font-style: italic;">//取色</span>
    		colorized <span style="color: #339933;">=</span> colorized <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;span style=&quot;color: '</span><span style="color: #339933;">+</span>color<span style="color: #339933;">+</span><span style="color: #3366CC;">' !important&quot;&gt;'</span> <span style="color: #339933;">+</span> text.<span style="color: #660066;">charAt</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/span&gt;'</span> <span style="color: #006600; font-style: italic;">//重构</span>
		<span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">return</span> colorized
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>最后，使用jquery选择器将colorize()函数应用到相关对象上：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.colorize&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;mouseenter&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;text&quot;</span><span style="color: #339933;">,</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>colorize<span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;mouseleave&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;text&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>这里使用了jquery的bind()函数绑定了两个事件：mouseenter和mouseleave，其实这样稍有些麻烦，我们可以简化一些，换做hover()：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.colorize2&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hover</span><span style="color: #009900;">&#40;</span>
	<span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;text&quot;</span><span style="color: #339933;">,</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>colorize<span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
	<span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;text&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>当然，这个效果，并不是只能用于链接，只要是内容为文字的元素，都可以使用这个效果。想必这个对一般的高手，都不难吧，大家有没有更好的方法或者在其他框架上实现？请通过评论与我们分享吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qianduan.net/jquery-text-color-change.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

