<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>既是安安</title><link>http://www.jsann.com/</link><description>蝴蝶飞不过沧海，谁忍心责怪？</description><generator>RainbowSoft Studio Z-Blog 1.8 Walle Build 100427</generator><language>zh-CN</language><copyright>Powered By Z-Blog. CopyRight &amp;amp;copy; 2010-2011 JSANN.COM. Some Rights Reserved Jsann.var _bdhmProtocol = ((&amp;quot;https:&amp;quot; == document.location.protocol) ? &amp;quot; https://&amp;quot; : &amp;quot; http://&amp;quot;);document.write(unescape(&amp;quot;%3Cscript src='&amp;quot; + _bdhmProtocol + &amp;quot;hm.baidu.com/h.js%3F39e398e4d6ce138e6414c6353b2f8a12' type='text/javascript'%3E%3C/script%3E&amp;quot;));&amp;amp;nbsp;[Administrator Login]&amp;amp;nbsp;闽ICP备10017263号</copyright><pubDate>Sat, 18 Feb 2012 21:22:44 +0800</pubDate><item><title>Web设计精确点滴</title><author>zenwink@gmail.com (季氏安安)</author><link>http://www.jsann.com/post/web_design_precise_drip.html</link><pubDate>Wed, 15 Feb 2012 14:39:28 +0800</pubDate><guid>http://www.jsann.com/post/web_design_precise_drip.html</guid><description><![CDATA[<div>1)调整后的毛边<br />当对一个位图的大小进行调整后，正常情况下会留下1px的毛边（如果你注意的话），边界会变得模糊，如果继续调整模糊度会加大，这个问题太不起眼了，以至于你无法用肉眼来理绘，我们先用商品图片举例子：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459491468.jpg" /></div><div>也许单张小图还不够显注，下面对比一个列表图和大图，当然了除非你故意想要这种效果。</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459490386.jpg" /></div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459508181.jpg" /></div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459503347.jpg" /></div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459505381.jpg" /></div><div>放大2倍后对比</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459504264.jpg" /></div><div>放大2倍后对比</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459512261.jpg" /></div><div>另外不要试者调整带有边框的图片，最好是自己绘制，这个面两张对比图不用放大就能全面看到问题:</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459513545.jpg" /></div><div>2)关于边框和背景<br />有些区块需要用边框装饰点缀得醒目一点,有文字区块图片区块等,文字区块加边框的建议使用同基色的背景色填充区块,不然内容会很空洞，图片加边框的话,如果是CSS定义的边框最好是加上间隔距离,因为图片不是固定的,所以可能会出现底色与边框不协调,严重的会造成毛边效果，下面用几个例子来说一下：</div><div>文字边框背景：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459518716.jpg" /></div><div>因为区块加了边框后背景与边框之外的背景颜色相同，所以感觉空洞，所以最好是区块加上背景，而且背景色与边框最好是同一个基色。</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459511348.jpg" /></div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459518322.jpg" /></div><div>白色背景下，背景不要比边框太深，再努力的调整区块内容的颜色能与背景融合也于事无补，边框成了毛边。</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459518527.jpg" /></div><div>在深色背景下，才使用加亮边框。</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459527771.jpg" /></div><div>关于图片边框，图片本身就有背景，而且色彩是多样的，在给图片加边框时也最好是与图片背景同一个基色的背景，而且最好是取与图片最边上的色彩的深基色，如果是边上有多种颜色，取最多的那颜色，例：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459526663.jpg" /></div><div>如果边框是用CSS定义的，而且是图列，比喻说是产品列表，而列表中的产品类别和背景色都不一致，就会出现边框与背景同色或不协调的情况，例如：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459527024.jpg" /></div><p>上图中间一排图片边框的色彩就不协调了，如果在图片是不确定的情况下，加边框时最好是给图片与边框之间加上边框距。</p><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459538641.jpg" /></div><div>在看看在深色背景下的效果，深色背景下可以有两种方案，一是去掉外框，以白色间距边框，二是加亮外框，留出与背景相同颜色的间距。如下图：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459533660.jpg" /></div><div>3)关于边距与对齐<br />设计师寻找灵感时，偶尔会随意、自由的拖拉摆放区块、填色、绘制等，直到满意才会停下，在这个过程中会出现有与&ldquo;经验&rdquo;挂钩的细小漏洞，例如：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459546835.jpg" /></div><div>下图表面看上去没问题,细看之下有点小别扭,放大后就可以看清楚了,导航文字偏高,搜索框与导航没有对齐,搜索框中Button图标距离也有问题。<div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459544152.jpg" /></div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459541585.jpg" /></div><div>调整之后如下图：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459548161.jpg" /></div><div>在看下面的例子：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459543083.jpg" /></div><div>上图中区块上下间距与左右间距不匀称，和前几的列子一样，文字与区块上下垂直间距不协调，下图是修正后的结果。</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459547160.jpg" /></div><div>在来看一组给图片加框的效果：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459553502.jpg" /></div><div>在来看图列间距：<br />下面这个列图看似没问题，其实有两个细节问题（其中一个应该算是用户体验的问题）。首先第一列与第二列的间距要比第二列与第三列的距离要小2px，对于这个问题，有人会说这个间距用CSS定义就统一了，不会存在差异！注意了，我们讨论的是视觉设计，不能把这个问题丢给前端，否则你后面丢过去的更多（相信我），其次纵间距太小排的过于紧密。</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459556510.jpg" /></div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459556637.jpg" /></div><div>调整过后如下图:</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459551248.jpg" /></div><div>4)关于阴影与质感：<br />在设计点缀版面时需要有深度和3D质感的时候，可能就会用到投影、阴影、光线感等效果。但web设计和平面广告不同，太强、太硬的质感只会让页面显得粗糙，web页面是个很细致的活，还是那句话，这里只说细节，先看图：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459564764.jpg" /></div><div>阴影要小一点、颜色要浅一点,另外这里面其实还有一个问题，和前面讲的边框一样，如果图片是的投影颜色与图片颜色（或背景颜色）相同，效果会很尴尬，所以要边框一样给图片加一个间隔距离：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459565156.jpg" /></div><div>理论上讲，将一个没有质感的元素进行投影或加阴影是不现实的！前面讲的一些阴影效果，元素本身没有任何质感。看下面的例子：</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459574044.jpg" /></div><div>上图Button和价格区块的投影没有质量,修改后如下图:</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459574407.jpg" /></div><div>其实阴影和质感是随网站整体风格相关联的,某种情况下还不如不加上去。</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459584553.jpg" /></div><div>关于深色背景下的质感，阴影和投影是不现实的，所以只能用发光或光线质感来实现。</div><div style="text-align: center"><img alt="webdesign" src="http://www.jsann.com/upload/201202151459583857.jpg" /></div></div><div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 5px; margin: 5px 10px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 5px"><div style="float: left"><a style="text-decoration: none" title="[既是安安]博客" target="_blank" href="http://www.jsann.com/"><img style="border-bottom: #ddd 1px solid; border-left: #ddd 1px solid; padding-bottom: 3px; padding-left: 3px; padding-right: 3px; border-top: #ddd 1px solid; border-right: #ddd 1px solid; padding-top: 3px" alt="head" src="http://www.jsann.com/image/gravatar/jsann_36.jpg" /></a></div><div style="float: left; margin-left: 5px"><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">本文作者：<a title="季氏安安 [既是安安]博客" target="_blank" href="http://www.jsann.com/">季氏安安</a>（<a title="[既是安安]博客" target="_blank" href="http://www.jsann.com/">[既是安安]博客</a>采用 <a rev="nofollow" rel="nofollow" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">BY-NC-SA</a> 协议进行授权. 转载请保留此链接，谢谢。）</p><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">原文链接：<a title="原文链接：http://www.jsann.com/post/web_design_precise_drip.html" target="_blank" href="http://www.jsann.com/post/web_design_precise_drip.html">http://www.jsann.com/post/web_design_precise_drip.html</a></p></div><div style="line-height: 0; width: 0px; float: none; height: 0px; clear: both; font-size: 0px; overflow: hidden">&nbsp;</div></div><p>CopyRight © 2010 <a href="http://www.jsann.com/" title="[既是安安]博客">JSANN.COM</a> .Some Rights Reserved <a href="mailto://jsann@jsann.com">JSAnn</a>.</p><p><a href="http://www.jsann.com/post/web_design_precise_drip.html" target="_blank">继续阅读《Web设计精确点滴》的全文内容...</a></p><p>分类: <a href="http://www.jsann.com/catalog.asp?cate=6">既是视觉</a> | Tags: <a href="http://www.jsann.com/catalog.asp?tags=%E8%A7%86%E8%A7%89">视觉</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E8%AE%BE%E8%AE%A1">设计</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E7%B2%BE%E7%A1%AE">精确</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E7%BB%86%E8%8A%82">细节</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E8%B4%A8%E6%84%9F">质感</a>&nbsp;&nbsp; | <a href="http://www.jsann.com/post/web_design_precise_drip.html#comment" target="_blank">添加评论</a>(0)</p><h3>相关文章:</h3><ul><li><a href="http://www.jsann.com/post/UI_design_you_need_to_ask_a_few_questions.html">UI设计你需要自问的几个问题</a> (2010-11-14 15:5:18)  </li><li><a href="http://www.jsann.com/post/overview_of_the_use_of_color.html">颜色运用概述</a> (2010-11-9 20:6:2)  </li><li><a href="http://www.jsann.com/post/emotional_user_interface.html">情感化界面</a> (2010-10-28 11:25:5)  </li><li><a href="http://www.jsann.com/post/how-to-get-a-professional-look-with-color.html">用色彩打造专业的视觉效果</a> (2010-10-26 10:0:16)  </li><li><a href="http://www.jsann.com/post/Hello_button-a_small_button_in_web_design.html">你好，button——小谈网页设计的按钮</a> (2010-9-20 14:55:36)  </li></ul>]]></description><category>既是视觉</category><comments>http://www.jsann.com/post/web_design_precise_drip.html#comment</comments><wfw:comment>http://www.jsann.com/</wfw:comment><wfw:commentRss>http://www.jsann.com/feed.asp?cmt=113</wfw:commentRss><trackback:ping>http://www.jsann.com/cmd.asp?act=tb&amp;id=113&amp;key=c024f454</trackback:ping></item><item><title>最短的IE判断</title><author>zenwink@gmail.com (季氏安安)</author><link>http://www.jsann.com/post/IE_to_determine_the_shortest.html</link><pubDate>Wed, 14 Dec 2011 22:47:50 +0800</pubDate><guid>http://www.jsann.com/post/IE_to_determine_the_shortest.html</guid><description><![CDATA[<p><span style="font-family: 'Courier New'; ">在写原生的Javascript的时候，因为IE的JS引擎与标准浏览器的JS引擎之间总有那么些差异，所以经常会去判断是否是IE浏览器，记得在网上Down的很多源码用的最多的一种方式就是：</span></p><div class="HighLighter" contenteditable="false"><div contenteditable="false" class="dp-highlighter"><div class="bar">&nbsp;</div><ol start="1" class="dp-c">    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;ie&nbsp;=&nbsp;document.all();</span></span></li></ol></div><div contenteditable="false" class="javascript" style="display:none"><pre>var ie = document.all();</pre></div><div contenteditable="false"><link href="http://jsann.com/admin/FCKeditor/editor/plugins/highlighter/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css" type="text/css" rel="stylesheet" /></div></div><p><span style="font-family: 'Courier New'; ">这是因为IE浏览器的document下有all方法，而所谓的标准浏览器却没有，所以很长的一段时间，这个是一种非常普遍的方法。</span></p><p><span style="font-family: 'Courier New'; ">在之后大家开始追求起简短，就像在这之后一度流行的一种方法：</span></p><div class="HighLighter" contenteditable="false"><div contenteditable="false" class="dp-highlighter"><div class="bar">&nbsp;</div><ol start="1" class="dp-c">    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;ie&nbsp;=&nbsp;!&nbsp;+&nbsp;</span><span class="string">&quot;\v1&quot;</span><span>;</span></span></li></ol></div><div contenteditable="false" class="javascript" style="display:none"><pre>var ie = ! + &quot;\v1&quot;;</pre></div><div contenteditable="false"><link href="http://jsann.com/admin/FCKeditor/editor/plugins/highlighter/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css" type="text/css" rel="stylesheet" /></div></div><p><span style="font-family: 'Courier New'; ">这个是利用IE不支持垂直制表符的特性而判别的，仅仅7个字符已经很让人震惊了，可是这个记录被一个俄国人在今年早些的时候打破了，人家只需要6个字符就可以搞定了。</span></p><p><span style="font-family: 'Courier New'; ">我们暂且不讨论这一个字符能够做什么，但把它看作是一种研究，或者你说他是闲的那啥痛也行（吐槽~）。</span></p><div class="HighLighter" contenteditable="false"><div contenteditable="false" class="dp-highlighter"><div class="bar">&nbsp;</div><ol start="1" class="dp-c">    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;ie&nbsp;=&nbsp;!&nbsp;-&nbsp;[1,];</span></span></li></ol></div><div contenteditable="false" class="javascript" style="display:none"><pre>var ie = ! - [1,];</pre></div><div contenteditable="false"><link href="http://jsann.com/admin/FCKeditor/editor/plugins/highlighter/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css" type="text/css" rel="stylesheet" /></div></div><p><span style="font-family: 'Courier New'; ">其实它的原理很简单，[1,]在标准浏览器会返回字符串&quot;1&quot;，相当于调用[1,].toString，IE则返回&quot;1,&quot;。但是这样IE与标准都会通过检测，因此使用负号强制转换为数字，标准能成功转换为1，1会在if中自动转换为true，而IE则转换为NaN，再自动转换为false！<a target="_blank" href="http://www.jsann.com/demo/IE_to_determine_the_shortest_demo.html">查看DEMO</a>。</span></p><p><span style="font-family: 'Courier New'; ">很简单对吧？肯定会有很多人跟我一样在想，我怎么就没想到呢？是啊，我怎么就没想到呢？（笑~）</span></p><div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 5px; margin: 5px 10px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 5px"><div style="float: left"><a style="text-decoration: none" title="[既是安安]博客" target="_blank" href="http://www.jsann.com/"><img style="border-bottom: #ddd 1px solid; border-left: #ddd 1px solid; padding-bottom: 3px; padding-left: 3px; padding-right: 3px; border-top: #ddd 1px solid; border-right: #ddd 1px solid; padding-top: 3px" alt="head" src="http://www.jsann.com/image/gravatar/jsann_36.jpg" /></a></div><div style="float: left; margin-left: 5px"><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">本文作者：<a title="季氏安安 [既是安安]博客" target="_blank" href="http://www.jsann.com/">季氏安安</a>（<a title="[既是安安]博客" target="_blank" href="http://www.jsann.com/">[既是安安]博客</a>采用 <a rev="nofollow" rel="nofollow" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">BY-NC-SA</a> 协议进行授权. 转载请保留此链接，谢谢。）</p><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">原文链接：<a title="原文链接：http://www.jsann.com/post/IE_to_determine_the_shortest.html" target="_blank" href="http://www.jsann.com/post/IE_to_determine_the_shortest.html">http://www.jsann.com/post/IE_to_determine_the_shortest.html</a></p></div><div style="line-height: 0; width: 0px; float: none; height: 0px; clear: both; font-size: 0px; overflow: hidden">&nbsp;</div></div><p>CopyRight © 2010 <a href="http://www.jsann.com/" title="[既是安安]博客">JSANN.COM</a> .Some Rights Reserved <a href="mailto://jsann@jsann.com">JSAnn</a>.</p><p><a href="http://www.jsann.com/post/IE_to_determine_the_shortest.html" target="_blank">继续阅读《最短的IE判断》的全文内容...</a></p><p>分类: <a href="http://www.jsann.com/catalog.asp?cate=1">既是前端</a> | Tags: <a href="http://www.jsann.com/catalog.asp?tags=JavaScript">JavaScript</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=IE">IE</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E6%95%B0%E7%BB%84">数组</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E6%B5%8F%E8%A7%88%E5%99%A8">浏览器</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=JS%E5%BC%95%E6%93%8E">JS引擎</a>&nbsp;&nbsp; | <a href="http://www.jsann.com/post/IE_to_determine_the_shortest.html#comment" target="_blank">添加评论</a>(2)</p><h3>相关文章:</h3><ul><li><a href="http://www.jsann.com/post/automatically_to_achieve.html">自动完成实现</a> (2011-8-11 16:50:41)  </li><li><a href="http://www.jsann.com/post/CSS_hack_for_IE6_IE7_firefox_display_different_effects.html">CSS hack：针对浏览器显示不同样式</a> (2011-4-7 21:42:30)  </li><li><a href="http://www.jsann.com/post/IE_JS_errors_reported_to_the_New_tab_solution.html">IE新建选项卡报JS错误的解决方法</a> (2011-3-8 16:13:50)  </li><li><a href="http://www.jsann.com/post/JavaScript_programming_framework.html">JavaScript框架编程</a> (2010-12-30 15:55:14)  </li><li><a href="http://www.jsann.com/post/html5_websocket.html">WebSockets基础</a> (2010-11-25 20:21:0)  </li></ul>]]></description><category>既是前端</category><comments>http://www.jsann.com/post/IE_to_determine_the_shortest.html#comment</comments><wfw:comment>http://www.jsann.com/</wfw:comment><wfw:commentRss>http://www.jsann.com/feed.asp?cmt=112</wfw:commentRss><trackback:ping>http://www.jsann.com/cmd.asp?act=tb&amp;id=112&amp;key=da42adc1</trackback:ping></item><item><title>不知道拍什么好？认识32个摄影方式</title><author>jsann@jsann.com (jsann)</author><link>http://www.jsann.com/post/32_way_of_understanding_photography.html</link><pubDate>Wed, 07 Dec 2011 10:56:31 +0800</pubDate><guid>http://www.jsann.com/post/32_way_of_understanding_photography.html</guid><description><![CDATA[<p><span style="font-family: Georgia; ">有没有觉得拿起相机却不知道拍什么好？又或者想跟以往拍点不同的东西，但又没有概念？下面我们就为你介绍32种摄影方法，来丰富你的摄影方式。</span></p><p><span style="font-family: Georgia; "><b>1. 365摄影计划</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114480452.jpg" /></span></p><p><span style="font-family: Georgia; ">这就是每天一张照片，为自己设定目标与限制，通过日复一日的累积，建立自己的摄影经验与风格，是个不错的方法。</span></p><p><span style="font-family: Georgia; "><b>2. 日常物件</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114480453.jpg" /></span></p><p><span style="font-family: Georgia; ">生活很乏味？此言差矣，正好拿起你的相机，去拍摄你认为很平凡的日常物件，一堵墙、一个篮、一道门，仔细观察然后拍出最好的角度与作品，这个世界会从此不一样。</span></p><p><span style="font-family: Georgia; "><b>3. 每月蒙太奇</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114480454.jpg" /></span></p><p><span style="font-family: Georgia; ">把每月拍下来的照片拼起来，是一件很有趣的事，例如制成一张多幅照片合成的桌布&hellip;&hellip;</span></p><p><span style="font-family: Georgia; "><b>4. 一个景点，很多故事</b></span></p><p><span style="font-family: Georgia; ">找一个有很多人出入往来的地方，然后不停拍摄，可能是广场，可能是车站，又或者是某商店门口，你会在这里发现很多人情世事，很多值得拍摄的故事。</span></p><p><span style="font-family: Georgia; "><b>5. 盲拍</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114480455.jpg" /></span></p><p><span style="font-family: Georgia; ">试试拿着相机，走在街上，不看LCD屏幕，不用取景器，就直接拿起相机拍摄，或者会得到意想不到的效果。<b><br /></b></span></p><p><span style="font-family: Georgia; "><b>6. 三合一</b></span></p><p align="center"><img alt="" src="http://www.jsann.com/upload/201112071114480838.jpg" /></p><p><span style="font-family: Georgia; ">有点像第3条的每月蒙太奇，但不同的是只限于三张︰可以是一件事物的三个不同角度、三件事物却有同一颜色、甚至三张完全不相干的照片，然后用PS把它们排列起来成为一张。</span></p><p><span style="font-family: Georgia; "><b>7. 新角度</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114484424.jpg" /></span></p><p><span style="font-family: Georgia; ">用夸张全新角度去拍摄，例如趴在地上，这会令你的照片从此不一样，如果你有可调节角度的LCD屏幕，就更加轻松了。试着什么都用超低角度，很有趣的。</span></p><p><span style="font-family: Georgia; "><b>8. A-Z或1-2-3</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114480743.jpg" /></span></p><p><span style="font-family: Georgia; ">拍摄带有字母或者数字的物体，也可以拍摄苹果、香蕉、猫或者一辆车、两棵树、三个人&hellip;&hellip;</span></p><p><span style="font-family: Georgia; "><b>9. 图片说故事</b></span></p><p><span style="font-family: Georgia; ">相机只能拍摄这个世界的外壳，只有相机背后的人，才了解照片里的物体到底有什么故事，写下来吧，会很有趣的。</span></p><p><span style="font-family: Georgia; "><b>10. 随步拍摄</b></span></p><p><span style="font-family: Georgia; ">规则很简单，从家步行五分钟，看到什么就拍下来，把距离你家五分钟的东西都拍摄下来，可能是一株花、一只猫&hellip;&hellip;这个地方从此于你又有不同意义了。甚至试着步行更长距离，不坐车，看到什么拍什么。</span></p><p><span style="font-family: Georgia; "><b>11. 手机摄影</b></span></p><p>可能很多人都做了，不用单反，用手机，目标就是拍出不下于高端相机的好照片，虽然不容易，试试吧。</p><p><span style="font-family: Georgia; "><b>12.家居</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114480647.jpg" /></span></p><p><span style="font-family: Georgia; ">其实家里也有很多东西值得玩，排列一套茶杯、堆砌一排铅笔、叠起一袋硬币，就算天气再差，这些都是有趣的拍摄题材。</span></p><p><span style="font-family: Georgia; "><b>13. 烟的艺术</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114480841.jpg" /></span></p><p><span style="font-family: Georgia; ">烟是一种很随意很特别的拍摄对象，也能构成很多不同的创意，当然就考验大家设定的耐心了。</span></p><p><span style="font-family: Georgia; "><b>14. 创意自拍</b></span></p><p><span style="font-family: Georgia; ">找不到模特？你自己不就是最佳的模特吗？自拍除了拿著iPhone，在厕所对着镜子之外，还有很多方式的，把相机放在不同位置，运用各种不同的灯光，自制你的人像作品吧。</span></p><p><span style="font-family: Georgia; "><b>15. 相同地点，不同时间</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114486768.jpg" /></span></p><p><span style="font-family: Georgia; ">有些景色一年四季，或过时过节就会变成不同景观，又或如某些球场和公园，到了某些日子就用来作不同节目，纪录它们，会有意想不到的收获。</span></p><p><span style="font-family: Georgia; "><b>16. 单色</b></span></p><p>试着找一次拍摄全部都是单色或黑白的照片，也许你会爱上黑白照片，对摄影的认识从此变得不一样。</p><p><span style="font-family: Georgia; "><b>17. 陌生人</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114483741.jpg" /></span></p><p><span style="font-family: Georgia; ">很简单，拍摄100个陌生人，无论你是如此街拍、纯粹旁观与记录，或是从此认识新朋友，100张照片之后，你的世界也会变了。</span></p><p><span style="font-family: Georgia; "><b>18. 光涂鸦</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114482140.jpg" /></span></p><p><span style="font-family: Georgia; ">这个对很多人并不陌生，我们之前曾介绍过很多出色的光涂鸦作品，但事实上，这也是相当好的入门课题，让人重新认识曝光三角，也认识相机的基础操作，对于第一次接触单反的人绝对是必修课，而对于摄影老手来说，也是历久常新的创意平台。</span></p><p><span style="font-family: Georgia; "><b>19. 全景图</b></span></p><p><span style="font-family: Georgia; ">越来越多相机加入全景拍摄功能，甚至iPhone也有，以往运用脚架逐张拍摄再慢慢合并的历史，似乎越来越远了，无论如何，拍摄全景照片，依然是一种有趣的摄影方式。</span></p><p><span style="font-family: Georgia; "><b>20. 动态模糊</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114485336.jpg" /></span></p><p><span style="font-family: Georgia; ">把相机设为慢门，就已经有非常多的摄影题材，不论是跟随拍摄、拉变焦、制造幻影，动态模糊不一定就是手震，随时可以变成充满想像空间的艺术作品。</span></p><p><span style="font-family: Georgia; "><b>21. 摄影寻宝团</b></span></p><p>组织两个人、三个人、一团人，去一个地方拍摄寻宝，是很有意思的活动，因为人多，大家可以分头去寻找有趣的拍摄对象，然后互相分享。</p><p><span style="font-family: Georgia; "><b>22. 摄影油画</b></span></p><p><span style="font-family: Georgia; ">其实也就是调一点点快门速度，在拍摄风景时运用少许动态模糊，这样拍出来的照片就有油画的感觉了。</span></p><p><span style="font-family: Georgia; "><b>23. 过度曝光</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114490756.jpg" /></span></p><p><span style="font-family: Georgia; ">虽然很多相机里有测光表，我们也经常需要拍出曝光正常的照片，但其实故意过度曝光，也可以拍出非常有意思的作品。</span></p><p><span style="font-family: Georgia; "><b>24. 极简主义</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114492770.jpg" /></span></p><p><span style="font-family: Georgia; ">制作页面超简约的作品，可能是纯白的背景，或是一幅纯粹的砖墙，甚至一望无际的沙漠，再加入一点点元素，就可变成极简照片，也是很有吸引力的。</span></p><p><span style="font-family: Georgia; "><b>25. 色彩</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114503406.jpg" /></span></p><p><span style="font-family: Georgia; ">色彩是摄影里一个重要的元素，不去计较被摄物体的形状与本质，单纯寻找色彩的对比与冲突也是很好的摄影题材。</span></p><p><span style="font-family: Georgia; "><b>26. 找阴影</b></span></p><p>拍摄时最怕不够光，这个正好相反，找出没有光的地方，找个有趣的阴影图案，然后拍摄下来。</p><p><span style="font-family: Georgia; "><b>27. 扫描阴影</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114502464.jpg" /></span></p><p><span style="font-family: Georgia; ">如果你家里有扫描仪，就可以用它代替你的相机，试着什么都放上去扫描一番，或许你会扫出不少艺术气息浓厚的照片。</span></p><p><span style="font-family: Georgia; "><b>28. 几何与图案</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114505307.jpg" /></span></p><p><span style="font-family: Georgia; ">三角形、圆形、棱形、这些在数学教科书上的图案，在现实里比比皆是，可能是人工建筑，也可能是自然景物，把他们拍下来吧。</span></p><p><span style="font-family: Georgia; "><b>29. 垂直照片</b></span></p><p><span style="font-family: Georgia; ">很多人喜欢这种方式，因为垂直的照片在视觉上是不同的，试着一整天全拍摄垂直的照片，或许你会有新的发现。</span></p><p><span style="font-family: Georgia; "><b>30. 玩水</b></span></p><p align="center"><span style="font-family: Georgia; "><img alt="" src="http://www.jsann.com/upload/201112071114502716.jpg" /></span></p><p><span style="font-family: Georgia; ">水、液体、墨汁，实在有太多太多的玩法了，例如拍摄水滴悬空、从杯中溅出、墨水化开、水花四散、流水瀑布，我们一开水龙头就有水可以用，这么方便怎么可能没有拍摄机会呢。</span></p><p><span style="font-family: Georgia; "><b>31. 家乡</b></span></p><p><span style="font-family: Georgia; ">你认识你的家乡吗？有没有为它留一个纪录？高速发展下这种变旧就要拆的新时代，有朝一日或许你会后悔，没有纪录过住了几十年的这个家，而且替它拍照，你可以重新认识这个你以为很了解的地方。</span></p><p><span style="font-family: Georgia; "><b>32. 制作相册</b></span></p><p><span style="font-family: Georgia; ">把你的作品制作成相册吧，然后你重新翻起你的照片，或许会激发你去拍出更出色的作品，毕竟在电脑屏幕看、跟拿在手里看是不一样的。</span></p><p><span style="font-family: Georgia; ">原文来自：</span><a target="_blank" rel="nofollow" href="http://www.nphoto.net/news/2011-12/05/323ae9a4426703216.shtml"><span style="font-family: Georgia; ">http://www.nphoto.net/news/2011-12/05/323ae9a4426703216.shtml</span></a></p><div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 5px; margin: 5px 10px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 5px"><div style="float: left"><a style="text-decoration: none" target="_blank" title="[既是安安]博客" href="http://www.jsann.com/"><img style="border-bottom: #ddd 1px solid; border-left: #ddd 1px solid; padding-bottom: 3px; padding-left: 3px; padding-right: 3px; border-top: #ddd 1px solid; border-right: #ddd 1px solid; padding-top: 3px" alt="head" src="http://www.jsann.com/image/gravatar/jsann_36.jpg" /></a></div><div style="float: left; margin-left: 5px"><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">本文作者：<a target="_blank" title="季氏安安 [既是安安]博客" href="http://www.jsann.com/">季氏安安</a>（<a target="_blank" title="[既是安安]博客" href="http://www.jsann.com/">[既是安安]博客</a>采用 <a rel="nofollow" target="_blank" title="BY-NC-SA协议" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">BY-NC-SA</a> 协议进行授权. 转载请保留此链接，谢谢。）</p><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">原文链接：<a target="_blank" title="原文链接：http://www.jsann.com/post/32_way_of_understanding_photography.html" href="http://www.jsann.com/post/32_way_of_understanding_photography.html">http://www.jsann.com/post/32_way_of_understanding_photography.html</a></p></div><div style="line-height: 0; width: 0px; float: none; height: 0px; clear: both; font-size: 0px; overflow: hidden">&nbsp;</div></div><p>CopyRight © 2010 <a href="http://www.jsann.com/" title="[既是安安]博客">JSANN.COM</a> .Some Rights Reserved <a href="mailto://jsann@jsann.com">JSAnn</a>.</p><p><a href="http://www.jsann.com/post/32_way_of_understanding_photography.html" target="_blank">继续阅读《不知道拍什么好？认识32个摄影方式》的全文内容...</a></p><p>分类: <a href="http://www.jsann.com/catalog.asp?cate=6">既是视觉</a> | Tags: <a href="http://www.jsann.com/catalog.asp?tags=%E6%91%84%E5%BD%B1">摄影</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E7%85%A7%E7%89%87">照片</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E7%9B%B2%E6%8B%8D">盲拍</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E8%92%99%E5%A4%AA%E5%A5%87">蒙太奇</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E9%A9%AC%E8%B5%9B%E5%85%8B">马赛克</a>&nbsp;&nbsp; | <a href="http://www.jsann.com/post/32_way_of_understanding_photography.html#comment" target="_blank">添加评论</a>(0)</p><p><a href="http://www.jsann.com/post/32_way_of_understanding_photography.html#comment" target="_blank">还没有相关文章，您来说两句？</a></p>]]></description><category>既是视觉</category><comments>http://www.jsann.com/post/32_way_of_understanding_photography.html#comment</comments><wfw:comment>http://www.jsann.com/</wfw:comment><wfw:commentRss>http://www.jsann.com/feed.asp?cmt=111</wfw:commentRss><trackback:ping>http://www.jsann.com/cmd.asp?act=tb&amp;id=111&amp;key=b2dd4a4a</trackback:ping></item><item><title>25个浏览器开发工具的秘密</title><author>zenwink@gmail.com (季氏安安)</author><link>http://www.jsann.com/post/25_secret_of_browser_development_tools.html</link><pubDate>Thu, 01 Dec 2011 14:38:12 +0800</pubDate><guid>http://www.jsann.com/post/25_secret_of_browser_development_tools.html</guid><description><![CDATA[<h5 style="font-family:'Courier New';">开发</h5><p style="font-family:'Courier New';">过去几年来，浏览器开发工具一直是 Web 开发者最得力的工具。它能够与Web浏览器和谐相处，允许我们在当前窗口中实时地操作DOM元素、CSS样式和JavaScript，以及获取一些其他的有用信息。</p><p style="font-family:'Courier New';">以前开发者使用Firefox的一个名叫Firebug的扩展，来开发和调试他们的网站。但是最近，各个浏览器都开发了一套它们自己的工具，并且每一个都有自己的优势和劣势。如今很难想像没有这些方便的工具，如何来构建一个网站。</p><p style="font-family:'Courier New';">激活开发工具通常是按下&ldquo;F12&rdquo;键（ Mac 系统为 Cmd + Option + I ），或通过右键点击页面，选择弹出菜单中的&ldquo;审查元素&rdquo;。<style type="text/css">h5{font-size:13px; margin:5px 0 5px 20px;} h6{font-size:12px; margin:5px 0 5px 20px;} td{border-bottom:#ccc solid 1px; padding:2px 5px; font-family:'Courier New';}</style></p><table style="margin-left:20px;">    <tbody>        <tr>            <td width="60"><strong>浏览器</strong></td>            <td width="120"><strong>开发工具集</strong></td>            <td width="100"><strong>类型</strong></td>            <td><strong>文档</strong></td>        </tr>        <tr>            <td>Chrome</td>            <td>Developer Tools</td>            <td>集成</td>            <td>http://code.google.com/chrome/devtools/docs/overview.html</td>        </tr>        <tr>            <td>Firefox</td>            <td>Firebug</td>            <td><a rel="nofollow" target="_blank" href="http://www.getfirebug.com/">扩展</a></td>            <td><a rel="nofollow" target="_blank" href="http://getfirebug.com/wiki/index.php/Main_Page">Documentation</a></td>        </tr>        <tr>            <td>Internet Explorer</td>            <td>Developer Toolbar</td>            <td>集成</td>            <td><a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/gg589507(v=VS.85).aspx">Documentation</a></td>        </tr>        <tr>            <td>Opera</td>            <td>Dragonfly</td>            <td>集成</td>            <td><a rel="nofollow" target="_blank" href="http://www.opera.com/dragonfly/documentation/">Documentation</a></td>        </tr>        <tr>            <td>Safari</td>            <td>Developer Tools</td>            <td>集成<br />            (<a rel="nofollow" target="_blank" href="http://developer.apple.com/library/safari/#documentation/appleapplications/Conceptual/Safari_Developer_Guide/2SafariDeveloperTools/SafariDeveloperTools.html#//apple_ref/doc/uid/TP40007874-CH3-SW7">默认关闭</a>)</td>            <td><a rel="nofollow" target="_blank" href="http://developer.apple.com/library/safari/#documentation/appleapplications/Conceptual/Safari_Developer_Guide/2SafariDeveloperTools/SafariDeveloperTools.html">Overview</a></td>        </tr>    </tbody></table><p style="font-family:'Courier New';">你充分发挥了这些工具的潜力吗？开发工具最大的特点就是很容易使用，但结果就是开发者们常常错过了它们所提供的大部分功能。受到<a rel="nofollow" target="_blank" href="http://paulirish.com/2011/a-re-introduction-to-the-chrome-developer-tools/">&nbsp;Paul Irish 和 Pavel Feldman 视频谈话</a>&nbsp;的启发，我列出了一个有关开发控制台&ldquo;秘密&rdquo;的列表。我不指望它们中的每一个都对你来说是未知的，只希望它们中的某一些能够有助你成为一个更好的Web开发者。</p><p style="font-family:'Courier New';">如果你有更多的&ldquo;秘密&rdquo;，请自在地在文章末尾留言&mdash;&mdash;一旦我确认了，我会及时更新这篇文章。我也很想知道你哪个开发控制台是你首要的开发工具，也可以直接在下面留言。</p><h5 style="font-family:'Courier New';">控制台选项卡</h5><h6 style="font-family:'Courier New';">引用当前元素</h6><p style="font-family:'Courier New';"><strong>Chrome, Firefox, Opera, Safari</strong>&nbsp;&ndash; 如果在&ldquo;元素&rdquo;选项卡中，你有一个元素正被选中的话，你可以通过引用&ldquo;$0&rdquo;来你的代码中调用它。比如，为了看到你选中元素的内容，你可以输入&ldquo;$0.innerHTML&rdquo;。在Chrome和Safari中，你可以通过按下&ldquo;Esc&rdquo;键，立即从其他选项卡切换到控制台（开发工具打开了的情况下）。在Firebug中，控制台通过点击选项卡左侧的图标，或按下 Ctrl + Shift + L 来切换（Mac 下是 Cmd + Shift + L ）。</p><p style="font-family:'Courier New';"><img title="using-$0" alt="Using $0 in the console" src="http://www.jsann.com/upload/201112011720022233.png" /></p><p style="font-family:'Courier New';">在Opera中，你可以用&ldquo;$1&rdquo;往前引用元素。在Chrome和Safari中，你可以用&ldquo;$1~$4&rdquo;往前引用元素。</p><h6 style="font-family:'Courier New';">使用console.log同时输出多个值和对象</h6><p style="font-family:'Courier New';"><strong>所有浏览器</strong>&nbsp;- 我们都知道，console.log()&nbsp;方法用来输出调试信息到控制台时非常有用，尤其是与alert相比。但是当你想要输出一个字符串紧跟着一个对象时，它输出的形式会让人生烦。比如使用&nbsp;console.log('message:' + $('#message'))&nbsp;将仅仅告诉你消息是一个对象（*译注：可能输出结果是&ldquo;message:[object Object]&rdquo;），并且如果这个过程在一个循环体中的话，对象的表示让人困惑。</p><p style="font-family:'Courier New';">console.log()实际上可以接收多个参数，所以你可以同时输出字符串和对象：console.log('message:', $('#message'));&nbsp;或者其他你能想到的JavaScript类型组合。</p><p style="font-family:'Courier New';"><img title="console-log-multi" alt="Using console.log" src="http://www.jsann.com/upload/201112011720021723.png" /></p><p style="font-family:'Courier New';">你可以用&nbsp;console.warn()&nbsp;输出警告消息；用&nbsp;console.error()&nbsp;输出错误消息；用&nbsp;console.info()&nbsp;输出信息消息。 你也可以使用&nbsp;console.assert()&nbsp;来检测表达式为 true 或 false。</p><p style="font-family:'Courier New';">(感谢Masklinn提供了此项信息)</p><h5 style="font-family:'Courier New';">重用JavaScript命令</h5><p style="font-family:'Courier New';"><strong>所有浏览器</strong>&nbsp;- 如果你输入过一条命令到JavaScript控制台，并且你又想重新运行它，只要简单地按下方向键&ldquo;&uarr;&rdquo;来回滚你调用过的命令就可以了。</p><h6 style="font-family:'Courier New';">保持</h6><p style="font-family:'Courier New';"><strong>Chrome, Firefox</strong>&nbsp;&ndash; Firebug 控制台上方有一个很明显的 &ldquo;保持&rdquo;（Persist） 按钮，但 Chrome 中被稍微隐藏掉了&mdash;&mdash;需要右键点击控制台，在弹出的右键菜单中选择 &ldquo;Preserve Log upon Navigation&rdquo; 选项。</p><p style="font-family:'Courier New';">* 译注：保持的作用是让控制台在刷新页面后仍然保留已输出的控制台信息。</p><h6 style="font-family:'Courier New';">查看对象源</h6><p style="font-family:'Courier New';"><strong>Firefox</strong>&nbsp;&ndash; Firefox支持&nbsp;toSource()&nbsp;方法，这意味着在Firebug中可以直接调用这个方法来打印一个对象的字符串表示。</p><p style="font-family:'Courier New';"><img title="to-source" alt="The toSource() command in action" src="http://www.jsann.com/upload/201112011720020384.png" /></p><h6 style="font-family:'Courier New';">改变 frame</h6><p style="font-family:'Courier New';"><strong>Firefox</strong>&nbsp;&ndash; 从控制台直接运行JavaScript命令是很有用的，但是如果你页面用了iframe内容的话，就变得麻烦了。幸运的是，用下面的&ldquo;cd&rdquo;命令能够进入到指定的iframe环境，得以重新运行你的命令：</p><p style="font-family:'Courier New';">cd(window.frames['frameName']);</p><p style="font-family:'Courier New';">* 译注：比如cd(window.frames[0])，它会进入第一个iframe的执行环境，并显示一条info消息：[&quot;Current window:&quot;, Window sample.com]；同时，返回上层可以使用：cd(parent)</p><p style="font-family:'Courier New';"><strong>Chrome</strong>&nbsp;&ndash; Chrome 允许你用一个不同的方式来改变 frame ，点击控制台底部的下拉菜单进行切换：</p><p style="font-family:'Courier New';"><img title="frame-select" alt="Selecting frame" src="http://www.jsann.com/upload/201112011720021143.png" /></p><p style="font-family:'Courier New';"><strong>Opera</strong>&nbsp;&ndash; Opera中，控制台和文档选项卡都存在一个用来切换frame的下拉菜单&mdash;&mdash;控制台中的那个下拉菜单仅在有 frame 可供选择时才显示：</p><p style="font-family:'Courier New';"><img title="opera-frame-select" alt="Frame select in Opera" src="http://www.jsann.com/upload/201112011720027483.png" /></p><p style="font-family:'Courier New';">（感谢Paul Irish 和Daniel提供此项信息）</p><h6 style="font-family:'Courier New';">直接复制你的代码到剪贴板</h6><p style="font-family:'Courier New';"><strong>Chrome, Firefox, Safari</strong>&nbsp;&ndash; 在控制台中使用copy()命令，以内容作参数，将直接复制内容到剪贴板。</p><h6 style="font-family:'Courier New';">让浏览器做计算</h6><p style="font-family:'Courier New';"><strong>所有浏览器</strong>&nbsp;&ndash; 这个技巧很有意义，但令人惊讶的是会有多少人不这么去用它。当你想快速知道一个数学计算的答案（比如，一个456像素宽度的容器分三栏，每栏有多宽？），你不需要打开一个计算器，直接在控制台输入就能立即返回答案。顺便说一下，答案是152。</p><p style="font-family:'Courier New';">* 译注：这又不是Bot, O_O 作者应该是指直接在控制台输入表达式：456/3</p><h5 style="font-family:'Courier New';">脚本选项卡</h5><p style="font-family:'Courier New';">页面所有运行脚本安身的地方，这个选项卡包含了一个下拉菜单，让你可以选择你想要调试的脚本。</p><h6 style="font-family:'Courier New';">处理压缩过的脚本</h6><p style="font-family:'Courier New';"><strong>Chrome, Internet Explorer, Safari</strong>&nbsp;&ndash; 放置一个断点在代码中会让调试更简单。如果脚本是已经投入生产环境了的话，它就很可能已经被压缩过了。这时怎么你怎么调试压缩过的代码呢？幸好，部分浏览器有个选项可以解压你的JavaScript代码。</p><p style="font-family:'Courier New';">Chrome和Safari中，简单地选择脚本选项卡，通过下拉菜单选择相关的脚本，然后点击底部面板的&quot;{}&quot;（pretty print）图标：</p><p style="font-family:'Courier New';"><img alt="The Pretty Print option" src="http://www.jsann.com/upload/201112011720023886.png" /></p><p style="font-family:'Courier New';">在 IE9 中，点击选中脚本旁边的工具图标来格式化JavaScript代码：</p><p style="font-family:'Courier New';"><img title="formatjs" alt="Formatting the JavaScript in IE9." src="http://www.jsann.com/upload/201112011720023357.png" /></p><h6 style="font-family:'Courier New';">监视变量</h6><p style="font-family:'Courier New';"><strong>所有浏览器</strong>&nbsp;&ndash; .NET开发中的一个常用工具，&ldquo;监视&rdquo;允许通过脚本选项卡右上栏的方便的区域来观察一组变量。要观察一个变量很简单，只要输入它的名字，&ldquo;监视&rdquo;将保持它最新的值。</p><p style="font-family:'Courier New';"><img title="watch" alt="Watching a variable" src="http://www.jsann.com/upload/201112011720026530.png" /></p><h6 style="font-family:'Courier New';">实时编辑和执行JavaScript代码</h6><p style="font-family:'Courier New';"><strong>Chrome</strong>&nbsp;&ndash; 在Chrome中，你可以直接在页面中进行编辑，并不需要使用单独的编辑器或者重新加载页面。简单地双击你想要改变代码，然后输入新的代码！按Ctrl + S （Mac，Cmd + S）保存。</p><h6 style="font-family:'Courier New';">当错误发生时创建一个断点</h6><p style="font-family:'Courier New';"><strong>所有浏览器</strong>&nbsp;&ndash; 当第一个脚本错误发生时，简单地点击脚本选项卡中的暂停图标，出错行将会高亮以便查看。</p><h6 style="font-family:'Courier New';">当DOM改变时创建一个断点</h6><p style="font-family:'Courier New';"><strong>Chrome, Firefox</strong>&nbsp;&ndash; 如果你知道当某个特定部分的DOM改变时页面崩溃了，或者你仅仅想找出是哪段脚本改变了某个元素的属性，Chrome和Firefox都提供了有效设置断点的方式来找出这个元凶。简单地选中你要监视的元素，右键点击它，选择中断条件：</p><p style="font-family:'Courier New';"><img title="break-on-dom-change" alt="Right click for the options to break on a DOM change" src="http://www.jsann.com/upload/201112011720020884.png" /></p><p style="font-family:'Courier New';">（感谢Jason Wilson提供此项信息）</p><h5 style="font-family:'Courier New';">元素选项卡</h5><p style="font-family:'Courier New';">Firefox中叫做&ldquo;HTML&rdquo;选项卡，Opera中叫做&ldquo;文档&rdquo;（Documents）选项卡。元素（Elements）选项卡显示的是当前状态的DOM。在IE中，你需要点击&ldquo;刷新&rdquo;按钮才能查看当前的DOM。</p><h6 style="font-family:'Courier New';">获取一个容器尺寸的简易办法</h6><p style="font-family:'Courier New';"><strong>Chrome, Safari</strong>&nbsp;&ndash; 我是个在包含浮动元素的容器上使用&nbsp;overflow:auto&nbsp;样式的大粉丝&mdash;&mdash;旧版本的IE这样做会引起麻烦，除非你给元素指定了实际宽度（auto 和 100% 都不够）。虽然元素的实际尺寸可以在元素选项卡右上角的&ldquo;Computed Style&rdquo;栏看到，但仍然需要点击好几次。在Chrome 或 Safari中更好办法是，鼠标悬停到元素选项卡里HTML源代码的特定元素上，或者点击底部工具栏上的放大镜后再悬停到页面特定元素上：</p><p style="font-family:'Courier New';"><img title="dimensions" alt="Hovering over the element to get the dimensions" src="http://www.jsann.com/upload/201112011720028610.png" /></p><p style="font-family:'Courier New';"><strong>Firebug, Internet Explorer, Opera</strong>&nbsp;&ndash; 你需要选择开发工具右手侧面板中的&ldquo;布局&rdquo;（Layout）选项卡，或在右侧边栏中的&ldquo;计算样式&rdquo;（computed styles）中查看。</p><p style="font-family:'Courier New';">（感谢Masklinn分享此项信息）</p><h6 style="font-family:'Courier New';">展开所有元素视图</h6><p style="font-family:'Courier New';"><strong>Firefox, Opera</strong>&nbsp;&ndash; 在Firebug的HTML选项卡中，按下小键盘上的星号（*）键就可以展开选定的所有元素。默认不会展开脚本标记和样式标记，除非你同时按下 Shift + * 键。</p><p style="font-family:'Courier New';"><strong>Opera</strong>&nbsp;&ndash; Opera&ldquo;文档&rdquo;（Documents）选项卡下边直接有个按钮可以做这件事：</p><p style="font-family:'Courier New';"><img title="expand-dom" alt="The Expand DOM button in Dragonfly" src="http://www.jsann.com/upload/201112011720024876.png" /></p><h6 style="font-family:'Courier New';">增加边距、间距、高度、宽度、边框&mdash;&mdash;甚至是颜色</h6><p style="font-family:'Courier New';"><strong>所有浏览器</strong>&nbsp;&ndash; 如果你想改变某元素的边距、间距、高度或者，你可以用光标键（即方向键）来增加/减小大小：</p><ul>    <li>按上（&uarr;）或下（&darr;）键将增加或减小单位1。</li>    <li>在Chrome, Firebug 和 Safari中，按住Shift键的同时，再按上或下键将增加或减小单位10。（* 译注：Page-Up 和 Page-Down 键有同样的效果）</li>    <li>在Chrome 和 Safari中，按住 Alt 键的同时，再按上或下键将增加或减小单位0. 1。</li>    <li>在Chrome 和 Safari中，按住 Shift 键的同时，再按 Page-Up 或 Page-Down 键将增加或减小单位100。</li></ul><p style="font-family:'Courier New';">这些快捷键在你不确定用哪种使用的尺寸做样式时特别有用。另外，Chrome, Firebug 和 Opera 中，你同时可以用这些快捷键来修改颜色值。</p><p style="font-family:'Courier New';">* 译注：需要双击元素选项卡右侧的具体样式，使其进入编辑状态。</p><p style="font-family:'Courier New';">（感谢mikkelrom分享此项信息）</p><h6 style="font-family:'Courier New';">为 :active, :hover, :focus, :visited 状态设置样式</h6><p style="font-family:'Courier New';"><strong>Chrome, Firefox, Opera</strong>&nbsp;&ndash; 在控制台操作样式真的很棒，但测试悬停样式就麻烦了。庆幸的是，有个解决办法。</p><p style="font-family:'Courier New';">Chrome 有个内置按钮用来做这件事。在元素选项卡右侧有个带虚线框和光标的图标，它就是用来编辑状态样式的：</p><p style="font-family:'Courier New';"><img title="hover-focus" alt="Viewing the states in Chrome" src="http://www.jsann.com/upload/201112011720024173.png" /></p><p style="font-family:'Courier New';">Firebug中，点击右侧的Style选项卡旁边的带箭头菜单，然后选择你想要编辑的状态。</p><p style="font-family:'Courier New';">在Opera中，样式选项卡下面有个看起来像列表的图标。</p><h6 style="font-family:'Courier New';">轮换颜色定义类型</h6><p style="font-family:'Courier New';">Chrome, Safari &ndash; Web页面中的颜色能用多个方式定义&mdash;&mdash;通过名称、16进制数字（3位或6位）、rgb或hsl（都有带alpha透明的版本）。在Chrome 或 Safari中，你可以通过点击颜色值旁边的方形图标来在这几个类型定义之间切换。</p><p style="font-family:'Courier New';">（感谢Masklinn分享此项信息 ）</p><p style="font-family:'Courier New';"><img title="Rotate through color definition types" alt="Rotate through color definition types" src="http://www.jsann.com/upload/201112011720020741.png" /></p><p style="font-family:'Courier New';">* 译注：增加了这个截图，以前我仅仅以为那个方块是用来展示颜色的，囧，根本不知道它还能点击&mdash;&mdash;又多了一个能省略掉计算器的功能。</p><h6 style="font-family:'Courier New';">颜色拾取器</h6><p style="font-family:'Courier New';"><strong>Opera</strong>&nbsp;&ndash; 在 Opera 中，和上面一样，点击颜色值右边的方块图标可以弹出一个方便的拾取器：</p><p style="font-family:'Courier New';"><img title="colorpicker" alt="Opera's color picker" src="http://www.jsann.com/upload/201112011720026715.jpg" /></p><p style="font-family:'Courier New';">* 译注：这里又有了个HSV颜色自动转换RGB颜色的工具。</p><h5 style="font-family:'Courier New';">资源选项卡</h5><p style="font-family:'Courier New';">资源（resources）选项卡列表你的页面使用的所有样式表、JavaScript文件和图片。不幸的是，IE和Firebug中不存在这个选项卡，尽管在它们的其他选项卡中集成了这项功能的一些特征。</p><h6 style="font-family:'Courier New';">保存你的更改</h6><p style="font-family:'Courier New';"><strong>Chrome, Internet Explorer, Safari</strong>&nbsp;&ndash; 在工具中即时编辑样式或JavaScript很爽。但当你高高兴兴地做了修改，然后又要在源代码中重新实现一遍就不那么爽了。</p><p style="font-family:'Courier New';">在IE中，每个选项卡提供了一个&ldquo;保存&rdquo;图标，它的功能就是保存修改到一个文件当中。</p><p style="font-family:'Courier New';">同时，Chrome 和 Safari的资源选项卡中提供了一项贴心的功能：它保存了你每次修改的版本（按 Ctrl + S 之后），还允许你往前或往后查看每个版本的变化。你修改过的文件名旁边会出现一个箭头图标，表示它可以 展开/收起 以查看修改过的版本列表。在Chrome中，右键点击文件名可以选择保存这个文件。不过在Safari中你只能悲剧地复制和粘贴了。</p><p style="font-family:'Courier New';"><img title="version-control" alt="Version control in action" src="http://www.jsann.com/upload/201112011720026376.png" /></p><h6 style="font-family:'Courier New';">Cookie 和 存储</h6><p style="font-family:'Courier New';"><strong>Chrome, Opera, Safari</strong>&nbsp;&ndash;资源选项卡下半部分的资源列表表示了各种不同的数据存储选项。Opera 有一个单独的存储选项卡。</p><p style="font-family:'Courier New';"><img title="storage" alt="View the values in storage" src="http://www.jsann.com/upload/201112011720028886.png" /></p><h5 style="font-family:'Courier New';">网络选项卡</h5><p style="font-family:'Courier New';">网络（Network）选项卡显示你页面加载的所有文件资源。大多数情况，你打开它之后，要刷新一下页面才能显示出你想看的信息。在Firebug中，选项卡的名称是&ldquo;Net&rdquo;。对于IE，直到版本 9 以后才有它。</p><h6 style="font-family:'Courier New';">禁用浏览器缓存</h6><p style="font-family:'Courier New';"><strong>所有浏览器</strong>&nbsp;&ndash; 每个浏览器都可以禁用缓存，但禁用的方式不一致。</p><p style="font-family:'Courier New';">在Chrome中，点击开发工具右下角的齿轮图标进行设置。在Firebug中，设置位于网络选项卡旁边的箭头下拉菜单中。在IE中，设置位于菜单栏的存菜单项。</p><p style="font-family:'Courier New';">在Opera中，要清除缓存的话，点击网络选项卡，选择网络选项中的第二个选项卡，选择其中的第一个选项。在Safari中，在菜单栏中的&ldquo;开发&rdquo;菜单中禁用缓存。</p><p style="font-family:'Courier New';">Windows中，在浏览器中可以按下 Ctrl + Shift + Delete 键调用消除缓存对话框。</p><p style="font-family:'Courier New';">（感谢 Steven 和 karl 分享此项信息 ）</p><p style="font-family:'Courier New';">* 译注：Opera 中我根本没找到，只有 设置/历史 选项卡可供设置。</p><h6 style="font-family:'Courier New';">延迟</h6><p style="font-family:'Courier New';"><strong>所有浏览器</strong>&nbsp;&ndash; 网络选项卡允许你查看服务器响应一个请求花了多长时间。每个资源对应的浅色填充部分表示请求是何时发送，并且何时返回的。深色填充部分表示资源是何时下载的。在Chrome中，你可以用悬停在每条时间线上以获得消耗时间的具体信息。</p><p style="font-family:'Courier New';">在Opera中延迟表示的原则是一样的，除了它用的是灰色的线条，而Chrome是浅色填充。</p><p style="font-family:'Courier New';"><img title="latency" alt="Latency in Opera" src="http://www.jsann.com/upload/201112011720023813.png" /></p><p style="font-family:'Courier New';">在IE中，延迟被标记成黄色，并且悬停到时间线上也会取得更多信息。</p><p style="font-family:'Courier New';">在Firebug中，延迟被标记为紫色，并且用的术语是&ldquo;Waiting&rdquo;。悬停到时间线上同样能获得各方面时间消耗的详细信息。</p><h6 style="font-family:'Courier New';">DOMContentLoaded 和 load 事件触发</h6><p style="font-family:'Courier New';"><strong>Chrome, Safari</strong>&nbsp;&ndash; Chrome和Safari中网络选项还展示了两项额外的信息，DOMContentLoaded 事件触发的时间用蓝线表示，load 事件触发的时间用红线表示。</p><p style="font-family:'Courier New';"><img title="domready" alt="Showing the DOMContentLoaded" src="http://www.jsann.com/upload/201112011720020216.png" /></p><p style="font-family:'Courier New';">DOMContentLoaded 代表的那条线表示当浏览器已经完成解析文档（但其他资源比如图片和样式表可以还没下载完成），而 load 事件代表的线表示所有资源都已经加载完成了。</p><p style="font-family:'Courier New';">如果这两个事件同时发生，这条线会显示为紫色。</p><p style="font-family:'Courier New';">（感谢Steven 和 Joey提供此项信息）</p><h5 style="font-family:'Courier New';">其他</h5><h6 style="font-family:'Courier New';">崩溃</h6><p style="font-family:'Courier New';"><strong>所有浏览器</strong>&nbsp;&ndash; 有时我发现开发者工具会崩溃，或鼠标点击时会失去响应。我也经常发现使用键盘快捷键关闭再重新打开开发工具可以修复这个问题，而不需要去关闭整个浏览器再重新打开。</p><p style="font-family:'Courier New';">我希望这些特性和秘密对你有所帮助。我故意没有在这个列表中包含性能分析和远程调试的内容，那将是我后续文章要讲到的了。请自在地在下面反馈、挑错，或留下你的技巧。</p><p style="font-family:'Courier New';">原文来自：<a rel="nofollow" target="_blank" href="http://www.cnblogs.com/ambar/archive/2011/11/09/25-secrets-of-the-browser-developer-tools-in-chinese.html">http://www.cnblogs.com/ambar/archive/2011/11/09/25-secrets-of-the-browser-developer-tools-in-chinese.html</a></p><div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 5px; margin: 5px 10px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 5px"><div style="float: left"><a style="text-decoration: none" title="[既是安安]博客" target="_blank" href="http://www.jsann.com/"><img style="border-bottom: #ddd 1px solid; border-left: #ddd 1px solid; padding-bottom: 3px; padding-left: 3px; padding-right: 3px; border-top: #ddd 1px solid; border-right: #ddd 1px solid; padding-top: 3px" alt="head" src="http://www.jsann.com/image/gravatar/jsann_36.jpg" /></a></div><div style="float: left; margin-left: 5px"><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">本文作者：<a title="季氏安安 [既是安安]博客" target="_blank" href="http://www.jsann.com/">季氏安安</a>（<a title="[既是安安]博客" target="_blank" href="http://www.jsann.com/">[既是安安]博客</a>采用 <a rel="nofollow" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">BY-NC-SA</a> 协议进行授权. 转载请保留此链接，谢谢。）</p><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">原文链接：<a title="原文链接：http://www.jsann.com/post/25_secret_of_browser_development_tools.html" target="_blank" href="http://www.jsann.com/post/25_secret_of_browser_development_tools.html">http://www.jsann.com/post/25_secret_of_browser_development_tools.html</a></p></div><div style="line-height: 0; width: 0px; float: none; height: 0px; clear: both; font-size: 0px; overflow: hidden">&nbsp;</div></div><p>CopyRight © 2010 <a href="http://www.jsann.com/" title="[既是安安]博客">JSANN.COM</a> .Some Rights Reserved <a href="mailto://jsann@jsann.com">JSAnn</a>.</p><p><a href="http://www.jsann.com/post/25_secret_of_browser_development_tools.html" target="_blank">继续阅读《25个浏览器开发工具的秘密》的全文内容...</a></p><p>分类: <a href="http://www.jsann.com/catalog.asp?cate=1">既是前端</a> | Tags: <a href="http://www.jsann.com/catalog.asp?tags=console">console</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=HTML">HTML</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E5%89%8D%E7%AB%AF">前端</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=Firebug">Firebug</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E8%B0%83%E8%AF%95">调试</a>&nbsp;&nbsp; | <a href="http://www.jsann.com/post/25_secret_of_browser_development_tools.html#comment" target="_blank">添加评论</a>(0)</p><h3>相关文章:</h3><ul><li><a href="http://www.jsann.com/post/Firebug_Console_and_command-line_Collection.html">Firebug Console 与命令行全集</a> (2011-7-4 10:42:17)  </li><li><a href="http://www.jsann.com/post/crazy_cross-domain_technologies.html">疯狂的跨域技术</a> (2010-10-21 9:38:35)  </li><li><a href="http://www.jsann.com/post/Optimization_of_front-end_development_summary.html">前端开发优化总结</a> (2010-10-15 20:26:57)  </li><li><a href="http://www.jsann.com/post/fand_text_overflow.html">内容溢出用(...)表示的数种方法</a> (2010-9-1 10:39:26)  </li><li><a href="http://www.jsann.com/post/Input_and_Img_align.html">Input and Img align</a> (2010-8-19 14:38:50)  </li></ul>]]></description><category>既是前端</category><comments>http://www.jsann.com/post/25_secret_of_browser_development_tools.html#comment</comments><wfw:comment>http://www.jsann.com/</wfw:comment><wfw:commentRss>http://www.jsann.com/feed.asp?cmt=110</wfw:commentRss><trackback:ping>http://www.jsann.com/cmd.asp?act=tb&amp;id=110&amp;key=6c06f9c1</trackback:ping></item><item><title>程序员：编程给你现实生活带来了哪些坏习惯</title><author>jsann@jsann.com (jsann)</author><link>http://www.jsann.com/post/Programmer_programming_to_bring_you_what_life_bad_habits.html</link><pubDate>Wed, 26 Oct 2011 10:16:54 +0800</pubDate><guid>http://www.jsann.com/post/Programmer_programming_to_bring_you_what_life_bad_habits.html</guid><description><![CDATA[<p><span style="font-family: Georgia">　　导读：似乎任何职业都会给从业人员带来这样那样的习惯。Stack Overflow网站上有位朋友（应该也是程序员）想了解其他程序员在投身堆码事业后有什么样的坏习惯。结果一呼百应，很多程序员纷纷自爆自己的坏习惯和糗人糗事。编程无国界，相信国内堆码界的朋友，也会有同感。</span></p><p><span style="font-family: Georgia">　　<b>1. 编程已给我带来很多坏习惯，</b>编程也每天在继续给我新增更多的坏习惯。当然有些习惯和编程无关了。下面这些习惯尽管我也很想改掉，但已根深蒂固。</span></p><ul>    <li><span style="font-family: Georgia">a. 在天地万物中，去发现多态、继承和模式； </span></li>    <li><span style="font-family: Georgia">b. 用十六进制代码中的像素和颜色来解释某东西的大小； </span></li>    <li><span style="font-family: Georgia">c. 在日常交谈中用代码相关的抽象术语。</span></li></ul><p><span style="font-family: Georgia"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. 我现在认为256这个数字非常完美。但非程序员不明白这个，有时候让我措手不及。</b><br /><br />　　编者评：1024呢？<br /><br />　　<b>3. 我在看纸质书时，我就非常沮丧。为什么我不能用Ctrl + F来找想看的东西呢？</b><br /><br />　　编者评：我在看电视时，一到广告，我也非常沮丧。为什么我不能往后拖呢？<br /><br />　　<strong>4. </strong>Q: Do you want tea <strong>OR</strong> coffee?<br />　　A: Yes<br />　　侍者：你喝茶还是咖啡？<br />　　客人：是<br /><br />　　编者评：如果该服务生是个兼职打工的程序员，那就直接给你上茶和咖啡。因为，不管&ldquo;上茶&rdquo;还是&ldquo;上咖啡&rdquo;，都是满足&ldquo;茶||咖啡&rdquo;条件的。如果能多卖一样，何乐而不为呢？<br /><br /><br />　　<b>5. 我Google一切。</b><br /><br />　　编者评：忘了Google的地址怎么办？<br /><br /><br />　　<b>6. 几年前，我去一家咖啡店吃午饭，柜台里边的MM问我吃哪种面包。我不假思索地说：</b>&ldquo;<font color="#0000ff"><b>默认的</b></font>。&rdquo;<br /><br />　　囧，她或许现在还在笑我&hellip;&hellip;<br /><br />　　编者评：如果该MM不懂编程，她应该不会发&ldquo;<b>酵</b>&rdquo;，只会发蒙。<br /><br /><br />　　<b>7. 每天坐在屏幕面前，盯上10个小时，这样真的很难保持健康。如果你经常走神，编程可以帮你养成久坐的生活方式。</b><br /><br />　　编者评：除吃饭、W.C.、开会和回家Sleep外，视线一般不离开屏幕<br /><br /><br />　　<b>8. 在现实世界中，我真的很需要Ctrl + Z。</b><br /><br />　　编者评：不仅你想要，我们也想要。除了不仅要这个，每次看到钱包的时候，都会想：&ldquo;要说我能Ctrl+C和Ctlr+V多好啊！&rdquo;。另外，某某说他的成功可以Ctrl + C，莫非他和我们同行？<br /><br /><br />　　<b>9. 我是从<font color="#ff0000">零</font>开始数数的，经常用&ldquo;1&rdquo;表示结束，而别人用&ldquo;1&rdquo;表示开始。</b><br /><br />　　编者评：这个习惯的养成是一个艰难的过程。多少次的越界，多少次的循环次数错误让俺们深刻体会：万物始于0。<span class="Apple-converted-space">&nbsp;</span><br /><br /><br />　　<b>10. 我喜欢&ldquo;是/不是&rdquo;类型的问题，我对那种既不是&ldquo;是&rdquo;，也不是&ldquo;不是&rdquo;的回答非常不爽。</b><br /><br />　　比如：我问：&ldquo;你不介意我换个台吧？&rdquo; 别人答：&ldquo;我正在和我妹妹IM聊天。&rdquo;对我来说，这就好比：<font color="#0000ff">public</font> bool canFlip( ) { <font color="#8b0000">return</font> &quot;I'm IMing my sister&quot;; }<br /><br />　　返回结果明显是个字符串，而不是布尔值。对别人来说，他们已明确告诉答案了；在我看来，他们的回答是&ldquo;强制转换错误&rdquo;。如果我再问那个问题，他们还有同样的回答话，那应该在catch语句块中抛出异常了。<br /><br />　　编者评：有编译错误<br /><br /><br />　　<b>11. 我教我们家小孩，三主色是：Red、Green和Blue。</b><br /><br /><br />　　 <strong>12. </strong>侍者：嗨，我叫克里斯蒂，我是你的<b>Server</b>/侍者！（server除表示&ldquo;侍者&rdquo;之外，还指&ldquo;服务器&rdquo;。）<br />　　我：嗨，我叫麦克，我是你的<b>Client</b>/客户端！<br />　　（真实的故事）<br /><br />　　编者评：不知道这个<b>Server</b>/侍者可以承受多少<b>Client</b>/客户的并发请求？<br /><br />　　<strong>13. </strong>我发现，有时候我明明说的非常精确，但某人（通常是我老婆）并不领会我的精确性，而是理解成类似的东西。这让我抓狂。比如，我在做菜的时候，我并没有说：&ldquo;从冰箱里拿任何黄的东西，&rdquo;我是说：&ldquo;给我黄油。&rdquo;<br />但她递给我人造黄油。<br /><br />　　编者评：同学，这就是你的不对了！&ldquo;人造黄油&rdquo;是&ldquo;黄油&rdquo;的子类哦！（Update：从中文字面意思上。）<br /><br /><br />　　<strong>14. </strong>当我收到如下留言后：<br /><br />　　（<b>去店里买个面包。<font color="#ff0000">如果</font>他们有柴鸡蛋，买10个。</b>）<br /><br />　　结果我买了10个面包回家。<br /><br />　　编者评：因为店里有柴鸡蛋。严格来说，这是个脑筋急转弯。<br /><br /><br />　　<b>15. 我想用正则表达式来搜寻现实对象。</b><br /><br />　　编者评：如果能做到，不知你在中文世界能搜到什么？<br />　　<b>16. 在平常打字中，句子都是分号结尾</b><font size="7"><font color="#ff0000"><b>；</b></font></font><br /><br />　　编者评：幸亏没有编程语言是用问号结尾<font size="4"><b><font color="#ff0000">？</font></b></font>否则谁能看懂你的文章<font size="4"><font color="#ff0000"><b>？</b></font></font><br /><br /><br />　　<b>17. 我在家做任何家务事都非常有条理。</b>比如，在使用任何产品之前，我会仔细阅读附带的说明书，即使是使用非常简单的烤面包机也不例外。如果我要挂相框，我会Google一下&ldquo;如何挂相框&rdquo;，确定我所知道的是正确的（或者在亚马逊上找本悬挂相框相关的书）。<br /><br />　　在每做任何一件事之前，我都会准备一切必备的工具。在实际操作之前（这些操作可不能撤销的），我会做大量的测量和试验。但这让我老婆彻底发狂。<br /><br />　　编者评：阅读手册绝对是好习惯；动手操作之前做准备工作，也不能算坏习惯。顶多算是类职业病。你老婆不该抓狂的。但你挂相框，还要去Google一下，这个有点让我抓狂。<br /><br />　　<b>18. 把一段话称为&ldquo;字符串&rdquo;。这让非程序员们非常不解 - 嘛是&ldquo;字符串&rdquo;？</b><br /><br />　　编者评：我看到蜘蛛，便说它是爬虫。这让程序员不解 - 嘛是&ldquo;爬虫&rdquo;？<br /><br /><br />　　<b>19. 我发现我在写信的时候常常在侧边嵌套花括号，我老婆看到后以为我抽风了。收件人也应该差不多这样想。但这已经是习惯了。</b><br /><br />　　编者评：他们也习惯了<br /><br /><br />　　<b>20. 缺觉，我现在习惯了。</b><br /><br />　　编者评：大熊猫应该不再是濒危动物了！缺觉有害健康。另外，正在看本文的朋友，不管你是否是程序员，都应该检测一下自己的睡眠是否达标了。如何检测，请参考伯乐在线的《</span><a rev="nofollow" rel="nofollow" target="_blank" href="http://www.jobbole.com/entry.php/252"><span style="font-family: Georgia">你的睡眠时间和睡眠质量达标了么？</span></a><span style="font-family: Georgia">》一文。<br /><br /><br />　　<b>21. 我喜欢优化每天的事情，尽可能多采用并行处理。</b>比如，在启动电脑后，跑到厨房打开水壶、准备咖啡，然后跑回来输入密码登录系统；在打开火狐时，去倒开水冲咖啡，然后端着咖啡回来浏览新闻；另外，坐在马桶上刷牙，每天也能节省几分钟。<br /><br />　　编者评：哥端的不是咖啡，是下巴！</span></p><div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 5px; margin: 5px 10px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 5px"><div style="float: left"><a style="text-decoration: none" title="[既是安安]博客" target="_blank" href="http://www.jsann.com/"><img style="border-bottom: #ddd 1px solid; border-left: #ddd 1px solid; padding-bottom: 3px; padding-left: 3px; padding-right: 3px; border-top: #ddd 1px solid; border-right: #ddd 1px solid; padding-top: 3px" alt="head" src="http://www.jsann.com/image/gravatar/jsann_36.jpg" /></a></div><div style="float: left; margin-left: 5px"><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">本文作者：<a title="季氏安安 [既是安安]博客" target="_blank" href="http://www.jsann.com/">季氏安安</a>（<a title="[既是安安]博客" target="_blank" href="http://www.jsann.com/">[既是安安]博客</a>采用 <a rev="nofollow" rel="nofollow" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">BY-NC-SA</a> 协议进行授权. 转载请保留此链接，谢谢。）</p><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">原文链接：<a title="原文链接：http://www.jsann.com/post/Programmer_programming_to_bring_you_what_life_bad_habits.html" target="_blank" href="http://www.jsann.com/post/Programmer_programming_to_bring_you_what_life_bad_habits.html">http://www.jsann.com/post/Programmer_programming_to_bring_you_what_life_bad_habits.html</a></p></div><div style="line-height: 0; width: 0px; float: none; height: 0px; clear: both; font-size: 0px; overflow: hidden">&nbsp;</div></div><p>CopyRight © 2010 <a href="http://www.jsann.com/" title="[既是安安]博客">JSANN.COM</a> .Some Rights Reserved <a href="mailto://jsann@jsann.com">JSAnn</a>.</p><p><a href="http://www.jsann.com/post/Programmer_programming_to_bring_you_what_life_bad_habits.html" target="_blank">继续阅读《程序员：编程给你现实生活带来了哪些坏习惯》的全文内容...</a></p><p>分类: <a href="http://www.jsann.com/catalog.asp?cate=4">既是程记</a> | Tags: <a href="http://www.jsann.com/catalog.asp?tags=%E7%A8%8B%E5%BA%8F%E5%91%98">程序员</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E7%BC%96%E7%A8%8B">编程</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E5%9D%8F%E4%B9%A0%E6%83%AF">坏习惯</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E8%81%8C%E4%B8%9A">职业</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E7%94%9F%E6%B4%BB">生活</a>&nbsp;&nbsp; | <a href="http://www.jsann.com/post/Programmer_programming_to_bring_you_what_life_bad_habits.html#comment" target="_blank">添加评论</a>(0)</p><h3>相关文章:</h3><ul><li><a href="http://www.jsann.com/post/Front-end_template_programmatically.html">前端模板编程方式</a> (2010-8-6 15:7:4)  </li><li><a href="http://www.jsann.com/post/Programmer-specific_bad_habit_9.html">程序员特有的9个坏习惯</a> (2010-7-13 9:32:49)  </li></ul>]]></description><category>既是程记</category><comments>http://www.jsann.com/post/Programmer_programming_to_bring_you_what_life_bad_habits.html#comment</comments><wfw:comment>http://www.jsann.com/</wfw:comment><wfw:commentRss>http://www.jsann.com/feed.asp?cmt=109</wfw:commentRss><trackback:ping>http://www.jsann.com/cmd.asp?act=tb&amp;id=109&amp;key=791182e9</trackback:ping></item><item><title>瀑布流布局浅析</title><author>zenwink@gmail.com (季氏安安)</author><link>http://www.jsann.com/post/waterfall_flow_layout_analysis.html</link><pubDate>Mon, 24 Oct 2011 16:19:41 +0800</pubDate><guid>http://www.jsann.com/post/waterfall_flow_layout_analysis.html</guid><description><![CDATA[<h2><span style="font-family: Georgia; ">简介</span></h2><p><span style="font-family: Georgia; "><a target="_blank" href="http://www.jsann.com/upload/201110241635264633.png"><img alt="" width="600" height="567" src="http://www.jsann.com/upload/201110241635264633.png" /></a></span></p><p><span style="font-family: Georgia; ">如果你经常网上冲浪，这样参差不齐的多栏布局，是不是很眼熟啊？</span></p><p><span style="font-family: Georgia; ">类似的布局，似乎一夜之间出现在国内外大大小小的网站上，比如&nbsp;</span><a rel="nofollow" rev="nofollow" href="http://pinterest.com/"><span style="font-family: Georgia; ">Pinterest</span></a><span style="font-family: Georgia; ">&nbsp;(貌似是最早使用这种布局的网站了)，</span><a rel="nofollow" rev="nofollow" href="http://markzhi.com/"><span style="font-family: Georgia; ">Mark之</span></a><span style="font-family: Georgia; ">，</span><a rel="nofollow" rev="nofollow" href="http://www.mogujie.com/book/clothing/"><span style="font-family: Georgia; ">蘑菇街</span></a><span style="font-family: Georgia; ">，</span><a rel="nofollow" rev="nofollow" href="http://www.diandian.com/"><span style="font-family: Georgia; ">点点网</span></a><span style="font-family: Georgia; ">，以及淘宝最新上线的&ldquo;</span><a rel="nofollow" rev="nofollow" href="http://wow.taobao.com/"><span style="font-family: Georgia; ">哇哦</span></a><span style="font-family: Georgia; ">&rdquo; 等等，倒是很流行哈~ 在淘宝即将上线的众多产品中，你还会大量看到这样的形式呢。</span></p><p><span style="font-family: Georgia; ">这种布局适合于小数据块，每个数据块内容相近且没有侧重。通常，随着页面滚动条向下滚动，这种布局还会不断加载数据块并附加至当前尾部。所以，我们给这样的布局起了一个形象的名字 &mdash;&nbsp;<strong>瀑布流式布局</strong>。</span></p><p><span style="font-family: Georgia; "><span id="more-4469"> </span></span></p><h2><span style="font-family: Georgia; ">几种实现方式</span></h2><p><span style="font-family: Georgia; ">随着越来越多设计师爱用这种布局，我们作为前端，要尽可能满足视觉/交互设计师的需求。所以，我们整理了下这种布局的几种实现方式，有三种:</span></p><p><span style="font-family: Georgia; "><strong>1) 传统多列浮动</strong>。即 蘑菇街和哇哦 采用的方式，如下图所示:</span></p><p><span style="font-family: Georgia; "><a target="_blank" href="http://www.jsann.com/upload/T1zXGoXdVpXXXXXXXX-600-452.png"><img width="600" height="452" alt="" src="http://www.jsann.com/upload/T1zXGoXdVpXXXXXXXX-600-452.png" /></a></span></p><ul>    <li><span style="font-family: Georgia; ">各列固定宽度，并且左浮动；</span></li>    <li><span style="font-family: Georgia; ">一列中的数据块为一组，列中的每个数据块依次排列即可；</span></li>    <li><span style="font-family: Georgia; ">更多数据加载时，需要分别插入到不同的列上；</span></li>    <li><a rel="nofollow" rev="nofollow" href="http://wow.taobao.com/"><span style="font-family: Georgia; ">线上例子</span></a><span style="font-family: Georgia; ">。</span></li></ul><p><span style="font-family: Georgia; "><strong>优点:</strong></span></p><ul>    <li><span style="font-family: Georgia; ">布局简单，应该说没啥特别的难点；</span></li>    <li><span style="font-family: Georgia; ">不用明确知道数据块高度，当数据块中有图片时，就不需要指定图片高度。</span></li></ul><p><span style="font-family: Georgia; "><strong>缺点:</strong></span></p><ul>    <li><span style="font-family: Georgia; ">列数固定，扩展不易，当浏览器窗口大小变化时，只能固定的x列，如果要添加一列，很难调整数据块的排列；</span></li>    <li><span style="font-family: Georgia; ">滚动加载更多数据时，还要指定插入到第几列中，还是不方便。</span></li></ul><p><span style="font-family: Georgia; "><strong>2) CSS3 定义</strong>。W3C 中有讲述关于</span><a rel="nofollow" rev="nofollow" href="http://www.w3.org/TR/css3-multicol/"><span style="font-family: Georgia; ">多列布局的文档</span></a><span style="font-family: Georgia; ">，排列出来的样子:</span></p><p><span style="font-family: Georgia; "><a target="_blank" href="http://www.jsann.com/upload/T1lVGoXfFpXXXXXXXX-600-452.png"><img width="600" height="452" alt="" src="http://www.jsann.com/upload/T1lVGoXfFpXXXXXXXX-600-452.png" /></a></span></p><ul>    <li><span style="font-family: Georgia; ">由 chrome/ff 浏览器直接渲染出来，可以指定容器的列个数，列间距，列中间边框，列宽度来实现；</span></li>    <div class="HighLighter" contenteditable="false">    <div contenteditable="false" class="dp-highlighter">    <div class="bar">&nbsp;</div>    <ol start="1" class="dp-css">        <li class="alt"><span><span class="value">#contai</span><span>ner&nbsp;{</span></span></li>        <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-column-count:&nbsp;<span class="value">5</span><span>；</span></span></li>        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/*-webkit-column-gap:&nbsp;10px；</span></span></li>        <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-column-rule:&nbsp;5px&nbsp;solid&nbsp;#333；</span></li>        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-column-width:&nbsp;210px；*/</span></li>        <li>&nbsp;</li>        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-column-count:&nbsp;<span class="value">5</span><span>；</span></span></li>        <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/*-moz-column-gap:&nbsp;20px；</span></span></li>        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-column-rule:&nbsp;5px&nbsp;solid&nbsp;#333；</span></li>        <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-column-width:&nbsp;210px；*/</span></li>        <li class="alt">&nbsp;</li>        <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column-count:&nbsp;<span class="value">5</span><span>；</span></span></li>        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/*column-gap:&nbsp;10px；</span></span></li>        <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column-rule:&nbsp;5px&nbsp;solid&nbsp;#333；</span></li>        <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column-width:&nbsp;210px；*/</span></li>        <li><span>&nbsp;}</span></li>    </ol>    </div>    <div contenteditable="false" class="css" style="display:none">    <pre>#container {        -webkit-column-count: 5；        /*-webkit-column-gap: 10px；        -webkit-column-rule: 5px solid #333；        -webkit-column-width: 210px；*/        -moz-column-count: 5；        /*-moz-column-gap: 20px；        -moz-column-rule: 5px solid #333；        -moz-column-width: 210px；*/        column-count: 5；        /*column-gap: 10px；        column-rule: 5px solid #333；        column-width: 210px；*/ }</pre>    </div>    <div contenteditable="false">    <link href="http://www.jsann.com/admin/FCKeditor/editor/plugins/highlighter/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css" type="text/css" rel="stylesheet" /></div>    </div></ul><ul>    <li><span style="font-family: Georgia; ">column-count 为列数； column-gap 为每列间隔距离； column-rule 为间隔边线大小； column-width 为每列宽度； 当只设置 column-width 时，浏览器窗口小于一列宽度时，列中内容自动隐藏； 当只设置 column-count 时，平均计算每列宽度，列内内容超出则隐藏； 都设了 column-count 和column-width，浏览器会根据 count 计算宽度和 width 比较，取大的那个值作为每列宽度，然后当窗口缩小时，width 的值为每列最小宽度。这边其实很简单，简易自己尝试下，详细可参考</span><a rel="nofollow" rev="nofollow" href="https://developer.mozilla.org/en/CSS3_Columns"><span style="font-family: Georgia; ">https://developer.mozilla.org/en/CSS3_Columns</span></a><span style="font-family: Georgia; ">&nbsp;中的说明。</span></li>    <li><a rel="nofollow" rev="nofollow" href="http://lizzie.github.com/kissy/src/waterfall/demo/css3.html"><span style="font-family: Georgia; ">线上例子</span></a><span style="font-family: Georgia; ">。</span></li></ul><p><span style="font-family: Georgia; "><strong>优点:</strong></span></p><ul>    <li><span style="font-family: Georgia; ">直接 CSS 定义，最方便了；</span></li>    <li><span style="font-family: Georgia; ">扩展方便，直接往容器里添加内容即可。</span></li></ul><p><span style="font-family: Georgia; "><strong>缺点:</strong></span></p><ul>    <li><span style="font-family: Georgia; ">只有高级浏览器中才能使用；</span></li>    <li><span style="font-family: Georgia; ">还有一个缺点，他的数据块排列是从上到下排列到一定高度后，再把剩余元素依次添加到下一列，这个本质上就不一样了；</span></li>    <li><span style="font-family: Georgia; ">鉴于这两个主要缺点，注定了该方法只能局限于高端浏览器，而且，更适合于文字多栏排列。</span></li></ul><p><span style="font-family: Georgia; "><strong>3) 绝对定位</strong>。即 Pinterest ，Mark之，KISSY 采用的方式:<br /><a target="_blank" href="http://www.jsann.com/upload/T11VCoXhlpXXXXXXXX-600-452.png"><img width="600" height="452" alt="" src="http://www.jsann.com/upload/T11VCoXhlpXXXXXXXX-600-452.png" /></a></span></p><ul>    <li><span style="font-family: Georgia; ">可谓是最优的一种方案，方便添加数据内容，窗口变化，列数/数据块都会自动调整；</span></li>    <li><a rel="nofollow" rev="nofollow" href="http://docs.kissyui.com/docs/html/static/demo/waterfall/demo2.html"><span style="font-family: Georgia; ">线上例子</span></a><span style="font-family: Georgia; ">。</span></li></ul><p><span style="font-family: Georgia; "><strong>缺点:</strong></span></p><ul>    <li><span style="font-family: Georgia; ">需要实现知道数据块高度，如果其中包含图片，需要知道图片高度；</span></li>    <li><span style="font-family: Georgia; ">JS 动态计算数据块位置，当窗口缩放频繁，可能会狂耗性能。</span></li></ul><h2><span style="font-family: Georgia; ">KISSY.Waterfall 实现思路</span></h2><p><a rel="nofollow" rev="nofollow" href="http://docs.kissyui.com/docs/html/api/component/waterfall/"><span style="font-family: Georgia; ">KISSY 的 Waterfall 组件</span></a><span style="font-family: Georgia; ">主要包含两个部分，一个是对现有数据块进行排列计算各自所在的位置； 二是下拉滚动时，触发加载数据操作，并把数据添加到目标容器中。</span></p><p><span style="font-family: Georgia; "><strong>1) 数据块排列</strong>，算法步骤简述下:</span></p><ul>    <li><span style="font-family: Georgia; ">初始化时，对容器中已有数据块元素进行第一次计算，需要用户给定: a，容器元素 &mdash; 以此获取容器总宽度； b，列宽度； c，最小列数；&nbsp;最终列数取的是容器宽度/列宽度和最小列数的最大值，这样保证了，当窗口很小时，仍然出现最小列数的数据；</span></li>    <li><span style="font-family: Georgia; ">获得列数后，需要保存每个列的当前高度，这样在添加每个数据块时，才知道起始高度是多少；</span></li>    <li><span style="font-family: Georgia; ">依次取容器中的所有数据块，先寻找当前高度最小的某列，之后根据列序号，确定数据块的left，top值，left 为所在列的序号乘以列宽，top 为所在列的当前高度，最后更新所在列的当前高度加上这个数据块元素的高度，至此，插入一个元素结束；</span></li>    <li><span style="font-family: Georgia; ">当所有元素插入完毕后，调整容器的高度为各列最大的高度值，结束依次调整；</span></li>    <li><span style="font-family: Georgia; ">性能效率上的注意点: a，如果当前正在调整中，又触发了 resize 事件，需要将上次调整暂停后执行这次调整(见 timedChunk 函数)； b，resize 触发会很频繁，可以将回调函数缓存一段时候后执行，即当这段时间内多次触发了resize事件，但回调函数只会执行一次(见 S.buffer 函数)</span></li>    <li><span style="font-family: Georgia; ">感兴趣的可以参见</span><a rel="nofollow" rev="nofollow" href="https://github.com/kissyteam/kissy/blob/master/src/waterfall/base.js"><span style="font-family: Georgia; ">源码</span></a><span style="font-family: Georgia; ">。</span></li></ul><p><span style="font-family: Georgia; "><strong>2) 异步加载数据</strong>，前面讲的是如何对容器中已有元素进行排列，但很多情况下，还需要不断加载新数据块，为此专门设计了一个独立的模块 KISSY.Waterfall.Loader，其实这个功能就更简单了，仅包含两个步骤:</span></p><ul>    <li><span style="font-family: Georgia; ">绑定滚动事件，并确定预加载线高度值，即滚动到哪个高度后，需要去加载数据，其实这个就是列的最小高度值，这样当前滚动值和最小高度值比较一下即可判断出来，是否要触发加载数据；</span></li>    <li><span style="font-family: Georgia; ">加载数据，为了不对数据源做太多限制，完全由使用者自己决定数据源从哪边获取和其格式，这样更好的方便用户使用。为此，该组件只提供一个load(success，end) 接口，怎样load 由用户自己去定义，而其中的 success/end，分别给出如何添加新数据(suceess 即同 addItems)/如何停止加载的接口。这样真是太方便了~~</span></li>    <li><span style="font-family: Georgia; ">感兴趣的可以参见</span><a rel="nofollow" rev="nofollow" href="https://github.com/kissyteam/kissy/blob/master/src/waterfall/loader.js"><span style="font-family: Georgia; ">源码</span></a><span style="font-family: Georgia; ">。</span></li></ul><h2><span style="font-family: Georgia; ">KISSY.Waterfall 示例和文档</span></h2><p><span style="font-family: Georgia; ">看到这边，是不是很想试用一下~~ 嗯嗯，这里给出一些相关学习资料和示例，以供参考:</span></p><ul>    <li><a rel="nofollow" rev="nofollow" href="http://docs.kissyui.com/docs/html/api/component/waterfall/"><span style="font-family: Georgia; ">Waterfall API 文档</span></a><span style="font-family: Georgia; ">，相关构造器，配置项，方法都在这里；</span></li>    <li><a rel="nofollow" rev="nofollow" href="http://docs.kissyui.com/docs/html/demo/component/waterfall/"><span style="font-family: Georgia; ">示例</span></a><span style="font-family: Georgia; ">，包含静态和动态两种。</span></li></ul><p style="font-family: Georgia; ">原文来自：<a rel="nofollow" rev="nofollow" href="http://ued.taobao.com/blog/2011/09/14/waterfall/">http://ued.taobao.com/blog/2011/09/14/waterfall/</a></p><div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 5px; margin: 5px 10px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 5px"><div style="float: left"><a style="text-decoration: none" title="[既是安安]博客" target="_blank" href="http://www.jsann.com/"><img style="border-bottom: #ddd 1px solid; border-left: #ddd 1px solid; padding-bottom: 3px; padding-left: 3px; padding-right: 3px; border-top: #ddd 1px solid; border-right: #ddd 1px solid; padding-top: 3px" alt="head" src="http://www.jsann.com/image/gravatar/jsann_36.jpg" /></a></div><div style="float: left; margin-left: 5px"><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">本文作者：<a title="季氏安安 [既是安安]博客" target="_blank" href="http://www.jsann.com/">季氏安安</a>（<a title="[既是安安]博客" target="_blank" href="http://www.jsann.com/">[既是安安]博客</a>采用 <a rev="nofollow" rel="nofollow" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">BY-NC-SA</a> 协议进行授权. 转载请保留此链接，谢谢。）</p><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">原文链接：<a target="_blank" title="原文链接：http://www.jsann.com/post/waterfall_flow_layout_analysis.html" href="http://www.jsann.com/post/waterfall_flow_layout_analysis.html">http://www.jsann.com/post/waterfall_flow_layout_analysis.html</a></p></div><div style="line-height: 0; width: 0px; float: none; height: 0px; clear: both; font-size: 0px; overflow: hidden">&nbsp;</div></div><p>CopyRight © 2010 <a href="http://www.jsann.com/" title="[既是安安]博客">JSANN.COM</a> .Some Rights Reserved <a href="mailto://jsann@jsann.com">JSAnn</a>.</p><p><a href="http://www.jsann.com/post/waterfall_flow_layout_analysis.html" target="_blank">继续阅读《瀑布流布局浅析》的全文内容...</a></p><p>分类: <a href="http://www.jsann.com/catalog.asp?cate=1">既是前端</a> | Tags: <a href="http://www.jsann.com/catalog.asp?tags=%E7%80%91%E5%B8%83">瀑布</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E5%B8%83%E5%B1%80">布局</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=KISSY">KISSY</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=CSS3">CSS3</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E5%88%97%E5%B8%83%E5%B1%80">列布局</a>&nbsp;&nbsp; | <a href="http://www.jsann.com/post/waterfall_flow_layout_analysis.html#comment" target="_blank">添加评论</a>(1)</p><h3>相关文章:</h3><ul><li><a href="http://www.jsann.com/post/with_the_layout_of_ie_haslayout.html">拥有布局 IE haslayout</a> (2010-10-20 14:22:33)  </li><li><a href="http://www.jsann.com/post/ie_layout_detailed.html">IE layout详解</a> (2010-10-18 17:33:20)  </li></ul>]]></description><category>既是前端</category><comments>http://www.jsann.com/post/waterfall_flow_layout_analysis.html#comment</comments><wfw:comment>http://www.jsann.com/</wfw:comment><wfw:commentRss>http://www.jsann.com/feed.asp?cmt=108</wfw:commentRss><trackback:ping>http://www.jsann.com/cmd.asp?act=tb&amp;id=108&amp;key=6977c05d</trackback:ping></item><item><title>自动完成实现</title><author>zenwink@gmail.com (季氏安安)</author><link>http://www.jsann.com/post/automatically_to_achieve.html</link><pubDate>Thu, 11 Aug 2011 16:50:41 +0800</pubDate><guid>http://www.jsann.com/post/automatically_to_achieve.html</guid><description><![CDATA[<p><span style="font-family: Comic Sans MS">&nbsp;最近这段时间啥也不想写，也不想做什么，今闲来无事就分享一篇源码好了，无意间发现的一篇源码，我也不知道它是从哪里来的。这里测试的时候使用的是数组，实际使用的时候，我们换成Ajax从服务器端获取的方式就OK了。<a target="_blank" href="http://www.jsann.com/demo/automatically_to_achieve.html">点击这里可以查看本地DEMO</a>。</span></p><div class="HighLighter" contenteditable="false"><div class="dp-highlighter" contenteditable="false"><div class="bar">&nbsp;</div><ol class="dp-c">    <li class="alt"><span><span>&lt;!doctype&nbsp;html&gt; </span></span></li>    <li><span>&lt;html&gt; </span></li>    <li class="alt"><span>&lt;style&gt; </span></li>    <li><span>body&nbsp;{ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;margin-left:&nbsp;0px; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;margin-top:&nbsp;0px; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;margin-right:&nbsp;0px; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;margin-bottom:&nbsp;0px; </span></li>    <li class="alt"><span>} </span></li>    <li><span>.auto_hidden&nbsp;{ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;width:204px;border-top:&nbsp;1px&nbsp;solid&nbsp;#333; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;border-bottom:&nbsp;1px&nbsp;solid&nbsp;#333; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;border-left:&nbsp;1px&nbsp;solid&nbsp;#333; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;border-right:&nbsp;1px&nbsp;solid&nbsp;#333; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;display:none; </span></li>    <li class="alt"><span>} </span></li>    <li><span>.auto_show&nbsp;{ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;width:204px; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;border-top:&nbsp;1px&nbsp;solid&nbsp;#333; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;border-bottom:&nbsp;1px&nbsp;solid&nbsp;#333; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;border-left:&nbsp;1px&nbsp;solid&nbsp;#333; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;border-right:&nbsp;1px&nbsp;solid&nbsp;#333; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;z-index:9999;&nbsp;</span><span class="comment">/*&nbsp;设置对象的层叠顺序&nbsp;*/</span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;display:block; </span></li>    <li class="alt"><span>} </span></li>    <li><span>.auto_onmouseover{ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;color:#ffffff; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;background-color:highlight; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;width:100%; </span></li>    <li><span>} </span></li>    <li class="alt"><span>.auto_onmouseout{ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;color:#000000; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;width:100%; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;background-color:#ffffff; </span></li>    <li class="alt"><span>} </span></li>    <li><span>&lt;/style&gt; </span></li>    <li class="alt"><span>&lt;script&nbsp;language=</span><span class="string">&quot;javascript&quot;</span><span>&gt; </span></li>    <li><span>&lt;!-- </span></li>    <li class="alt"><span class="keyword">var</span><span>&nbsp;$&nbsp;=&nbsp;</span><span class="keyword">function</span><span>&nbsp;(id)&nbsp;{ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="string">&quot;string&quot;</span><span>&nbsp;==&nbsp;</span><span class="keyword">typeof</span><span>&nbsp;id&nbsp;?&nbsp;document.getElementById(id)&nbsp;:&nbsp;id; </span></li>    <li class="alt"><span>} </span></li>    <li><span class="keyword">var</span><span>&nbsp;Bind&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(object,&nbsp;fun)&nbsp;{ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">function</span><span>()&nbsp;{ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;fun.apply(object,&nbsp;arguments); </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>} </span></li>    <li class="alt"><span class="keyword">function</span><span>&nbsp;AutoComplete(obj,autoObj,arr){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.obj=$(obj);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//输入框 </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj=$(autoObj);</span><span class="comment">//DIV的根节点 </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.value_arr=arr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//不要包含重复值 </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.index=-1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//当前选中的DIV的索引 </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.search_value=</span><span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;&nbsp;</span><span class="comment">//保存当前搜索的字符 </span></li>    <li class="alt"><span>} </span></li>    <li><span>AutoComplete.prototype={ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//初始化DIV的位置 </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;init:&nbsp;</span><span class="keyword">function</span><span>(){ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj.style.left&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.obj.offsetLeft&nbsp;+&nbsp;</span><span class="string">&quot;px&quot;</span><span>; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj.style.top&nbsp;&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.obj.offsetTop&nbsp;+&nbsp;</span><span class="keyword">this</span><span>.obj.offsetHeight&nbsp;+&nbsp;</span><span class="string">&quot;px&quot;</span><span>; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj.style.width=&nbsp;</span><span class="keyword">this</span><span>.obj.offsetWidth&nbsp;-&nbsp;2&nbsp;+&nbsp;</span><span class="string">&quot;px&quot;</span><span>;</span><span class="comment">//减去边框的长度2px&nbsp;&nbsp;&nbsp; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//删除自动完成需要的所有DIV </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;deleteDIV:&nbsp;</span><span class="keyword">function</span><span>(){ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(</span><span class="keyword">this</span><span>.autoObj.hasChildNodes()){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj.removeChild(</span><span class="keyword">this</span><span>.autoObj.firstChild); </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj.className=</span><span class="string">&quot;auto_hidden&quot;</span><span>; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}, </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//设置值 </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;setValue:&nbsp;</span><span class="keyword">function</span><span>(_this){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">function</span><span>(){ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_this.obj.value=</span><span class="keyword">this</span><span>.seq; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_this.autoObj.className=</span><span class="string">&quot;auto_hidden&quot;</span><span>; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//模拟鼠标移动至DIV时，DIV高亮 </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;autoOnmouseover:&nbsp;</span><span class="keyword">function</span><span>(_this,_div_index){ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">function</span><span>(){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_this.index=_div_index; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;length&nbsp;=&nbsp;_this.autoObj.children.length; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;j=0;j&lt;length;j++){ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(j!=_this.index&nbsp;){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_this.autoObj.childNodes[j].className=</span><span class="string">'auto_onmouseout'</span><span>; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_this.autoObj.childNodes[j].className=</span><span class="string">'auto_onmouseover'</span><span>; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//更改classname </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;changeClassname:&nbsp;</span><span class="keyword">function</span><span>(length){ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i=0;i&lt;length;i++){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(i!=</span><span class="keyword">this</span><span>.index&nbsp;){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj.childNodes[i].className=</span><span class="string">'auto_onmouseout'</span><span>; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj.childNodes[i].className=</span><span class="string">'auto_onmouseover'</span><span>; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.obj.value=</span><span class="keyword">this</span><span>.autoObj.childNodes[i].seq; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;, </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//响应键盘 </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;pressKey:&nbsp;</span><span class="keyword">function</span><span>(event){ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;length&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.autoObj.children.length; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//光标键&quot;&darr;&quot; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(event.keyCode==40){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++</span><span class="keyword">this</span><span>.index; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.index&gt;length){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.index=0; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.index==length){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.obj.value=</span><span class="keyword">this</span><span>.search_value; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.changeClassname(length); </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//光标键&quot;&uarr;&quot; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>(event.keyCode==38){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.index--; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.index&lt;-1){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.index=length&nbsp;-&nbsp;1; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.index==-1){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.obj.value=</span><span class="keyword">this</span><span>.search_value; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.changeClassname(length); </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//回车键 </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>(event.keyCode==13){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj.className=</span><span class="string">&quot;auto_hidden&quot;</span><span>; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.index=-1; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.index=-1; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}, </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//程序入口 </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;start:&nbsp;</span><span class="keyword">function</span><span>(event){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(event.keyCode!=13&amp;&amp;event.keyCode!=38&amp;&amp;event.keyCode!=40){ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.init(); </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.deleteDIV(); </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.search_value=</span><span class="keyword">this</span><span>.obj.value; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;valueArr=</span><span class="keyword">this</span><span>.value_arr; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valueArr.sort(); </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.obj.value.replace(/(^\s*)|(\s*$)/g,</span><span class="string">''</span><span>)==</span><span class="string">&quot;&quot;</span><span>){&nbsp;</span><span class="keyword">return</span><span>;&nbsp;}</span><span class="comment">//值为空，退出 </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>{&nbsp;</span><span class="keyword">var</span><span>&nbsp;reg&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;RegExp(</span><span class="string">&quot;(&quot;</span><span>&nbsp;+&nbsp;</span><span class="keyword">this</span><span>.obj.value&nbsp;+&nbsp;</span><span class="string">&quot;)&quot;</span><span>,</span><span class="string">&quot;i&quot;</span><span>);} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(e){&nbsp;</span><span class="keyword">return</span><span>;&nbsp;} </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;div_index=0;</span><span class="comment">//记录创建的DIV的索引 </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i=0;i&lt;valueArr.length;i++){ </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(reg.test(valueArr[i])){ </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;div&nbsp;=&nbsp;document.createElement(</span><span class="string">&quot;div&quot;</span><span>); </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div.className=</span><span class="string">&quot;auto_onmouseout&quot;</span><span>; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div.seq=valueArr[i]; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div.onclick=</span><span class="keyword">this</span><span>.setValue(</span><span class="keyword">this</span><span>); </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div.onmouseover=</span><span class="keyword">this</span><span>.autoOnmouseover(</span><span class="keyword">this</span><span>,div_index); </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div.innerHTML=valueArr[i].replace(reg,</span><span class="string">&quot;&lt;strong&gt;$1&lt;/strong&gt;&quot;</span><span>);</span><span class="comment">//搜索到的字符粗体显示 </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj.appendChild(div); </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.autoObj.className=</span><span class="string">&quot;auto_show&quot;</span><span>; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div_index++; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.pressKey(event); </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onresize=Bind(</span><span class="keyword">this</span><span>,</span><span class="keyword">function</span><span>(){</span><span class="keyword">this</span><span>.init();}); </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} </span></li>    <li class="alt"><span>} </span></li>    <li><span class="comment">//--&gt; </span></li>    <li class="alt"><span>&lt;/SCRIPT&gt; </span></li>    <li><span>&lt;body&gt; </span></li>    <li class="alt"><span>&lt;h1&nbsp;align=</span><span class="string">&quot;center&quot;</span><span>&gt;自动完成函数(Autocomplete&nbsp;Function)&lt;/h1&gt; </span></li>    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;align=</span><span class="string">&quot;center&quot;</span><span>&gt;&lt;input&nbsp;type=</span><span class="string">&quot;text&quot;</span><span>&nbsp;style=</span><span class="string">&quot;width:300px;height:20px;font-size:14pt;&quot;</span><span>&nbsp;id=</span><span class="string">&quot;o&quot;</span><span>&nbsp;onkeyup=</span><span class="string">&quot;autoComplete.start(event)&quot;</span><span>&gt;&lt;/div&gt; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">&quot;auto_hidden&quot;</span><span>&nbsp;id=</span><span class="string">&quot;auto&quot;</span><span>&gt;&lt;!--自动完成&nbsp;DIV--&gt;&lt;/div&gt; </span></li>    <li><span>&lt;script&gt; </span></li>    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;autoComplete=</span><span class="keyword">new</span><span>&nbsp;AutoComplete(</span><span class="string">'o'</span><span>,</span><span class="string">'auto'</span><span>,[</span><span class="string">'b0'</span><span>,</span><span class="string">'b12'</span><span>,</span><span class="string">'b22'</span><span>,</span><span class="string">'b3'</span><span>,</span><span class="string">'b4'</span><span>,</span><span class="string">'b5'</span><span>,</span><span class="string">'b6'</span><span>,</span><span class="string">'b7'</span><span>,</span><span class="string">'b8'</span><span>,</span><span class="string">'b2'</span><span>,</span><span class="string">'abd'</span><span>,</span><span class="string">'ab'</span><span>,</span><span class="string">'acd'</span><span>,</span><span class="string">'accd'</span><span>,</span><span class="string">'b1'</span><span>,</span><span class="string">'cd'</span><span>,</span><span class="string">'ccd'</span><span>,</span><span class="string">'cbcv'</span><span>,</span><span class="string">'cxf'</span><span>]); </span></li>    <li><span>&lt;/SCRIPT&gt; </span></li>    <li class="alt"><span>&lt;/body&gt; </span></li>    <li><span>&lt;/html&gt;</span></li></ol></div><div style="display: none" class="javascript" contenteditable="false"><pre>&lt;!doctype html&gt;&lt;html&gt;&lt;style&gt;body {    margin-left: 0px;    margin-top: 0px;    margin-right: 0px;    margin-bottom: 0px;}.auto_hidden {    width:204px;border-top: 1px solid #333;    border-bottom: 1px solid #333;    border-left: 1px solid #333;    border-right: 1px solid #333;    position:absolute;    display:none;}.auto_show {    width:204px;    border-top: 1px solid #333;    border-bottom: 1px solid #333;    border-left: 1px solid #333;    border-right: 1px solid #333;    position:absolute;    z-index:9999; /* 设置对象的层叠顺序 */    display:block;}.auto_onmouseover{    color:#ffffff;    background-color:highlight;    width:100%;}.auto_onmouseout{    color:#000000;    width:100%;    background-color:#ffffff;}&lt;/style&gt;&lt;script language=&quot;javascript&quot;&gt;&lt;!--var $ = function (id) {    return &quot;string&quot; == typeof id ? Document.getElementById(id) : id;}var Bind = function(object, fun) {    return function() {        return fun.apply(object, arguments);    }}function AutoComplete(obj,autoObj,arr){    this.obj=$(obj);        //输入框    this.autoObj=$(autoObj);//DIV的根节点    this.value_arr=arr;        //不要包含重复值    this.index=-1;          //当前选中的DIV的索引    this.search_value=&quot;&quot;;   //保存当前搜索的字符}AutoComplete.prototype={    //初始化DIV的位置    init: function(){        this.autoObj.style.left = this.obj.offsetLeft + &quot;px&quot;;        this.autoObj.style.top  = this.obj.offsetTop + this.obj.offsetHeight + &quot;px&quot;;        this.autoObj.style.width= this.obj.offsetWidth - 2 + &quot;px&quot;;//减去边框的长度2px       },    //删除自动完成需要的所有DIV    deleteDIV: function(){        while(this.autoObj.hasChildNodes()){            this.autoObj.removeChild(this.autoObj.firstChild);        }        this.autoObj.className=&quot;auto_hidden&quot;;    },    //设置值    setValue: function(_this){        return function(){            _this.obj.value=this.seq;            _this.autoObj.className=&quot;auto_hidden&quot;;        }           },    //模拟鼠标移动至DIV时，DIV高亮    autoOnmouseover: function(_this,_div_index){        return function(){            _this.index=_div_index;            var length = _this.autoObj.children.length;            for(var j=0;j&lt;length;j++){                if(j!=_this.index ){                           _this.autoObj.childNodes[j].className='auto_onmouseout';                }else{                    _this.autoObj.childNodes[j].className='auto_onmouseover';                }            }        }    },    //更改classname    changeClassname: function(length){        for(var i=0;i&lt;length;i++){            if(i!=this.index ){                       this.autoObj.childNodes[i].className='auto_onmouseout';            }else{                this.autoObj.childNodes[i].className='auto_onmouseover';                this.obj.value=this.autoObj.childNodes[i].seq;            }        }    }    ,    //响应键盘    pressKey: function(event){        var length = this.autoObj.children.length;        //光标键&quot;&darr;&quot;        if(event.keyCode==40){            ++this.index;            if(this.index&gt;length){                this.index=0;            }else if(this.index==length){                this.obj.value=this.search_value;            }            this.changeClassname(length);        }        //光标键&quot;&uarr;&quot;        else if(event.keyCode==38){            this.index--;            if(this.index&lt;-1){                this.index=length - 1;            }else if(this.index==-1){                this.obj.value=this.search_value;            }            this.changeClassname(length);        }        //回车键        else if(event.keyCode==13){            this.autoObj.className=&quot;auto_hidden&quot;;            this.index=-1;        }else{            this.index=-1;        }    },    //程序入口    start: function(event){        if(event.keyCode!=13&amp;&amp;event.keyCode!=38&amp;&amp;event.keyCode!=40){            this.init();            this.deleteDIV();            this.search_value=this.obj.value;            var valueArr=this.value_arr;            valueArr.sort();            if(this.obj.value.replace(/(^\s*)|(\s*$)/g,'')==&quot;&quot;){ return; }//值为空，退出            try{ var reg = new RegExp(&quot;(&quot; + this.obj.value + &quot;)&quot;,&quot;i&quot;);}            catch (e){ return; }            var div_index=0;//记录创建的DIV的索引            for(var i=0;i&lt;valueArr.length;i++){                if(reg.test(valueArr[i])){                    var div = document.createElement(&quot;div&quot;);                    div.className=&quot;auto_onmouseout&quot;;                    div.seq=valueArr[i];                    div.onclick=this.setValue(this);                    div.onmouseover=this.autoOnmouseover(this,div_index);                    div.innerHTML=valueArr[i].replace(reg,&quot;&lt;strong&gt;$1&lt;/strong&gt;&quot;);//搜索到的字符粗体显示                    this.autoObj.appendChild(div);                    this.autoObj.className=&quot;auto_show&quot;;                    div_index++;                }            }        }        this.pressKey(event);        window.onresize=Bind(this,function(){this.init();});    }}//--&gt;&lt;/SCRIPT&gt;&lt;body&gt;&lt;h1 align=&quot;center&quot;&gt;自动完成函数(Autocomplete Function)&lt;/h1&gt;    &lt;div align=&quot;center&quot;&gt;&lt;input type=&quot;text&quot; style=&quot;width:300px;height:20px;font-size:14pt;&quot; id=&quot;o&quot; onkeyup=&quot;autoComplete.start(event)&quot;&gt;&lt;/div&gt;    &lt;div class=&quot;auto_hidden&quot; id=&quot;auto&quot;&gt;&lt;!--自动完成 DIV--&gt;&lt;/div&gt;&lt;script&gt;    var autoComplete=new AutoComplete('o','auto',['b0','b12','b22','b3','b4','b5','b6','b7','b8','b2','abd','ab','acd','accd','b1','cd','ccd','cbcv','cxf']);&lt;/SCRIPT&gt;&lt;/body&gt;&lt;/html&gt;</pre></div><div contenteditable="false"><link rel="stylesheet" type="text/css" href="http://www.jsann.com/admin/FCKeditor/editor/plugins/highlighter/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css" /></div></div><p>&nbsp;</p><div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 5px; margin: 5px 10px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 5px"><div style="float: left"><a style="text-decoration: none" title="[既是安安]博客" href="http://www.jsann.com/" target="_blank"><img style="border-bottom: #ddd 1px solid; border-left: #ddd 1px solid; padding-bottom: 3px; padding-left: 3px; padding-right: 3px; border-top: #ddd 1px solid; border-right: #ddd 1px solid; padding-top: 3px" alt="head" src="http://www.jsann.com/image/gravatar/jsann_36.jpg" /></a></div><div style="float: left; margin-left: 5px"><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">本文作者：<a title="季氏安安 [既是安安]博客" href="http://www.jsann.com/" target="_blank">季氏安安</a>（<a title="[既是安安]博客" href="http://www.jsann.com/" target="_blank">[既是安安]博客</a>采用 <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" rev="nofollow" rel="nofollow" target="_blank">BY-NC-SA</a> 协议进行授权. 转载请保留此链接，谢谢。）</p><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">原文链接：<a title="原文来自：http://www.jsann.com/post/automatically_to_achieve.html" target="_blank" href="http://www.jsann.com/post/automatically_to_achieve.html">http://www.jsann.com/post/automatically_to_achieve.html</a></p></div><div style="line-height: 0; width: 0px; float: none; height: 0px; clear: both; font-size: 0px; overflow: hidden">&nbsp;</div></div><p>CopyRight © 2010 <a href="http://www.jsann.com/" title="[既是安安]博客">JSANN.COM</a> .Some Rights Reserved <a href="mailto://jsann@jsann.com">JSAnn</a>.</p><p><a href="http://www.jsann.com/post/automatically_to_achieve.html" target="_blank">继续阅读《自动完成实现》的全文内容...</a></p><p>分类: <a href="http://www.jsann.com/catalog.asp?cate=1">既是前端</a> | Tags: <a href="http://www.jsann.com/catalog.asp?tags=%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90">自动完成</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E4%BD%93%E9%AA%8C">体验</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=AJAX">AJAX</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E6%9C%8D%E5%8A%A1%E5%99%A8">服务器</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=JavaScript">JavaScript</a>&nbsp;&nbsp; | <a href="http://www.jsann.com/post/automatically_to_achieve.html#comment" target="_blank">添加评论</a>(1)</p><h3>相关文章:</h3><ul><li><a href="http://www.jsann.com/post/IE_to_determine_the_shortest.html">最短的IE判断</a> (2011-12-14 22:47:50)  </li><li><a href="http://www.jsann.com/post/Apache_configure_a_virtual_machine.html">Apache配置虚拟机</a> (2011-4-13 22:34:5)  </li><li><a href="http://www.jsann.com/post/JavaScript_programming_framework.html">JavaScript框架编程</a> (2010-12-30 15:55:14)  </li><li><a href="http://www.jsann.com/post/html5_websocket.html">WebSockets基础</a> (2010-11-25 20:21:0)  </li><li><a href="http://www.jsann.com/post/activexobject_in_javascript.html">JavaScript中的ActiveXObject对象</a> (2010-11-5 13:21:2)  </li></ul>]]></description><category>既是前端</category><comments>http://www.jsann.com/post/automatically_to_achieve.html#comment</comments><wfw:comment>http://www.jsann.com/</wfw:comment><wfw:commentRss>http://www.jsann.com/feed.asp?cmt=107</wfw:commentRss><trackback:ping>http://www.jsann.com/cmd.asp?act=tb&amp;id=107&amp;key=3c1b71df</trackback:ping></item><item><title>IE7 下 IFRAME 滚动条无法滚动</title><author>zenwink@gmail.com (季氏安安)</author><link>http://www.jsann.com/post/IE7_can_not_scroll_the_scroll_bar_under_the_IFRAME.html</link><pubDate>Tue, 05 Jul 2011 15:33:36 +0800</pubDate><guid>http://www.jsann.com/post/IE7_can_not_scroll_the_scroll_bar_under_the_IFRAME.html</guid><description><![CDATA[<p><span style="font-family: Comic Sans MS"><span style="display: none" id="1309852056189S">&nbsp;</span>很多时候，我们都会让 IFRAME 隐藏滚动条，通常的做法就是在嵌入&nbsp; IFRAME 的页面的 CSS 中指定以下规则：</span></p><p><span style="font-family: Comic Sans MS">html, body {overflow: hidden}</span></p><p><span style="font-family: Comic Sans MS">如果只是想隐藏横向滚动条，则使用以下代码：</span></p><p><span style="font-family: Comic Sans MS">html, body {overflow-x: hidden}</span></p><p><span style="font-family: Comic Sans MS">以上代码在 IE、Firefox、Opera、Chrome 下均能正常工作。但是唯有在 IE7 下隐藏横向滚动条时，虽然有显示纵向滚动条，但鼠标滚轮无法使用。</span></p><p><span style="font-family: Comic Sans MS">似乎 IE7 把 overflow-y 也当成了 hidden。</span></p><p><span style="font-family: Comic Sans MS">这种情况其实我们只需要显式指定一下 overflow-y 即可，如：</span></p><p><span style="font-family: Comic Sans MS">html, body {overflow-x: hidden; overflow-y: auto;}</span></p><p><span style="font-family: Comic Sans MS">问题即可解决。</span></p><div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 5px; margin: 5px 10px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 5px"><div style="float: left"><a style="text-decoration: none" title="[既是安安]博客" target="_blank" href="http://www.jsann.com/"><img style="border-bottom: #ddd 1px solid; border-left: #ddd 1px solid; padding-bottom: 3px; padding-left: 3px; padding-right: 3px; border-top: #ddd 1px solid; border-right: #ddd 1px solid; padding-top: 3px" alt="head" src="http://www.jsann.com/image/gravatar/jsann_36.jpg" /></a></div><div style="float: left; margin-left: 5px"><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">本文作者：<a title="季氏安安 [既是安安]博客" target="_blank" href="http://www.jsann.com/">季氏安安</a>（<a title="[既是安安]博客" target="_blank" href="http://www.jsann.com/">[既是安安]博客</a>采用 <a rev="nofollow" rel="nofollow" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">BY-NC-SA</a> 协议进行授权. 转载请保留此链接，谢谢。）</p><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">原文链接：<a href="http://www.jsann.com/post/IE7_can_not_scroll_the_scroll_bar_under_the_IFRAME.html">http://www.jsann.com/post/IE7_can_not_scroll_the_scroll_bar_under_the_IFRAME.html</a></p></div><div style="line-height: 0; width: 0px; float: none; height: 0px; clear: both; font-size: 0px; overflow: hidden">&nbsp;</div></div><p>CopyRight © 2010 <a href="http://www.jsann.com/" title="[既是安安]博客">JSANN.COM</a> .Some Rights Reserved <a href="mailto://jsann@jsann.com">JSAnn</a>.</p><p><a href="http://www.jsann.com/post/IE7_can_not_scroll_the_scroll_bar_under_the_IFRAME.html" target="_blank">继续阅读《IE7 下 IFRAME 滚动条无法滚动》的全文内容...</a></p><p>分类: <a href="http://www.jsann.com/catalog.asp?cate=1">既是前端</a> | Tags: <a href="http://www.jsann.com/catalog.asp?tags=IE7">IE7</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E6%BB%9A%E5%8A%A8%E6%9D%A1">滚动条</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E6%97%A0%E6%B3%95%E6%BB%9A%E5%8A%A8">无法滚动</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=IFRAME">IFRAME</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E9%9A%90%E8%97%8F">隐藏</a>&nbsp;&nbsp; | <a href="http://www.jsann.com/post/IE7_can_not_scroll_the_scroll_bar_under_the_IFRAME.html#comment" target="_blank">添加评论</a>(2)</p><p><a href="http://www.jsann.com/post/IE7_can_not_scroll_the_scroll_bar_under_the_IFRAME.html#comment" target="_blank">还没有相关文章，您来说两句？</a></p>]]></description><category>既是前端</category><comments>http://www.jsann.com/post/IE7_can_not_scroll_the_scroll_bar_under_the_IFRAME.html#comment</comments><wfw:comment>http://www.jsann.com/</wfw:comment><wfw:commentRss>http://www.jsann.com/feed.asp?cmt=106</wfw:commentRss><trackback:ping>http://www.jsann.com/cmd.asp?act=tb&amp;id=106&amp;key=473b4ddc</trackback:ping></item><item><title>Firebug Console 与命令行全集</title><author>zenwink@gmail.com (季氏安安)</author><link>http://www.jsann.com/post/Firebug_Console_and_command-line_Collection.html</link><pubDate>Mon, 04 Jul 2011 10:42:17 +0800</pubDate><guid>http://www.jsann.com/post/Firebug_Console_and_command-line_Collection.html</guid><description><![CDATA[<div><strong style="font-family: Georgia">Console API</strong></div><div><span style="font-family: Georgia">当打开 firebug (也包括 Chrome 等浏览器的自带调试工具)，window 下面会注册一个叫做 console 的对象，它提供多种方法向控制台输出信息，供开发人员调试使用。下面是这些方法的一个简单介绍，适时地运用它们，对于提高开发效率很有帮助。</span></div><div><span style="font-family: Georgia">console.log(object[, object, ...])</span></div><div><span style="font-family: Georgia">使用频率最高的一条语句：向控制台输出一条消息。支持 C 语言 printf 式的格式化输出。当然，也可以不使用格式化输出来达到同样的目的。下面两行代码执行的结果是相同的：</span></div><div class="HighLighter" contenteditable="false"><div class="dp-highlighter" contenteditable="false"><ol class="dp-c">    <li class="alt">console.log(<span class="string">&quot;The&nbsp;%s&nbsp;jumped&nbsp;over&nbsp;%d&nbsp;tall&nbsp;buildings&quot;</span>,&nbsp;animal,&nbsp;count);console.log(<span class="string">&quot;The&quot;</span>,&nbsp;animal,&nbsp;<span class="string">&quot;jumped&nbsp;over&quot;</span>,&nbsp;count,&nbsp;<span class="string">&quot;tall&nbsp;buildings&quot;</span>);</li></ol></div><div style="display: none" class="javascript" contenteditable="false"><pre>console.log(&quot;The %s jumped over %d tall buildings&quot;, animal, count);console.log(&quot;The&quot;, animal, &quot;jumped over&quot;, count, &quot;tall buildings&quot;);</pre></div><div contenteditable="false"><link rel="stylesheet" type="text/css" href="http://www.jsann.com/admin/FCKeditor/editor/plugins/highlighter/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css" /></div></div><div><span style="font-family: Georgia">console.debug(object[, object, ...])</span></div><div><span style="font-family: Georgia">向控制台输出一条信息，它包括一个指向该行代码位置的超链接。</span></div><div><span style="font-family: Georgia">console.info(object[, object, ...])</span></div><div><span style="font-family: Georgia">向控制台输出一条信息，该信息包含一个表示&ldquo;信息&rdquo;的图标，和指向该行代码位置的超链接。</span></div><div><span style="font-family: Georgia">console.warn(object[, object, ...])</span></div><div><span style="font-family: Georgia">同 info。区别是图标与样式不同。</span></div><div><span style="font-family: Georgia">console.error(object[, object, ...])</span></div><div><span style="font-family: Georgia">同 info。区别是图标与样式不同。error 实际上和 throw new Error() 产生的效果相同，使用该语句时会向浏览器抛出一个 js 异常。</span></div><div><span style="font-family: Georgia">console.assert(expression[, object, ...])</span></div><div><span style="font-family: Georgia">断言，测试一条表达式是否为真，不为真时将抛出异常（断言失败）。</span></div><div><span style="font-family: Georgia">console.dir(object)</span></div><div><span style="font-family: Georgia">输出一个对象的全部属性（输出结果类似于 DOM 面板中的样式）。</span></div><div><span style="font-family: Georgia">console.dirxml(node)</span></div><div><span style="font-family: Georgia">输出一个 HTML 或者 XML 元素的结构树，点击结构树上面的节点进入到 HTML 面板。</span></div><div><span style="font-family: Georgia">console.trace()</span></div><div><span style="font-family: Georgia">输出 Javascript 执行时的堆栈追踪。</span></div><div><span style="font-family: Georgia">console.group(object[, object, ...])</span></div><div><span style="font-family: Georgia">输出消息的同时打开一个嵌套块，用以缩进输出的内容。调用 console.groupEnd() 用以结束这个块的输出。</span></div><div><span style="font-family: Georgia">console.groupCollapsed()</span></div><div><span style="font-family: Georgia">同 console.group(); 区别在于嵌套块默认是收起的。</span></div><div><span style="font-family: Georgia">console.time(name)</span></div><div><span style="font-family: Georgia">计时器，当调用 console.timeEnd(name);并传递相同的 name 为参数时，计时停止，并输出执行两条语句之间代码所消耗的时间（毫秒）。</span></div><div><span style="font-family: Georgia">console.profile([title])</span></div><div><span style="font-family: Georgia">与 profileEnd() 结合使用，用来做性能测试，与 console 面板上 profile 按钮的功能完全相同。</span></div><div><span style="font-family: Georgia">console.count([title])</span></div><div><span style="font-family: Georgia">输出该行代码被执行的次数，参数 title 将在输出时作为输出结果的前缀使用。</span></div><div><span style="font-family: Georgia">console.clear()</span></div><div><span style="font-family: Georgia">清空控制台</span></div><div><strong style="font-family: Georgia">命令行</strong></div><div><span style="font-family: Georgia">控制台的输出面板右边，是控制台的输入面板（Chrome 调试工具对应为下方），在这里除了可以运行常规的 javascript 代码，还内置了相当数量的命令行可以辅助我们的调试工作，下面是一些常用命令行的简单介绍：</span></div><div><span style="font-family: Georgia">$(id)</span></div><div><span style="font-family: Georgia">返回一个给定 id 的元素。</span></div><div><span style="font-family: Georgia">$$(selector)</span></div><div><span style="font-family: Georgia">返回给定的 css 选择器匹配到的一组元素。</span></div><div><span style="font-family: Georgia">$x(xpath)</span></div><div><span style="font-family: Georgia">返回给定的 XPath 表达式匹配到的一组元素。</span></div><div><span style="font-family: Georgia">$0</span></div><div><span style="font-family: Georgia">在 HTML 面板中选中的元素。</span></div><div><span style="font-family: Georgia">$1</span></div><div><span style="font-family: Georgia">上一次在 HTML 面板中选中的元素。</span></div><div><span style="font-family: Georgia">$n(index)</span></div><div><span style="font-family: Georgia">访问最近 5 个被选中过的元素，index 的范围： 0 - 4。</span></div><div><span style="font-family: Georgia">dir(object)</span></div><div><span style="font-family: Georgia">同 console.dir(object)。</span></div><div><span style="font-family: Georgia">dirxml(node)</span></div><div><span style="font-family: Georgia">同 console.dirxml(node)。</span></div><div><span style="font-family: Georgia">clear()</span></div><div><span style="font-family: Georgia">同 console.clear()。</span></div><div><span style="font-family: Georgia">inspect(object[, tabName])()</span></div><div><span style="font-family: Georgia">在合适的（或一个指定的） tab 中检视一个对象。</span></div><div><span style="font-family: Georgia">keys(object)</span></div><div><span style="font-family: Georgia">返回一个对象的所有属性的键。</span></div><div><span style="font-family: Georgia">values(object)</span></div><div><span style="font-family: Georgia">返回一个对象的所有属性的值。</span></div><div><span style="font-family: Georgia">debug(fn)</span></div><div><span style="font-family: Georgia">在函数第一行添加一个断点，使用 undebug(fn) 移除断点。</span></div><div><span style="font-family: Georgia">monitor(fn)</span></div><div><span style="font-family: Georgia">开启一个函数的调用日志，使用 unmonitor(fn) 关闭该功能。非常有用的一个命令，但是它似乎并没有很好地工作。</span></div><div><span style="font-family: Georgia">monitorEvents(object[, types])</span></div><div><span style="font-family: Georgia">开启一个元素的某个事件（或所有事件）被触发时的日志记录。用例如下：</span></div><div class="HighLighter" contenteditable="false"><div class="dp-highlighter" contenteditable="false"><div class="bar">&nbsp;</div><ol class="dp-c">    <li class="alt"><span><span>monitorEvents($0,[</span><span class="string">'click'</span><span>])</span></span></li></ol></div><div style="display: none" class="javascript" contenteditable="false"><pre>monitorEvents($0,['click'])</pre></div><div contenteditable="false"><link rel="stylesheet" type="text/css" href="http://www.jsann.com/admin/FCKeditor/editor/plugins/highlighter/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css" /></div></div><div><span style="font-family: Georgia">上面的命令行被执行后，将开启当前在 HTML 面板中被选中元素的 click 事件监控，一旦这个元素的 click 事件被触发，事件对象将会在控制台输出。如果不指定第二个参数，将对所有事件进行记录。</span></div><div><span style="font-family: Georgia">profile([title])</span></div><div><span style="font-family: Georgia">同 console.profile([title])</span></div><div><strong style="font-family: Georgia">参考资料</strong></div><ul>    <li><a rev="nofollow" rel="nofollow" target="_blank" href="http://getfirebug.com/wiki/index.php/Command_Line_API"><span style="font-family: Georgia">Firebug wiki --- Command Line API</span></a></li>    <li><a rev="nofollow" rel="nofollow" target="_blank" href="http://getfirebug.com/wiki/index.php/Console_API"><span style="font-family: Georgia">Firebug wiki --- Console API</span></a></li></ul><div><span style="font-family: Georgia">原文来自：</span><a rev="nofollow" rel="nofollow" target="_blank" href="http://www.jsmix.com/tools/firebug-console-api-and-command-line-api.html"><span style="font-family: Georgia">http://www.jsmix.com/tools/firebug-console-api-and-command-line-api.html</span></a></div><div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 5px; margin: 5px 10px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 5px"><div style="float: left"><a style="text-decoration: none" title="[既是安安]博客" target="_blank" href="http://www.jsann.com/"><img style="border-bottom: #ddd 1px solid; border-left: #ddd 1px solid; padding-bottom: 3px; padding-left: 3px; padding-right: 3px; border-top: #ddd 1px solid; border-right: #ddd 1px solid; padding-top: 3px" alt="head" src="http://www.jsann.com/image/gravatar/jsann_36.jpg" /></a></div><div style="float: left; margin-left: 5px"><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">本文作者：<a title="季氏安安 [既是安安]博客" target="_blank" href="http://www.jsann.com/">季氏安安</a>（<a title="[既是安安]博客" target="_blank" href="http://www.jsann.com/">[既是安安]博客</a>采用 <a rev="nofollow" rel="nofollow" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">BY-NC-SA</a> 协议进行授权. 转载请保留此链接，谢谢。）</p><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">原文链接：<a href="http://www.jsann.com/post/Firebug_Console_and_command-line_Collection.html">http://www.jsann.com/post/Firebug_Console_and_command-line_Collection.html</a></p></div><div style="line-height: 0; width: 0px; float: none; height: 0px; clear: both; font-size: 0px; overflow: hidden">&nbsp;</div></div><p>CopyRight © 2010 <a href="http://www.jsann.com/" title="[既是安安]博客">JSANN.COM</a> .Some Rights Reserved <a href="mailto://jsann@jsann.com">JSAnn</a>.</p><p><a href="http://www.jsann.com/post/Firebug_Console_and_command-line_Collection.html" target="_blank">继续阅读《Firebug Console 与命令行全集》的全文内容...</a></p><p>分类: <a href="http://www.jsann.com/catalog.asp?cate=1">既是前端</a> | Tags: <a href="http://www.jsann.com/catalog.asp?tags=Firebug">Firebug</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=console">console</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E8%B0%83%E8%AF%95">调试</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E5%91%BD%E4%BB%A4">命令</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=API">API</a>&nbsp;&nbsp; | <a href="http://www.jsann.com/post/Firebug_Console_and_command-line_Collection.html#comment" target="_blank">添加评论</a>(0)</p><h3>相关文章:</h3><ul><li><a href="http://www.jsann.com/post/25_secret_of_browser_development_tools.html">25个浏览器开发工具的秘密</a> (2011-12-1 14:38:12)  </li></ul>]]></description><category>既是前端</category><comments>http://www.jsann.com/post/Firebug_Console_and_command-line_Collection.html#comment</comments><wfw:comment>http://www.jsann.com/</wfw:comment><wfw:commentRss>http://www.jsann.com/feed.asp?cmt=105</wfw:commentRss><trackback:ping>http://www.jsann.com/cmd.asp?act=tb&amp;id=105&amp;key=906e0a3d</trackback:ping></item><item><title>Apache配置虚拟机</title><author>zenwink@gmail.com (季氏安安)</author><link>http://www.jsann.com/post/Apache_configure_a_virtual_machine.html</link><pubDate>Wed, 13 Apr 2011 22:34:05 +0800</pubDate><guid>http://www.jsann.com/post/Apache_configure_a_virtual_machine.html</guid><description><![CDATA[<p><span style="font-family: Times New Roman">新浪微博虚拟机开发配置步骤及介绍。</span></p><p><span style="font-family: Times New Roman">1、由于后面虚拟机中需要用到Rewrite所以先编辑Apache的conf目录下的httpd.conf文件。（可根据实际需要操作）</span></p><p><span style="font-family: Times New Roman">添加mod_rewrite.so模块支持。去掉下列行中前面的#号。</span></p><p><span style="font-family: Times New Roman">LoadModule rewrite_module modules/mod_rewrite.so</span></p><p><span style="font-family: Times New Roman">2、配置apache支持虚拟机。这一步很重要。</span></p><p><span style="font-family: Times New Roman"># Virtual hosts<br />#Include conf/extra/httpd-vhosts.conf</span></p><p><span style="font-family: Times New Roman">找到 上面相关文本，去掉#Include conf/extra/httpd-vhosts.conf前的#。</span></p><p><span style="font-family: Times New Roman"># Virtual hosts<br />Include conf/extra/httpd-vhosts.conf</span></p><p><span style="font-family: Times New Roman">保存退出。</span></p><p><span style="font-family: Times New Roman">3、编辑conf目录下extra文件夹下的httpd-vhosts.conf。</span></p><p><span style="font-family: Times New Roman">去掉实例配置，添加新有配置。以新浪微博为例，配置文件如下：</span></p><p><span style="font-family: Times New Roman">#<br /># Virtual Hosts<br />#<br /># If you want to maintain multiple domains/hostnames on your<br /># machine you can setup VirtualHost containers for them. Most configurations<br /># use only name-based virtual hosts so the server doesn't need to worry about<br /># IP addresses. This is indicated by the asterisks in the directives below.<br />#<br /># Please see the documentation at <br /># &lt;URL:http://httpd.apache.org/docs/2.2/vhosts/&gt;<br /># for further details before you try to setup virtual hosts.<br />#<br /># You may use the command line option '-S' to verify your virtual host<br /># configuration.</span></p><p><span style="font-family: Times New Roman">#<br /># Use name-based virtual hosting.<br />#<br />NameVirtualHost *:80</span></p><p><span style="font-family: Times New Roman">#<br /># VirtualHost example:<br /># Almost any Apache directive may go into a VirtualHost container.<br /># The first VirtualHost section is used for all requests that do not<br /># match a ServerName or ServerAlias in any &lt;VirtualHost&gt; block.<br />#<br />&lt;VirtualHost *:80&gt;</span></p><p><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp; #管理员邮箱<br />&nbsp;&nbsp;&nbsp; ServerAdmin jiangfeng3@staff.sina.com.cn</span></p><p><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp; #项目根目录&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; DocumentRoot &quot;D:/htdocs/frame_export&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p><p><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp; #域名&nbsp;</span></p><p><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp; ServerName test.t.sina.com.cn&nbsp;&nbsp;</span></p><p><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp; #别名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ServerAlias test.t.sina.com.cn<br />&nbsp;&nbsp;&nbsp; #错误日志路径</span></p><p><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp; ErrorLog &quot;logs/test.t.sins.com.cn-error.log&quot;<br />&nbsp;&nbsp;&nbsp; CustomLog &quot;logs/test.t.sins.com.cn-access.log&quot; common<br />&nbsp;&nbsp;&nbsp; RewriteEngine on</span></p><p><span style="font-family: Times New Roman">&nbsp;&nbsp;&nbsp; #重写规则，可根据实际需要添加<br />&nbsp;&nbsp;&nbsp; RewriteRule&nbsp; ^/(.*)$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /apps/index.php [L] <br />&lt;/VirtualHost&gt;</span></p><p><span style="font-family: Times New Roman">4、编辑本地host文件，以windows为例</span></p><p><span style="font-family: Times New Roman">进入C:\Windows\System32\drivers\etc</span></p><p><span style="font-family: Times New Roman">记事本打开hosts文件</span></p><p><span style="font-family: Times New Roman">最后添加</span></p><p><span style="font-family: Times New Roman">&nbsp;127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost<br />&nbsp;127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test.t.sina.com.cn</span></p><p><span style="font-family: Times New Roman">例子：</span></p><p><span style="font-family: Times New Roman"># Copyright (c) 1993-2009 Microsoft Corp.<br />#<br /># This is a sample HOSTS file used by Microsoft TCP/IP for Windows.<br />#<br /># This file contains the mappings of IP addresses to host names. Each<br /># entry should be kept on an individual line. The IP address should<br /># be placed in the first column followed by the corresponding host name.<br /># The IP address and the host name should be separated by at least one<br /># space.<br />#<br /># Additionally, comments (such as these) may be inserted on individual<br /># lines or following the machine name denoted by a '#' symbol.<br />#<br /># For example:<br />#<br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 102.54.94.97&nbsp;&nbsp;&nbsp;&nbsp; rhino.acme.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # source server<br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38.25.63.10&nbsp;&nbsp;&nbsp;&nbsp; x.acme.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # x client host</span></p><p><span style="font-family: Times New Roman"># localhost name resolution is handled within DNS itself.<br />&nbsp;127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost<br /># ::1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost<br />&nbsp;127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test.t.sina.com.cn</span></p><p><span style="font-family: Times New Roman">保存退出</span></p><p><span style="font-family: Times New Roman">5、重启apache，浏览器输入http://test.t.sina.com.cn</span></p><p><span style="font-family: Times New Roman">原文来自：</span><a rev="nofollow" rel="nofollow" href="http://blog.csdn.net/jiangfeng08/archive/2010/07/26/5766932.aspx"><span style="font-family: Times New Roman">http://blog.csdn.net/jiangfeng08/archive/2010/07/26/5766932.aspx</span></a></p><div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 5px; margin: 5px 10px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 5px"><div style="float: left"><a style="text-decoration: none" title="[既是安安]博客" target="_blank" href="http://www.jsann.com/"><img style="border-bottom: #ddd 1px solid; border-left: #ddd 1px solid; padding-bottom: 3px; padding-left: 3px; padding-right: 3px; border-top: #ddd 1px solid; border-right: #ddd 1px solid; padding-top: 3px" alt="head" src="http://www.jsann.com/image/gravatar/jsann_36.jpg" /></a></div><div style="float: left; margin-left: 5px"><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">本文作者：<a title="季氏安安 [既是安安]博客" target="_blank" href="http://www.jsann.com/">季氏安安</a>（<a title="[既是安安]博客" target="_blank" href="http://www.jsann.com/">[既是安安]博客</a>采用 <a rev="nofollow" rel="nofollow" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">BY-NC-SA</a> 协议进行授权. 转载请保留此链接，谢谢。）</p><p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: 'Comic Sans MS'; padding-top: 0px">原文链接：<a title="原文来自：http://www.jsann.com/post/Apache_configure_a_virtual_machine.html" target="_blank" href="http://www.jsann.com/post/Apache_configure_a_virtual_machine.html">http://www.jsann.com/post/Apache_configure_a_virtual_machine.html</a></p></div><div style="line-height: 0; width: 0px; float: none; height: 0px; clear: both; font-size: 0px; overflow: hidden">&nbsp;</div></div><p>CopyRight © 2010 <a href="http://www.jsann.com/" title="[既是安安]博客">JSANN.COM</a> .Some Rights Reserved <a href="mailto://jsann@jsann.com">JSAnn</a>.</p><p><a href="http://www.jsann.com/post/Apache_configure_a_virtual_machine.html" target="_blank">继续阅读《Apache配置虚拟机》的全文内容...</a></p><p>分类: <a href="http://www.jsann.com/catalog.asp?cate=15">既是后端</a> | Tags: <a href="http://www.jsann.com/catalog.asp?tags=Apache">Apache</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E8%99%9A%E6%8B%9F%E6%9C%BA">虚拟机</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=%E6%9C%8D%E5%8A%A1%E5%99%A8">服务器</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=HTTP">HTTP</a>&nbsp;&nbsp;<a href="http://www.jsann.com/catalog.asp?tags=config">config</a>&nbsp;&nbsp; | <a href="http://www.jsann.com/post/Apache_configure_a_virtual_machine.html#comment" target="_blank">添加评论</a>(0)</p><h3>相关文章:</h3><ul><li><a href="http://www.jsann.com/post/automatically_to_achieve.html">自动完成实现</a> (2011-8-11 16:50:41)  </li><li><a href="http://www.jsann.com/post/Optimization_of_front-end_development_summary.html">前端开发优化总结</a> (2010-10-15 20:26:57)  </li><li><a href="http://www.jsann.com/post/gravatar_control_code_for_apsdotnet.html">Gravatar控件是如何炼成的？</a> (2010-9-6 11:18:40)  </li><li><a href="http://www.jsann.com/post/CSS_to_achieve_the_principle_of_the_Peak_Point.html">CSS实现山顶角的原理</a> (2010-8-9 13:29:48)  </li><li><a href="http://www.jsann.com/post/Agreement_HTTP.html">HTTP：超文本传输协议</a> (2010-7-26 17:46:41)  </li></ul>]]></description><category>既是后端</category><comments>http://www.jsann.com/post/Apache_configure_a_virtual_machine.html#comment</comments><wfw:comment>http://www.jsann.com/</wfw:comment><wfw:commentRss>http://www.jsann.com/feed.asp?cmt=104</wfw:commentRss><trackback:ping>http://www.jsann.com/cmd.asp?act=tb&amp;id=104&amp;key=5842469d</trackback:ping></item></channel></rss>

