<?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>飞鱼 ^_^ 浆抱罗斯‘s blog &#187; 代码浅谈</title>
	<atom:link href="http://www.qilei.org/category/webskill/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.qilei.org</link>
	<description>这里是一个非专业交互设计师-飞鱼-的博客。飞鱼的生活就像吃一盘螺丝, 你得努力吸才能品尝到快乐^_^</description>
	<lastBuildDate>Sun, 25 Jul 2010 00:40:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>一知半解 &#8211; 分析淘宝商城首页的 lazy load 功能</title>
		<link>http://www.qilei.org/201006/lazy-load-about-mall-of-taobao-index-page/</link>
		<comments>http://www.qilei.org/201006/lazy-load-about-mall-of-taobao-index-page/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 04:35:09 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[生活琐碎]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lazy load]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=861</guid>
		<description><![CDATA[最近趁部门搬至淘宝办公。 研究了一下之前就开始注意的 ：商城首页 的lazy load 实现(也可以说是：伪异步加载)。 首先解释一下商城 的 lazy load 是怎么一回事。 我们打开商城后发现，当你拖动滚动条往下，第二屏以下的东西才慢慢加载出来。 这样做能在初次打开的时候http 请求将大幅度减少，并且页面加载速度也提高不少。 上面说的 伪异步加载 是咋一看的推测，感觉像是滚动到那里的时候 整一个ajax请求，将下面内容加载进来。 后来在不经意之间看了下源代码发现的。 看下面是商城的源码截图。 从图中可以看出，源码中有很多 textarea 的标签，里面的值就是即将要加载的html，然后就恍然大悟，原来所谓异步加载也可以这样来实现。 分析实现流程 首先是将要加载的html代码 丢进textarea 里，因为此时html 在 textarea 是一直val形式，不会被浏览器解析渲染，所以页面在刚加载的时候只显示第一屏。然后通过计算滚动条的相对偏移(数学问题)，将textarea的val 值添加到html 的dom里 ，因为浏览器是即时解析的，新添加的dom 会被重新渲染，这样新加的html 就显示出来了。这个就是所谓的lazy load ：伪异步加载。 为什么要用textarea ? 其实这个东西估计是 因为html 标签的限制，这个方法的设计之初，设计师想将 硕大的html数据 缓存在一个不会被解析标签里，然后就发现textarea 刚好符合期望。 为什么不用ajax ? 因为数据不需要验证，不是时变性的数据，再者使用ajax 会增加http请求，并且维护性不好。 目前淘宝的 TMS 后台系统 都是模版化引擎，使用ajax 会对 模版化 [...]]]></description>
			<content:encoded><![CDATA[<p>最近趁部门搬至淘宝办公。<br />
研究了一下之前就开始注意的 ：<strong>商城首页</strong> 的lazy load 实现(也可以说是：伪异步加载)。<br />
首先解释一下商城 的 lazy load 是怎么一回事。<br />
我们打开商城后发现，当你拖动滚动条往下，第二屏以下的东西才慢慢加载出来。<br />
这样做能在初次打开的时候http 请求将大幅度减少，并且页面加载速度也提高不少。</p>
<p>上面说的 伪异步加载 是咋一看的推测，感觉像是滚动到那里的时候 整一个ajax请求，将下面内容加载进来。<br />
<em>后来在不经意之间看了下源代码发现的。</em><br />
看下面是商城的源码截图。<br />
<img src="http://www.qilei.org/wp-content/uploads/2010/06/20100630_1.png" alt="" title="20100630_1" width="600" height="250" class="alignnone size-full wp-image-862" /><br />
从图中可以看出，源码中有很多 textarea 的标签，里面的值就是即将要加载的html，然后就恍然大悟，原来所谓异步加载也可以这样来实现。</p>
<h3>分析实现流程</h3>
<p>首先是将要加载的html代码 丢进textarea 里，因为此时html 在 textarea 是一直val形式，不会被浏览器解析渲染，所以页面在刚加载的时候只显示第一屏。然后通过计算滚动条的相对偏移(数学问题)，将textarea的val 值添加到html 的dom里 ，因为浏览器是即时解析的，新添加的dom 会被重新渲染，这样新加的html 就显示出来了。这个就是所谓的lazy load ：伪异步加载。<span id="more-861"></span></p>
<h3>为什么要用textarea ? </h3>
<p>其实这个东西估计是 因为html 标签的限制，这个方法的设计之初，设计师想将 硕大的html数据 缓存在一个不会被解析标签里，然后就发现textarea 刚好符合期望。</p>
<h3>为什么不用ajax ?</h3>
<p>因为数据不需要验证，不是时变性的数据，再者使用ajax 会增加http请求，并且维护性不好。<br />
目前淘宝的 TMS 后台系统 都是模版化引擎，使用ajax 会对 模版化 引擎 产生冲突 以及 维护成本高等。</p>
<h3>如何实现？</h3>
<p>从实现流程来讲，这个功能实现起来没什么难度，唯一有难度的是，怎样把这个功能做成一个通用的模块，简易添加 class 以及配置就可以实现等来提高重用特性。</p>
<h3>有合弊端</h3>
<p>优点那么多，缺点又怎样呢·？<br />
SEO：存在textarea 里的数据 能不能被 搜索引擎抓取呢？ 这个我最近在自己blog里研究一下。<br />
web标准： 这样的做符合web标准么？将html代码放在textarea来实现 <em>飞鱼：只是一个标准而已。</em></p>
<p>好了 打完收工~~~</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://www.qilei.org/200910/cross-scripting/" title="js跨域问题">js跨域问题</a></li><li><a href="http://www.qilei.org/200910/javascript-judge-if-chinese/" title="判断输入的字符是否为中文">判断输入的字符是否为中文</a></li><li><a href="http://www.qilei.org/200907/jquery-navbar/" title="乱翻乱教- jQuery 制作N级导航菜单">乱翻乱教- jQuery 制作N级导航菜单</a></li><li><a href="http://www.qilei.org/200906/fastest-way-to-build-an-html-string/" title="乱翻乱教-使用JS输出HTML串最快的方法">乱翻乱教-使用JS输出HTML串最快的方法</a></li><li><a href="http://www.qilei.org/200903/jquery-for-tab-change-effect/" title="菜鸟级: 标签切换效果 &#8211; JQuery实现">菜鸟级: 标签切换效果 &#8211; JQuery实现</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.qilei.org/201006/lazy-load-about-mall-of-taobao-index-page/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Coding 的那些银荡事 &#8211; Notpade++插件WebEdit使用心得</title>
		<link>http://www.qilei.org/201005/notpade-webedit-tip/</link>
		<comments>http://www.qilei.org/201005/notpade-webedit-tip/#comments</comments>
		<pubDate>Sun, 30 May 2010 14:57:36 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[notpadd++]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=815</guid>
		<description><![CDATA[最近有朋友说Dreamweaver cs5很 银荡，我竟然无动于衷，因为我的电脑是上个世纪的，所以无福消受啦， 上周回学校工作室瞄了一下，发现咱们的新人都在普及notepad++，很是激动啊··· notepad++ 果然是个短小精干的东西啊，我目前工作75%的时间都是面对着这个。所以感情还是非常深的。 废话少说： 今天我就分享一下我用NP(notepad++)的一些插件吧。，可以提高coding 的一些细节。 WebEdit，是NP 上的一个代码辅助插件，里面包含了一些html常用的标签，来辅助html代码。你可以在它的插件库里找到 通过这个插件以及设置快捷键，可以有效的提高coding效率。 如下图打开插件配置文件。 那么我稍微解释一下，如下面的代码，第一个等号前是“宏”(类似word里的宏) 的名字，后面是代码，“&#124;”是代码完成后的光标位置。 Div &#38;Class=&#60;div&#62;&#124;&#60;/div&#62; 下面[Toolbar] 是 在工具栏上显示的一些快捷按钮。(明显有很多是多余的，可以手动删除掉一些) 8=h4.bmp 可以看到，这里面有很多常用的标签自动完成，但是发现有一些是没有的(如：img br 等)，也有些是多余的，如h4，h5 因为用的比较少。那么我们尝试着去掉没用的快捷按钮，然后新建一些标签。 我新建了如下的宏：还是挺实用的。最后行是等号的自动完成，发现等号加引号输入比较麻烦^_^ Br=&#60;br /&#62;&#124; Class= class="&#124;" Id= id="&#124;" Img=&#60;img src="&#124;" alt="" /&#62; O=="&#124;" 添加完后不要忘了保存 ，然后重新打开NP就生效了。 然后是设置快捷键。 点击设置 &#8211; 管理快捷键 &#8211; Plugin commands 下拉 就可以看到 WebEdit 的快捷键设置区。 我设置的快捷键如下，用Alt 加快捷键比较银荡，按起来也比较顺。 A -------------- Alt+Q [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-817" title="20100526" src="http://www.qilei.org/wp-content/uploads/2010/05/20100526.jpg" alt="" width="500" height="320" /><br />
最近有朋友说Dreamweaver cs5很 银荡，我竟然无动于衷，因为我的电脑是上个世纪的，所以无福消受啦，<br />
上周回学校工作室瞄了一下，发现咱们的新人都在普及notepad++，很是激动啊···<br />
notepad++ 果然是个短小精干的东西啊，我目前工作75%的时间都是面对着这个。所以感情还是非常深的。<br />
废话少说：<br />
今天我就分享一下我用NP(notepad++)的一些插件吧。，可以提高coding 的一些细节。<br />
WebEdit，是NP 上的一个代码辅助插件，里面包含了一些html常用的标签，来辅助html代码。<em>你可以在它的插件库里找到</em> 通过这个插件以及设置快捷键，可以有效的提高coding效率。<span id="more-815"></span><br />
如下图打开插件配置文件。<br />
<img class="alignnone size-full wp-image-818" title="20100526-np-1" src="http://www.qilei.org/wp-content/uploads/2010/05/20100526-np-1.png" alt="" width="499" height="228" /><br />
那么我稍微解释一下，如下面的代码，第一个等号前是“宏”(<em>类似word里的宏</em>) 的名字，后面是代码，“|”是代码完成后的光标位置。</p>
<pre><code>Div &amp;Class=&lt;div&gt;|&lt;/div&gt;
</code></pre>
<p>下面[Toolbar] 是 在工具栏上显示的一些快捷按钮。(<em>明显有很多是多余的，可以手动删除掉一些</em>)</p>
<pre><code>8=h4.bmp
</code></pre>
<p>可以看到，这里面有很多常用的标签自动完成，但是发现有一些是没有的(如：img br 等)，也有些是多余的，如h4，h5 因为用的比较少。那么我们尝试着去掉没用的快捷按钮，然后新建一些标签。<br />
我新建了如下的宏：还是挺实用的。<em>最后行是等号的自动完成，发现等号加引号输入比较麻烦^_^</em></p>
<pre><code>Br=&lt;br /&gt;|
Class= class="|"
Id= id="|"
Img=&lt;img src="|" alt="" /&gt;
O=="|"
</code></pre>
<p><em>添加完后不要忘了保存 ，然后重新打开NP就生效了。</em></p>
<p>然后是设置快捷键。<br />
点击设置 &#8211; 管理快捷键 &#8211; Plugin commands<br />
下拉 就可以看到 WebEdit 的快捷键设置区。<br />
我设置的快捷键如下，用Alt 加快捷键比较银荡，按起来也比较顺。</p>
<pre><code>A -------------- Alt+Q
Div Class ------- Alt+A
Strong --------- Alt+B
Br ------------- Alt+Enter
Class ---------- Alt+S
Id ------------- Alt+D
Img -----------  Alt+W
O(等号) ------------- Alt+=
</code></pre>
<p>好了，这个插件的分享就到此为止了，下次分享一下其他插件。····</p>
<p>PS：顺便分享个快捷键 Ctrl + D 复制当前行，这个快捷键某些时候非常实用</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣 - 随意</h2><ul class="related_post"><li><a href="http://www.qilei.org/200808/the-css-hack/" title="区别不同浏览器，CSS hack写法">区别不同浏览器，CSS hack写法</a></li><li><a href="http://www.qilei.org/200807/when-money-gone/" title="钞票滚滚向东">钞票滚滚向东</a></li><li><a href="http://www.qilei.org/200805/faststone-capture/" title="截图小强FastStone Capture v6.2 汉化版">截图小强FastStone Capture v6.2 汉化版</a></li><li><a href="http://www.qilei.org/200801/%e4%b8%8d%e8%89%b2%e4%b8%8d%e8%ae%a1/" title="不色不计">不色不计</a></li><li><a href="http://www.qilei.org/200805/the-zoom-in-engine-of-firefox-1/" title="探索 firefox 的放大原理 (一)">探索 firefox 的放大原理 (一)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.qilei.org/201005/notpade-webedit-tip/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>从淘宝透露出的那些设计细节</title>
		<link>http://www.qilei.org/201005/thinking-about-taobao-surface-design/</link>
		<comments>http://www.qilei.org/201005/thinking-about-taobao-surface-design/#comments</comments>
		<pubDate>Sat, 22 May 2010 14:33:28 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[改版]]></category>
		<category><![CDATA[淘宝]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=809</guid>
		<description><![CDATA[一直都对淘宝的一系列改版非常之感兴趣，没有其他的想法，就是觉得 淘宝的设计从某些角度来讲，带领着国内网站的一种设计风格。 最近 商城改版将版面 该的彻底，虽说第一版让人很蛋疼，因为的确变化很大，并且让人感觉有一种很山寨的相貌。但是淘宝的更新效率总是非常快，没过几天，华丽的商城慢慢的凸显出来了。原本单调的红色，变得非常有层次感，搜索框也凸显出来，搜索按钮的橘黄色在红色的背景中显得更加华丽。同样作为交互设计师的我看到这个作品，不禁自愧不如啊 嘎嘎~~~ 还有好多路要走啊。 从这次的改版发现淘宝开始走视觉体验路线了，从原来满足用户功能，到后来满足用户需求，再到满足用户功能体验的，到现在开始走用户视觉体验的路线。 不过想想也是100多号的人难免会迸发出一些强大的灵感。 当然这么推荐是有理由的，当淘宝的产品以及用户群达到如此大的量的时候，一定会进化出一些高质量的产品，以及一些高质量的用户群，为了满足这些用户群，商城便诞生。 再放一张 名鞋馆的截图，也相当有感觉的。 最后再唠叨一句：淘宝首页又将 导航给放出来了，之前的那种 太前卫的多平面设计拿下来，看来一是用户吃不消这样的表现形式啊，现在的表现形式好些了，但是似乎用色少了好多，应该是为了节省流量吧，毕竟淘宝首页是个流量大头。 您可能还对这些日志感兴趣丫 越来越年轻 &#8211; 阿里巴巴2010新版首页有一种美叫洁白&#8211; iriver改版好久大步向前走-YOHO改版]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.qilei.org/wp-content/uploads/2010/05/20100522.jpg" alt="" title="20100522" width="500" height="236" class="alignnone size-full wp-image-810" /><br />
一直都对淘宝的一系列改版非常之感兴趣，没有其他的想法，就是觉得 淘宝的设计从某些角度来讲，带领着国内网站的一种设计风格。<br />
最近 商城改版将版面 该的彻底，虽说第一版让人很蛋疼，因为的确变化很大，并且让人感觉有一种很山寨的相貌。但是淘宝的更新效率总是非常快，没过几天，华丽的商城慢慢的凸显出来了。原本单调的红色，变得非常有层次感，搜索框也凸显出来，搜索按钮的橘黄色在红色的背景中显得更加华丽。同样作为交互设计师的我看到这个作品，不禁自愧不如啊 嘎嘎~~~  还有好多路要走啊。</p>
<p>从这次的改版发现淘宝开始走视觉体验路线了，从原来满足用户功能，到后来满足用户需求，再到满足用户功能体验的，到现在开始走用户视觉体验的路线。<br />
不过想想也是100多号的人难免会迸发出一些强大的灵感。</p>
<p>当然这么推荐是有理由的，当淘宝的产品以及用户群达到如此大的量的时候，一定会进化出一些高质量的产品，以及一些高质量的用户群，为了满足这些用户群，商城便诞生。</p>
<p>再放一张 名鞋馆的截图，也相当有感觉的。<br />
<img src="http://www.qilei.org/wp-content/uploads/2010/05/100522.jpg" alt="" title="100522" width="500" height="291" class="alignnone size-full wp-image-812" /><br />
<span id="more-809"></span></p>
<p>最后再唠叨一句：淘宝首页又将 导航给放出来了，之前的那种 太前卫的多平面设计拿下来，看来一是用户吃不消这样的表现形式啊，现在的表现形式好些了，但是似乎用色少了好多，应该是为了节省流量吧，毕竟淘宝首页是个流量大头。<br />
<img src="http://www.qilei.org/wp-content/uploads/2010/05/20100522_1.jpg" alt="" title="20100522_1" width="500" height="257" class="alignnone size-full wp-image-811" /></p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://www.qilei.org/201001/new-design-about-alibaba-home-page-2010/" title="丫 越来越年轻 &#8211; 阿里巴巴2010新版首页">丫 越来越年轻 &#8211; 阿里巴巴2010新版首页</a></li><li><a href="http://www.qilei.org/200811/beautiful-white-in-iriver-com/" title="有一种美叫洁白&#8211; iriver改版好久">有一种美叫洁白&#8211; iriver改版好久</a></li><li><a href="http://www.qilei.org/200810/new-index-about-yoho/" title="大步向前走-YOHO改版">大步向前走-YOHO改版</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.qilei.org/201005/thinking-about-taobao-surface-design/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>系统级应用项目中的函数命名冲突问题</title>
		<link>http://www.qilei.org/201005/how-to-make-the-func-name-no-clrash/</link>
		<comments>http://www.qilei.org/201005/how-to-make-the-func-name-no-clrash/#comments</comments>
		<pubDate>Mon, 03 May 2010 02:54:35 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=783</guid>
		<description><![CDATA[函数命名冲突问题，相信很多人碰到过。 作为一个刚做js 不久的 小虾米来说，我也没有太多发言权。 但可喜的是最近做的一个系统级的应用项目中碰到了这个问题。 之前在老系统里看到很多程序员参与进来各种小需求，也带进来了好多大大小小的函数，导致某些页面的函数命名很是多样化。 对于如何避免命名冲突问题，自然很多开发都选择了加长函数名称这条无奈但是又死板又实用的方法，如getTranslateTargetIntro,看到这样的名称就是蛋疼。但是结果让其他中途进来的开发前端等蛋很疼~~~，并且到处都是全局变量，冲突得让人想死。 =，= 原因在哪里~~~~? 因为它历史悠久~~~，当初设计这个系统的时候，架构师没想到它以后会成为一个庞大的系统，也不曾想过以后还有那么多蛋疼的前端会加入进来，更没想过，页面上的交互会越变越多，只是单纯的想解决燃眉之急的一个小交互。 于是乎，很多规则，命名方式，功能架构都没有一个清晰的解释型的图表出来。 得扯远了··· 唠叨了一下，^_^ 对于一个新的系统，命名冲突问题如何解决？ 我就单单说说我最近做的这个系统中关于js 部分的函数命名的一个方法吧。 先看一下如下图： 智商高的童鞋相信看了这图就知道啥意思，这个东东可是我哥写了那么多js以及 OOP思想的一些结晶，我觉得很强大，至少我这么觉得，因为很好用。飞鱼端了端眼睛：看不懂的话，继续往下看^_^ 首先是减少全局参量 全局这个东西 应该是越少越好，就像jquery 用个美元$号一样（虽然经常被其他js 库抢），所以如果要让一个系统有一个简洁的js 系统架构，最好给它起个全局变量，这样的好处是，你的系统只占一个全局变量(当然jquery等$是必须的，因为你得依赖它)。这样从命名上就避开了全局变量冲突的问题。 让你的js 系统函数 都分组升级成类 然后根据系统的功能的类型 进行划分，比如web中系统应用，无外乎 layout 初始化，然后是Effect效果，然后是通用模块，等等。这样做的好处是当你有需求要添加什么功能的时候就可以对症下药，而不会出现要加什么功能就往系统里的js 部分最下方添加，导致页面上的js 代码 像狗皮膏药一样，那样会让你的代码很没有深度以及层次(此句话，很有深度，借用我哥的话) 可能上面说的全局变量，功能分类说了懂了，但不知道咋实现。这一步开始将它实体化。 新建一个js文件my.js，写入如下面的代码: var My = {} 然后给你的系统添加一个启动函数，就像机器的开关一样，我们将其命名为run()多么直观^_^ var My = { run: function() { //just do something.... alert('你好，死猪！') } }; [...]]]></description>
			<content:encoded><![CDATA[<p>函数命名冲突问题，相信很多人碰到过。<br />
作为一个刚做js 不久的 小虾米来说，我也没有太多发言权。<br />
但可喜的是最近做的一个系统级的应用项目中碰到了这个问题。<br />
之前在老系统里看到很多程序员参与进来各种小需求，也带进来了好多大大小小的函数，导致某些页面的函数命名很是多样化。<br />
对于如何避免命名冲突问题，自然很多开发都选择了<strong>加长函数名称</strong>这条无奈但是又死板又实用的方法，如getTranslateTargetIntro,<em>看到这样的名称就是蛋疼</em>。但是结果让其他中途进来的开发前端等<strong>蛋很疼~~~</strong>，并且到处都是全局变量，冲突得让人想死。 =，=</p>
<h4>原因在哪里~~~~?</h4>
<p>因为它历史悠久~~~，当初设计这个系统的时候，架构师没想到它以后会成为一个庞大的系统，也不曾想过以后还有那么多蛋疼的前端会加入进来，更没想过，页面上的交互会越变越多，只是单纯的想解决燃眉之急的一个小交互。<br />
于是乎，很多规则，命名方式，功能架构都没有一个清晰的解释型的图表出来。</p>
<p>得扯远了··· 唠叨了一下，^_^</p>
<h4>对于一个新的系统，命名冲突问题如何解决？</h4>
<p>我就单单说说我最近做的这个系统中关于js 部分的函数命名的一个方法吧。<br />
先看一下如下图：<br />
<img src="http://www.qilei.org/wp-content/uploads/2010/05/100502.png" alt="" title="100502" width="500" height="181" class="alignnone size-full wp-image-785" /><br />
智商高的童鞋相信看了这图就知道啥意思，这个东东可是我哥写了那么多js以及 OOP思想的一些结晶，我觉得很强大，至少我这么觉得，因为很好用。<em>飞鱼端了端眼睛：看不懂的话，继续往下看^_^</em><span id="more-783"></span></p>
<p><strong>首先是减少全局参量</strong><br />
全局这个东西 应该是越少越好，就像jquery 用个美元$号一样（<em>虽然经常被其他js 库抢</em>），所以如果要让一个系统有一个简洁的js 系统架构，最好给它起个全局变量，这样的好处是，你的系统只占一个全局变量(当然jquery等$是必须的，因为你得依赖它)。这样从命名上就避开了全局变量冲突的问题。</p>
<p><strong>让你的js 系统函数 都分组升级成类</strong><br />
然后根据系统的功能的类型 进行划分，比如web中系统应用，无外乎 layout 初始化，然后是Effect效果，然后是通用模块，等等。这样做的好处是当你有需求要添加什么功能的时候就可以对症下药，而不会出现要加什么功能就往系统里的js 部分最下方添加，导致页面上的js 代码 像狗皮膏药一样，那样会让你的代码很没有深度以及层次(<em>此句话，很有深度，借用我哥的话</em>)<br />
可能上面说的全局变量，功能分类说了懂了，但不知道咋实现。这一步开始将它实体化。<br />
新建一个js文件my.js，写入如下面的代码:</p>
<pre><code>var My = {}
</code></pre>
<p>然后给你的系统添加一个启动函数，就像机器的开关一样，我们将其命名为run()<em>多么直观^_^</em></p>
<pre><code>var My = {
    run: function() {
         //just do something....
         alert('你好，死猪！')
    }
};</code></pre>
<p>上面的代码其实就是一个类，和它的一个方法，完全的OOP 思想。<br />
那么怎么启动它呢，很简单在它的下面加个动作来开动它。就是标准的jquery 语法。</p>
<pre><code>$(function() {
    My.run();
});</code></pre>
<p>这样我们的系统就起来了。<br />
<strong>然后我们给系统增加一些功能，先从layout模块 来。</strong><br />
My 类下添加一个新的子类 My.Layout。</p>
<pre><code>var My = {
    run: function() {
         //just do something....
         alert('你好，死猪！');
         My.Layout.run();
    }
};
My.Layout = {
    run: function() {
         alert('您又便秘啦？');
    }
};</code></pre>
<p>这里有个小技巧就是<strong>子类命名方式是首字母大写，用2个英文单词构成，来提高识别度</strong>。<br />
看起来，这样来访问My.Layout.run(); 这个方法还是挺长，但是它用点号分隔开，让其命名方式变成了三维。而不是MyLayoutrun()这样的一维命名方式。这样层次一目了然。让我们再增加一个子类，就会了解这其中的奥秘了。</p>
<pre><code>var My = {
    run: function() {
         //just do something....
         alert('你好，死猪！');
         My.Layout.run();
         My.Panel.run();
    }
};
My.Layout = {
    run: function() {
         alert('您又便秘啦？');
    }
};
My.Panel = {
    run: function() {
         alert('死了算了=，=');
    }
};</code></pre>
<p>这个感觉就像是一台机器一样，显示我打开的开关，机器开始启动，初始化了一些初始操作触发了显示模块，然后再做通用模块的操作。 一切都是有秩序的在执行着。<em>很有感觉吧？^_^ 继续</em></p>
<pre><code>var My = {
    run: function() {
         this.root = {};
         this.root.head = $('#head');
         this.root.main = $('#main');
         var root= this.root;
         My.Layout.run(root);
         My.Panel.run(root);
    }
};
My.Layout = {
    run: function(root) {
         this.root = root;
         thit._init_resize()
    },
    _init_resize: function() {
         alert('您又便秘啦？' + this.root.main.text());
    }
};
My.Panel = {
    run: function() {
         alert('死了算了=，=');
    }
};</code></pre>
<p><strong>这一步是亮点</strong>，我将一些需要全局用到的对象打包成一个root之类，然后带入到每个其他子类中，这样就可以访问到这些对象，而不需要另外再申明，(<em>我不知道这样子做能够节省内存开销，还是会浪费，但感觉应该是前者</em>)<br />
这样子的写法，让整个js 系统被一些关系连接在一起，但是又很容易切开，(比如：注释掉My.Panel.run(root) 就能关闭整个Panel 功能，就像一个一个小插件一样)。</p>
<p>扯得优点离题了，其实也不离题啦，这样子写本来就很难产生命名冲突，并且命名规则可以很有秩序，并且不会出现非常长的纠结的名称。</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://www.qilei.org/201004/jquery-pad/" title="走马观花 &#8211; jQuery调试工具- jQuery pad">走马观花 &#8211; jQuery调试工具- jQuery pad</a></li><li><a href="http://www.qilei.org/201003/using-trigger-bind-function-in-jquery-2/" title="隔山打牛 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (二)">隔山打牛 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (二)</a></li><li><a href="http://www.qilei.org/201003/using-trigger-bind-function-in-jquery/" title="老汉推车 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (一)">老汉推车 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (一)</a></li><li><a href="http://www.qilei.org/200909/jquery-fade-picture/" title="乱翻乱教 &#8211; jQuery图片轮播插件 &#8211; 菜鸟版">乱翻乱教 &#8211; jQuery图片轮播插件 &#8211; 菜鸟版</a></li><li><a href="http://www.qilei.org/200907/jquery-menu-plugin/" title="乱翻乱教- jQuery 制作N级导航菜单 &#8211; 插件版">乱翻乱教- jQuery 制作N级导航菜单 &#8211; 插件版</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.qilei.org/201005/how-to-make-the-func-name-no-clrash/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>伸缩自如 &#8211; 绝对定位的自适应能力</title>
		<link>http://www.qilei.org/201005/css-about-absolute-layout-fix/</link>
		<comments>http://www.qilei.org/201005/css-about-absolute-layout-fix/#comments</comments>
		<pubDate>Sat, 01 May 2010 14:30:21 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=781</guid>
		<description><![CDATA[掐指一算发现差不多一个月没写文章了，那个真是天理不荣啊。~~ 4月份都在折腾。但总算折腾点好玩的东西出来。 8过还是个技术文章，惭愧惭愧，最近都没时间整图了。 前端时间，研究了一下google wave的一些小交互，发现的这么个好玩的东西， 之前写CSS 的时候 很少这么写 absolute 属性， 平常 我们写一个div 浮层的绝对定位 的时候，一般都只写倆属性，top 和left ，因为这样已经足够。 .target{ position:absolute; top:10px; left:10px; } 然后我却发现wave 里的外层布局 div配了 4个 .target{ position:absolute; top:10px; left:10px; bottom:10px; right:10px; } 然后像发现新大陆一样去尝试了一下，果然如描述的一样，是一个自适应的div 绝对定位，效果杠杠的。 经过尝试 就是IE6 这个万恶的版本 不吃，其他都吃。 然后再给上面加点属性类似 min-height 就能实现类试软件界面一样的自适应效果。 当然同样IE6 也是不吃的。可以用js 来弥补。 有空我放个demo 上来。 ^_^ 就这样了， 发篇文章通知一下飞鱼还活着。 您可能还对这些日志感兴趣发现 图片上的map的链接 不能是target=&#8221;_blank&#8221; DivCSS经验：三种实用CSS清除浮动的方法异变: input的背景background怨念体 &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>掐指一算发现差不多一个月没写文章了，那个真是天理不荣啊。~~<br />
4月份都在折腾。但总算折腾点好玩的东西出来。<br />
8过还是个技术文章，惭愧惭愧，最近都没时间整图了。<br />
前端时间，研究了一下google wave的一些小交互，发现的这么个好玩的东西，<br />
之前写CSS 的时候 很少这么写 absolute 属性，<br />
平常 我们写一个div 浮层的绝对定位 的时候，一般都只写倆属性，top 和left ，因为这样已经足够。</p>
<pre><code>.target{
    position:absolute; top:10px; left:10px;
}
</code></pre>
<p>然后我却发现wave 里的外层布局 div配了 4个 </p>
<pre><code>.target{
    position:absolute; top:10px; left:10px; bottom:10px; right:10px;
}
</code></pre>
<p>然后像发现新大陆一样去尝试了一下，果然如描述的一样，是一个自适应的div 绝对定位，效果杠杠的。<br />
经过尝试 就是IE6 这个万恶的版本 不吃，其他都吃。<br />
然后再给上面加点属性类似 min-height 就能实现类试软件界面一样的自适应效果。<br />
当然同样IE6 也是不吃的。可以用js 来弥补。<br />
有空我放个demo 上来。<br />
^_^</p>
<p><em>就这样了， 发篇文章通知一下飞鱼还活着。</em></p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://www.qilei.org/200911/map-on-img-can-not-target-_blank/" title="发现 图片上的map的链接 不能是target=&#8221;_blank&#8221; ">发现 图片上的map的链接 不能是target=&#8221;_blank&#8221; </a></li><li><a href="http://www.qilei.org/200910/clear-float/" title="DivCSS经验：三种实用CSS清除浮动的方法">DivCSS经验：三种实用CSS清除浮动的方法</a></li><li><a href="http://www.qilei.org/200906/input-background-of-css/" title="异变: input的背景background">异变: input的背景background</a></li><li><a href="http://www.qilei.org/200903/line-height-in-def-browser-of-def-font/" title="怨念体 &#8211; 不同的字体有不同的line-height">怨念体 &#8211; 不同的字体有不同的line-height</a></li><li><a href="http://www.qilei.org/200902/suspire-of-the-notice/" title="此学校在退化">此学校在退化</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.qilei.org/201005/css-about-absolute-layout-fix/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>隔山打牛 &#8211; jQuery中 trigger() &amp; bind() 使用心得 (二)</title>
		<link>http://www.qilei.org/201003/using-trigger-bind-function-in-jquery-2/</link>
		<comments>http://www.qilei.org/201003/using-trigger-bind-function-in-jquery-2/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 17:49:44 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=764</guid>
		<description><![CDATA[上一篇说的trigger()触发事件的解释，因为写着写着 发现有点长，所以就拆成2篇，多牛逼~~~ 咩哈哈·~~ 这篇我介绍一下 trigger() &#038; bind() 配合使用 的 隔山打牛招式，真的是隔山打牛，不是观音坐莲，表想歪。=，= bind() 绑定事件 if 你看过jquery里bind 绑定事件的解释，那基本不用看这篇文章了。 return false else go on 称为绑定事件，字面意思应该是 绑定在其他事件上的事件。 $(function() { var div = $("#mybutton"); //你的按钮。 div.click(function(e,text) { var text = text &#124;&#124; '你是猪啊，~让你点，你就点？'; alert(text); }); div.bind('click', function() { alert("兄弟，没事不要乱点; "); }); }); 上面的代码就是给div的click事件绑定了一个事件。猜猜看哪个先执行？ 当按钮被点击的时候，先执行完click事件后，再执行绑定的事件。 bind() 绑定 自定义事件 说绑定自定义事件的时候先说一下 什么是自定义事件？ trigger()方法是用来触发一些事件型方法，如： div.trigger('click', [...]]]></description>
			<content:encoded><![CDATA[<p>上一篇说的trigger()触发事件的解释，因为写着写着 发现有点长，所以就拆成2篇，多牛逼~~~ 咩哈哈·~~<br />
这篇我介绍一下 trigger() &#038; bind() 配合使用 的 <strong>隔山打牛</strong>招式，<em>真的是隔山打牛，不是观音坐莲，表想歪。=，=</em></p>
<h3>bind() 绑定事件 </h3>
<p>if 你看过jquery里bind 绑定事件的解释，那基本不用看这篇文章了。 return false<br />
else go on</p>
<p>称为绑定事件，字面意思应该是 绑定在其他事件上的事件。</p>
<pre><code>$(function() {
	var div = $("#mybutton"); //你的按钮。
	div.click(function(e,text) {
		var text = text || '你是猪啊，~让你点，你就点？';
		alert(text);
	});

        div.bind('click', function() {
            alert("兄弟，没事不要乱点; ");
        });
});
</code></pre>
<p>上面的代码就是给div的click事件绑定了一个事件。<em>猜猜看哪个先执行？</em><br />
当按钮被点击的时候，先执行完click事件后，再执行绑定的事件。</p>
<h3>bind() 绑定 自定义事件 </h3>
<p>说绑定自定义事件的时候先说一下 <em>什么是自定义事件？</em><br />
trigger()方法是用来触发一些事件型方法，如：</p>
<pre><code>div.trigger('click', [text]);</code></pre>
<p>上面的click 是不是一定要规定的 click，focus等事件型方法嘞？答案是可以触发任何事件。如：</p>
<pre><code>div.trigger('my_action', [text]);</code></pre>
<p>你可以尝试一下，发现firebug 没有报错，说明没有问题，只是这个my_action 事件什么都没做而已。<em>为什么不报错，这个我还在研究，谁知道的告诉我 -，-</em><br />
从这一点看trigger 方法一定是在找 my_action 事件。突然有个idea，既然bind 是绑定事件，既然 my_action 事件什么事情都没做，那我就给它bind 绑定个事件上去不就可以了。于是乎····竟然可以~~<br />
<span id="more-764"></span></p>
<pre><code>$(function() {
	var div = $("#mybutton"); //你的按钮。
	div.bind('my_action', function(e, text) {
            var text = text || ' oh yah, 观 音 坐 莲';
            alert(text);
        });
	div.trigger('my_action');
}); </code></pre>
<h3>隔山打牛 </h3>
<p>那么何为隔山打牛呢？<br />
听我慢慢银荡过来~~~<br />
比如我们有两个盒子，希望点击按钮让  第二个盒子显示第一个盒子里的内容。<br />
平常我们会这样写：</p>
<pre><code>$(function() {
	var div = $("#mybutton"); //你的按钮。
	var box1= $("#mybox1");
	var box2= $("#mybox2");
	div.click(function() {
             var text = box2.val();
             box1.val(text);
        });
}); </code></pre>
<p>利用bind 和 trigger 我们可以这样写。</p>
<pre><code>$(function() {
	var div = $("#mybutton"); //你的按钮。
	var box1= $("#mybox1");
	var box2= $("#mybox2");

	div.bind('my_action', function(e, text) {
             var text = box1.val();
             box2.val(text);
        });

	div.click(function() {
	    $(this).trigger('my_action');
        });

}); </code></pre>
<p>这样写的好处，在以后会慢慢体现，比如你想双击的时候也想 有这样的动作的时候 ：只需要在后面加：</p>
<pre><code>	div.dblclick(function() {
	    $(this).trigger('my_action');
        });</code></pre>
<p>甚至你想在点击后想把第一个盒子消失，只需要在后面再加上</p>
<pre><code>	div.bind('my_action', function(e, text) {
             box1.hide();
        });</code></pre>
<p>这样的好处是，当click事件要处理的事情变多的时候，能将处理的事情进行分类，让代码更加有层次。而不是臃肿的click function。<br />
更神奇的是这样写 bind 事件甚至可以分开存在不同的js 文件 在需要的时候调用，让它变成一个组件形式。<br />
是不是有一种隔山打牛的感觉？</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://www.qilei.org/201005/how-to-make-the-func-name-no-clrash/" title="系统级应用项目中的函数命名冲突问题">系统级应用项目中的函数命名冲突问题</a></li><li><a href="http://www.qilei.org/201004/jquery-pad/" title="走马观花 &#8211; jQuery调试工具- jQuery pad">走马观花 &#8211; jQuery调试工具- jQuery pad</a></li><li><a href="http://www.qilei.org/201003/using-trigger-bind-function-in-jquery/" title="老汉推车 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (一)">老汉推车 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (一)</a></li><li><a href="http://www.qilei.org/200909/jquery-fade-picture/" title="乱翻乱教 &#8211; jQuery图片轮播插件 &#8211; 菜鸟版">乱翻乱教 &#8211; jQuery图片轮播插件 &#8211; 菜鸟版</a></li><li><a href="http://www.qilei.org/200907/jquery-menu-plugin/" title="乱翻乱教- jQuery 制作N级导航菜单 &#8211; 插件版">乱翻乱教- jQuery 制作N级导航菜单 &#8211; 插件版</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.qilei.org/201003/using-trigger-bind-function-in-jquery-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>老汉推车 &#8211; jQuery中 trigger() &amp; bind() 使用心得 (一)</title>
		<link>http://www.qilei.org/201003/using-trigger-bind-function-in-jquery/</link>
		<comments>http://www.qilei.org/201003/using-trigger-bind-function-in-jquery/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 16:03:07 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[trigger]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=760</guid>
		<description><![CDATA[年前一个项目做下来，全程js 交互写了我半辈子的js代码，重构了N便~~ 不过做项目这东西很锻炼人，强迫你去接触一些没有接触过的东西，收获还是蛮大的。其中收获最大的还是对jQuery 的全新认识了，之前接触jquery一直都是表现类的，如show，hide，hover，等方法，这次项目，接触了许多事件类代码。 trigger() 触发事件 这个方法是jQuery 1.3中新增的一个引起触发事件的函数。具体解释可以去这里下载 最新的jquery 手册查一下，里面解释的很清楚，就是字有点多。 如果你比较懒那么我稍微解释一下这个东东。我也是挂羊头卖狗肉 =，= 触发事件就是 类似于点击click, mouseover, keydown 等有动作的js事件，简单的说就是一个动作，可能有人会问，那show, hide 是不是? 不是，show 这 效果，手册里刚打开的速查页面里的事件类目就是上面所说的触发事件 说了这么多，还没切到主题，=，=我就这样 ，容易跑题，大伙看习惯了就好。 为什么要用 trigger() ？ 比如：你给一个按钮添加了一个click点击事件，弹出提示框，代码如下。 var div = $("#mybutton"); //你的按钮。 div.click(function() { alert('你是猪啊，~让你点，你就点？'); }); 上面的代码就是一个按钮的click事件。这个时候你有个非分的要求，就是希望页面刷新的时候就点一下这个按钮。如果不用trigger()你可以在后面这样写： div.click(); 如果用trigger()，你就要写成这样：效果跟上面这句是一样，就是稍微长点。 div.trigger("click"); 然后有人说：你是猪啊·~~ 上面这个短一点，你还教我用下面这个 =，= 表急着揍我么~· 继续往下看。 你用手册 里的索引搜一下click 可以看到 两条 结果 click() 和，click(fn)，然后 搜一下trigger 发现只有一个 [...]]]></description>
			<content:encoded><![CDATA[<p>     年前一个项目做下来，全程js 交互写了我半辈子的js代码，重构了N便~~ 不过做项目这东西很锻炼人，强迫你去接触一些没有接触过的东西，收获还是蛮大的。其中收获最大的还是对jQuery 的全新认识了，之前接触jquery一直都是表现类的，如show，hide，hover，等方法，这次项目，接触了许多事件类代码。</p>
<h3>trigger() 触发事件 </h3>
<p>    这个方法是jQuery 1.3中新增的一个引起触发事件的函数。具体解释可以去<a target="_blank" href="http://code.google.com/p/jquery-api-zh-cn/downloads/list">这里下载</a> 最新的jquery 手册查一下，里面解释的很清楚，就是字有点多。<br />
    <em>如果你比较懒那么我稍微解释一下这个东东。我也是挂羊头卖狗肉 =，=</em><br />
触发事件就是 类似于点击click, mouseover, keydown 等有动作的js事件，简单的说就是一个动作，可能有人会问，那show, hide 是不是? 不是，show 这 效果，<em>手册里刚打开的速查页面里的事件类目就是上面所说的触发事件</em><br />
    说了这么多，还没切到主题，=，=我就这样 ，容易跑题，大伙看习惯了就好。</p>
<h3>为什么要用 trigger() ？</h3>
<p>    比如：你给一个按钮添加了一个click点击事件，弹出提示框，代码如下。</p>
<pre><code>var div = $("#mybutton"); //你的按钮。
div.click(function() {
    alert('你是猪啊，~让你点，你就点？');
});
</code></pre>
<p>上面的代码就是一个按钮的click事件。这个时候你有个非分的要求，就是希望页面刷新的时候就点一下这个按钮。如果不用trigger()你可以在后面这样写：</p>
<pre><code>div.click();</code></pre>
<p>如果用trigger()，你就要写成这样：效果跟上面这句是一样，就是稍微长点。</p>
<pre><code>div.trigger("click");</code></pre>
<p>然后有人说：你是猪啊·~~ 上面这个短一点，你还教我用下面这个 =，=<br />
表急着揍我么~· 继续往下看。<br />
<span id="more-760"></span><br />
你用手册 里的索引搜一下click 可以看到 两条 结果 <strong>click()</strong> 和，<strong>click(fn)</strong>，然后 搜一下trigger 发现只有一个 trigger(type, [data]) 。<br />
然后你知道我的意思了吧。&#8212; trigger 可以传参数进去。<br />
我们看看 手册里的trigger 例子：</p>
<pre><code>$("p").click( function (event, a, b) {
  // 一个普通的点击事件时，a和b是undefined类型
  // 如果用下面的语句触发，那么a指向"foo",而b指向"bar"
} ).trigger("click", ["foo", "bar"]);</code></pre>
<p>了解了吧？如果用click 的话，它不吃参数，用trigger的话，就能吃了。<br />
练习一下吧：黏贴到你的页面上试试看，记得把jquery载进来。</p>
<pre><code>$(function() {
	var div = $("#mybutton"); //你的按钮。
	div.click(function(e,text) {
		var text = text || '你是猪啊，~让你点，你就点？';
		alert(text);
	});
	div.trigger("click","您好，请点击按钮");
});
</code></pre>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://www.qilei.org/201005/how-to-make-the-func-name-no-clrash/" title="系统级应用项目中的函数命名冲突问题">系统级应用项目中的函数命名冲突问题</a></li><li><a href="http://www.qilei.org/201004/jquery-pad/" title="走马观花 &#8211; jQuery调试工具- jQuery pad">走马观花 &#8211; jQuery调试工具- jQuery pad</a></li><li><a href="http://www.qilei.org/201003/using-trigger-bind-function-in-jquery-2/" title="隔山打牛 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (二)">隔山打牛 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (二)</a></li><li><a href="http://www.qilei.org/200909/jquery-fade-picture/" title="乱翻乱教 &#8211; jQuery图片轮播插件 &#8211; 菜鸟版">乱翻乱教 &#8211; jQuery图片轮播插件 &#8211; 菜鸟版</a></li><li><a href="http://www.qilei.org/200907/jquery-menu-plugin/" title="乱翻乱教- jQuery 制作N级导航菜单 &#8211; 插件版">乱翻乱教- jQuery 制作N级导航菜单 &#8211; 插件版</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.qilei.org/201003/using-trigger-bind-function-in-jquery/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>邪恶的JS懒人</title>
		<link>http://www.qilei.org/200907/simple-code-of-js/</link>
		<comments>http://www.qilei.org/200907/simple-code-of-js/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 14:55:26 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[代码浅谈]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=521</guid>
		<description><![CDATA[上面的是一只狗狗 &#8211; 长得像浣熊 昨天看了james的一篇关于“pretty date”的文章，这片文章纠结了我一个晚上，后来在我哥的帮助下，顺利吃下这代码。 代码如下： var niceTime = (function() { var ints = { second: 1, minute: 60, hour: 3600, day: 86400, week: 604800, month: 2592000, year: 31536000 }; return function(time) { time = +new Date(time); var gap = ((+new Date()) - time) / 1000, amount, measure; for (var i in ints) { if [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="http://pic.yupoo.com/2-fish/069307c7f640/medium.jpg" alt="" width="500" height="353" /><em>上面的是一只狗狗 &#8211; 长得像浣熊</em></p>
<p>昨天看了<a href="http://james.padolsey.com/" target="_blank">james</a>的一篇关于“<a href="http://james.padolsey.com/javascript/recursive-pretty-date/" target="_blank">pretty date</a>”的文章，这片文章纠结了我一个晚上，后来在我哥的帮助下，顺利吃下这代码。<br />
<span id="more-521"></span><br />
代码如下：</p>
<pre><code>var niceTime = (function() {

    var ints = {
        second: 1,
        minute: 60,
        hour: 3600,
        day: 86400,
        week: 604800,
        month: 2592000,
        year: 31536000
    };

    return function(time) {

        time = +new Date(time);

        var gap = ((+new Date()) - time) / 1000,
            amount, measure;

        for (var i in ints) {
            if (gap &gt; ints[i]) { measure = i; }
        }

        amount = gap / ints[measure];
        amount = gap &gt; ints.day ? (Math.round(amount * 100) / 100) : Math.round(amount);
        amount += ' ' + measure + (amount &gt; 1 ? 's' : '') + ' ago';

        return amount;
    };

})();</code></pre>
<p>额，我稍微解释一下(<em>懂英文的可以去原文看^_^</em>)，这代码主要是将时间格式转换成 相距当前时间多少时间的一个函数。<br />
用法如下：<em>应该不用解释到底什么用吧？看了就知道</em></p>
<pre><code>niceTime( 1 );     // =&gt; "39.57 years ago"
niceTime( "Sun Mar 01 20:20:02 +0000 2009" );// =&gt; "4.65 months ago"
niceTime( "July 19, 2009 12:06:00" );     // =&gt; "26 seconds ago"</code></pre>
<p>代码写得非常帅气，又邪恶。其中我就是卡在了下面这跳代码上了···</p>
<pre><code> time = +new Date(time);</code></pre>
<p>这条代码纠结了· 我一个晚上···，一开始怎么也想不通怎么会有这样的写法，后来我哥帮看了下，茅厕顿开···</p>
<p>上面的代码 完整写法如下···· <em>看了都想跳楼</em>··</p>
<pre><code> time = 0 + new Date(time);</code></pre>
<p>这下懂了吧·？= =，其实只是 少了个 0 还有 个空格··· 还以为“+new” 是什么新语法呢。<br />
这段代码是作用是把 时间变量time 的 数据从 &#8220;July 19, 2009 12:06:00&#8243; 转换成 毫秒(<em>跟php里的date函数不一样，php里的是 秒数，不是 毫秒</em>)</p>
<p><em>8月21日更新<br />
=============================<br />
后来发现  +new Date(time) 是个 <a href="http://www.w3school.com.cn/js/as_js_operators_unary.asp">一元加法</a>的一种用法，受益匪浅。^__^</em></p>
<p>好了，今天就到这了···</p>
<p>好好学习，天天放假</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣 - 随意</h2><ul class="related_post"><li><a href="http://www.qilei.org/200806/the-kung-fu-panda/" title="看看外国人拍的中国文化&#8211;让中国导演惭愧的强">看看外国人拍的中国文化&#8211;让中国导演惭愧的强</a></li><li><a href="http://www.qilei.org/201003/photoshop-made-an-cute-chick/" title="乱翻乱教 – 小鸡快跑 &#8211;  Photoshop 超级可爱小鸡">乱翻乱教 – 小鸡快跑 &#8211;  Photoshop 超级可爱小鸡</a></li><li><a href="http://www.qilei.org/200810/the-sports-meeting-subject-in-redhome-1/" title="从一个专题入手(一)-产品设计师">从一个专题入手(一)-产品设计师</a></li><li><a href="http://www.qilei.org/200812/think-of-the-next-d2/" title="明年更坚挺 &#8211; D2 要来杭州">明年更坚挺 &#8211; D2 要来杭州</a></li><li><a href="http://www.qilei.org/200805/opencanvas-450/" title="openCanvas 4.5.0">openCanvas 4.5.0</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.qilei.org/200907/simple-code-of-js/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>乱翻乱教- jQuery 制作N级导航菜单 &#8211; 插件版</title>
		<link>http://www.qilei.org/200907/jquery-menu-plugin/</link>
		<comments>http://www.qilei.org/200907/jquery-menu-plugin/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 09:32:00 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[乱翻乱教]]></category>
		<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=516</guid>
		<description><![CDATA[前几天做的jQuery实现N级导航菜单，实现起来超级简单，但是如果要将效果更丰富化的话，可能就不止这么点代码了。 于是乎，向笨笨先生(我哥)讨教了几番，得出了这么一个jquery menu 插件。代码依然很简单，稍微复杂点，可以在按钮放上去的时候触发一个动画效果，离开也可以触发一个动画效果，还添加了延迟释放效果(鼠标移开后有个缓冲，再消失) 代码如下： (function($) { //N级导航插件 $.fn.menu = function(options) { options = $.extend({ delay: false }, options); this.find('li:has(ul)').hover( function() { var t = $(this); t.data('hide_menu', false); t.find('>ul').css('display', 'block'); // 可以换成动画效果 }, function() { var t = $(this); t.data('hide_menu', true); var hide_menu = function() { if (t.data('hide_menu')) { t.find('>ul').css('display', 'none'); // 可以换成动画效果 } }; [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="http://pic.yupoo.com/2-fish/991487bb8013/medium.jpg" alt="" width="500" height="375" /><br />
前几天做的<a href="http://www.qilei.org/200907/jquery-navbar/">jQuery实现N级导航菜单</a>，实现起来超级简单，但是如果要将效果更丰富化的话，可能就不止这么点代码了。</p>
<p>于是乎，向笨笨先生(我哥)讨教了几番，得出了这么一个jquery menu 插件。代码依然很简单，稍微复杂点，可以在按钮放上去的时候触发一个动画效果，离开也可以触发一个动画效果，还添加了延迟释放效果(<em>鼠标移开后有个缓冲，再消失</em>)</p>
<p><strong>代码如下：</strong><span id="more-516"></span></p>
<pre><code>(function($) { //N级导航插件
  $.fn.menu = function(options) {
    options = $.extend({
      delay: false
    }, options);

    this.find('li:has(ul)').hover(
      function() {
        var t = $(this);
        t.data('hide_menu', false);
        t.find('>ul').css('display', 'block'); // 可以换成动画效果
      },

      function() {
        var t = $(this);
        t.data('hide_menu', true);
        var hide_menu = function() {
          if (t.data('hide_menu')) {
            t.find('>ul').css('display', 'none'); // 可以换成动画效果
          }
        };
        options.delay ? setTimeout(hide_menu, options.delay)
            : hide_menu();
      }
    );
  };
})(jQuery);</code></pre>
<p>代码非常简练，可以根据实际需求增加其他效果。<br />
使用方法如下：</p>
<pre><code>
jQuery(function($) {  //调用插件
  //$('.menu').menu() //默认调用语法;
  $('.menu').menu({delay: 500}); //延迟500ms释放
})</code></pre>
<p>PS：<a target="_blank" href="http://code.qilei.org/jquery/jquery_menu.html">演示地址</a></p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://www.qilei.org/201005/how-to-make-the-func-name-no-clrash/" title="系统级应用项目中的函数命名冲突问题">系统级应用项目中的函数命名冲突问题</a></li><li><a href="http://www.qilei.org/201004/jquery-pad/" title="走马观花 &#8211; jQuery调试工具- jQuery pad">走马观花 &#8211; jQuery调试工具- jQuery pad</a></li><li><a href="http://www.qilei.org/201003/using-trigger-bind-function-in-jquery-2/" title="隔山打牛 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (二)">隔山打牛 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (二)</a></li><li><a href="http://www.qilei.org/201003/using-trigger-bind-function-in-jquery/" title="老汉推车 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (一)">老汉推车 &#8211; jQuery中 trigger() &#038; bind() 使用心得 (一)</a></li><li><a href="http://www.qilei.org/200909/jquery-fade-picture/" title="乱翻乱教 &#8211; jQuery图片轮播插件 &#8211; 菜鸟版">乱翻乱教 &#8211; jQuery图片轮播插件 &#8211; 菜鸟版</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.qilei.org/200907/jquery-menu-plugin/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>乱翻乱教- jQuery 制作N级导航菜单</title>
		<link>http://www.qilei.org/200907/jquery-navbar/</link>
		<comments>http://www.qilei.org/200907/jquery-navbar/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 05:09:52 +0000</pubDate>
		<dc:creator>飞鱼</dc:creator>
				<category><![CDATA[乱翻乱教]]></category>
		<category><![CDATA[代码浅谈]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.qilei.org/?p=503</guid>
		<description><![CDATA[突然发现将近一个月没写东东了(拜托就是一个月好伐)。飞鱼：额，最近在做月子= = jQuery 制作仿DNF首页导航菜单效果 作者：飞鱼原创 飞鱼: 偶然发现这个东东很实用，就手把手写了个。 DNF首页的那只导航，似乎纯手写的。我这次要写的是用jquery来制作，制作代码非常极其简单，看了就知道怎么做(老鸟可以绕过哈，谁让咱们都是菜鸟 = =) 最终效果图 支持N级导航(添加子导航无需另外添加代码)。 html代码 首先当然是html啦，代码如下，没有什么技术含量， &#60;div class="menu" &#62; &#60;ul&#62; &#60;li&#62; &#60;a href="#"&#62;游戏介绍&#60;/a&#62; &#60;ul&#62; &#60;li&#62;&#60;a href="#"&#62;升级体验&#60;/a&#62;&#60;/li&#62; &#60;li class="sub"&#62; &#60;a href="#"&#62;游戏2&#60;/a&#62; &#60;ul&#62; &#60;li&#62;&#60;a href="#"&#62;天赋系统&#60;/a&#62;&#60;/li&#62; &#60;li&#62;&#60;a href="#"&#62;升级体验&#60;/a&#62;&#60;/li&#62; &#60;/ul&#62; &#60;/li&#62; &#60;li&#62;&#60;a href="#"&#62;故事背景&#60;/a&#62;&#60;/li&#62; &#60;li&#62;&#60;a href="#"&#62;职业介绍&#60;/a&#62;&#60;/li&#62; &#60;/ul&#62; &#60;/li&#62; &#60;li&#62;&#60;a href="#"&#62;天赋系统&#60;/a&#62;&#60;/li&#62; &#60;/ul&#62; &#60;/div&#62; css代码 因为是仿dnf官方首页导航，所以样式也多少参考了一下它的样式，(图片我也给扣过来了 嘎嘎) .menu{ height:27px; float:left; background:#1d1d1d url(http://ossweb-img.qq.com/images/dnf/web200812/box_bg1.gif) repeat; border:2px [...]]]></description>
			<content:encoded><![CDATA[<p>突然发现将近一个月没写东东了(拜托就是一个月好伐)。<em>飞鱼：额，最近在做月子= =</em><br />
<img class="janblus-preview" src="http://pic.yupoo.com/2-fish/2499881ffc9b/thumb.jpg" alt="jQuery 制作仿DNF首页导航菜单效果" width="100" height="100" /></p>
<h2>jQuery 制作仿DNF首页导航菜单效果</h2>
<p>作者：飞鱼原创<br />
<em>飞鱼: 偶然发现这个东东很实用，就手把手写了个。</em><br />
<a href="http://dnf.qq.com/" target="_blank">DNF首页</a>的那只导航，似乎纯手写的。我这次要写的是用jquery来制作，制作代码非常极其简单，看了就知道怎么做(老鸟可以绕过哈，谁让咱们都是菜鸟 = =)</p>
<h3>最终效果图</h3>
<p>支持N级导航(<em>添加子导航无需另外添加代码</em>)。<br />
<img class="alignnone" src="http://pic.yupoo.com/2-fish/988277bb9406/medium.jpg" alt="" width="500" height="230" /><br />
<span id="more-503"></span></p>
<h3>html代码</h3>
<p>首先当然是html啦，代码如下，没有什么技术含量，</p>
<pre><code>&lt;div class="menu" &gt;
    &lt;ul&gt;
      &lt;li&gt;
        &lt;a href="#"&gt;游戏介绍&lt;/a&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href="#"&gt;升级体验&lt;/a&gt;&lt;/li&gt;
          &lt;li class="sub"&gt;
            &lt;a href="#"&gt;游戏2&lt;/a&gt;
            &lt;ul&gt;
              &lt;li&gt;&lt;a href="#"&gt;天赋系统&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;&lt;a href="#"&gt;升级体验&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href="#"&gt;故事背景&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="#"&gt;职业介绍&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;天赋系统&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;</code></pre>
<h3>css代码</h3>
<p>因为是仿dnf官方首页导航，所以样式也多少参考了一下它的样式，(<em>图片我也给扣过来了 嘎嘎</em>)</p>
<pre><code>.menu{
  height:27px;
  float:left;
  background:#1d1d1d url(http://ossweb-img.qq.com/images/dnf/web200812/box_bg1.gif) repeat;
  border:2px solid #000;
}
.menu ul{
    border:1px solid #3f3f37;
    height:25px;
    float:left;
}
.menu li{
  float:left;
  position:relative;
  text-align:center;
  width:70px;
  background:url(http://ossweb-img.qq.com/images/dnf/web200812/img.gif) no-repeat -480px 9px;
}
.menu li .sub{
  background:url(http://ossweb-img.qq.com/images/dnf/web200812/img.gif) no-repeat -420px 9px;
}
.menu li a{
  color:#b29056;
  display:block;
  height:25px;
  line-height:25px;
}
  .menu li a:hover{
    color:#fff;
    text-decoration:none;
  }
  .menu li ul{
    position:absolute;
    top:25px;
    left:-1px;
    display:none;
    width:68px;
    height:auto;
    float:none;
    border-bottom:none;
    background:#1d1d1d url(http://ossweb-img.qq.com/images/dnf/web200812/box_bg1.gif) repeat;
  }
  .menu li ul a{
    display:block;
    height:25px;
    line-height:25px;
  }
    .menu li ul a:hover{
      background:#070707 url(http://ossweb-img.qq.com/images/dnf/web200812/r_linkbg.gif) repeat;
    }
  .menu li ul li{
    position:relative;
    width:68px;
    border-bottom:1px solid #3f3f37;
    background:none;
  }
  .menu li li ul{
    position:absolute;
    top:-1px;
    left:68px;
  }</code></pre>
<h3>js代码</h3>
<p>这个代码，可以说是相当滴简单，只用了一只语法(.hover)。<br />
说明一下代码的用处细节：(菜鸟专用，老鸟请跨过去 = =)</p>
<pre><code>$(document).ready(function(){
  $('.menu li').hover(  //给menu 下的所有li 添加 hover 动作
    function () {   //鼠标在li 上时让 li 下的ul 显示出来
      $(this).children('ul:first').css('display', 'block');
    },
    function () {  //鼠标在离开li 上时让 li 下的ul 隐藏掉
      $(this).children('ul:first').css('display', 'none');
    }
  );
});</code></pre>
<p>上面代码中我用:first 来只取第一个来提高效率(不知道我这样做对不对，感觉上应该是对的 &#8211; -)。</p>
<p>PS：代码演示，因为最近用的都不是自个儿的电脑，FTP上不去，就委曲下自己 尝试一下呢，效果还是不错的。</p>
<p>PS2：可以在这基础上增加其他功能：<em>比如鼠标离开后，过半秒中导航才消失</em>，这个需要用到setTimeout 函数来解决。有空我写个。^_^</p>
<h2  class="related_post_title">您可能还对这些日志感兴趣</h2><ul class="related_post"><li><a href="http://www.qilei.org/200903/jquery-for-tab-change-effect/" title="菜鸟级: 标签切换效果 &#8211; JQuery实现">菜鸟级: 标签切换效果 &#8211; JQuery实现</a></li><li><a href="http://www.qilei.org/200903/jquery-extend-scroll/" title="滚动新闻 &#8211; jquery 扩展插件">滚动新闻 &#8211; jquery 扩展插件</a></li><li><a href="http://www.qilei.org/201006/lazy-load-about-mall-of-taobao-index-page/" title="一知半解 &#8211; 分析淘宝商城首页的 lazy load 功能">一知半解 &#8211; 分析淘宝商城首页的 lazy load 功能</a></li><li><a href="http://www.qilei.org/201005/how-to-make-the-func-name-no-clrash/" title="系统级应用项目中的函数命名冲突问题">系统级应用项目中的函数命名冲突问题</a></li><li><a href="http://www.qilei.org/201004/jquery-pad/" title="走马观花 &#8211; jQuery调试工具- jQuery pad">走马观花 &#8211; jQuery调试工具- jQuery pad</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.qilei.org/200907/jquery-navbar/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
