<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mr.Think的博客</title>
	<atom:link href="http://mrthink.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://mrthink.net</link>
	<description>专注Web前端技术,热爱PHP,崇尚简单生活</description>
	<lastBuildDate>Wed, 29 Feb 2012 01:47:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		
<!-- Start Of Script Generated By WP-PostViews Plus -->
<script type='text/javascript' src='http://mrthink.net/wp-includes/js/jquery/jquery.js?ver=1.3.2'></script>
<script type="text/javascript">
/* <![CDATA[ */
/* ]]> */
</script>
<!-- End Of Script Generated By WP-PostViews Plus -->
	<item>
		<title>统一下拉列表样式并实现select样式高度自定义的jQuery插件</title>
		<link>http://mrthink.net/jquery-select-isimulateselect/</link>
		<comments>http://mrthink.net/jquery-select-isimulateselect/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 14:50:36 +0000</pubDate>
		<dc:creator>Mr.Think</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jquery下拉列表]]></category>
		<category><![CDATA[jQuery插件]]></category>
		<category><![CDATA[select样式]]></category>
		<category><![CDATA[下拉列表样式]]></category>
		<category><![CDATA[自定义select样式]]></category>

		<guid isPermaLink="false">http://mrthink.net/?p=1293</guid>
		<description><![CDATA[好像很久没有更新过博客了，哈～
发布一款最近写的jQuery小插件，用于统一下拉表样式并实现select样式高度自定义。select样式如同input[type=file]一样，各系统平台各浏览器显示的都不一样，特别是ie～一切影响美感的东西较真的UI设计狮们是不会妥协的。兵来将挡，水来土淹，为了保持最近一个公司项目中部分下拉列表的美观统一，用一种变通的方式为select穿上一套标准的新衣：不论平台不论浏览器样式统一、样式高度自定义、不破坏select原有结构与功能（这意味着后端程序仍可像调用普通select那样取值）。

原理无须多讲，在需要改变样式的select后插入一个div容器，同时隐藏掉select。然后把select的相关信息（optgroup/option/value/selected等）取出来用dl展现，如此一来，改变div容器中元素样式即可。记得前年写过一个用input[type=hidden]存值，用dl模拟下拉列表的插件。两者原理差不多，只是本文中的可能更人性化，使用起来更方便些。
jQuery代码：点此查看样列

;(function($){
    /*
     * 统一select样式并实现样式高度自定义的jQuery插件@Mr.Think(http://mrthink.net/)
     */
    $.fn.iSimulateSelect=function(iSet){
        iSet=$.extend({
            selectBoxCls:'i_selectbox', //string类型,外围class名
            curSCls:'i_currentselected',//string类型,默认显示class名
   [...]]]></description>
			<content:encoded><![CDATA[<p>好像很久没有更新过博客了，哈～<br />
发布一款最近写的jQuery小插件，用于统一下拉表样式并实现select样式高度自定义。select样式如同input[type=file]一样，各系统平台各浏览器显示的都不一样，特别是ie～一切影响美感的东西较真的UI设计狮们是不会妥协的。兵来将挡，水来土淹，为了保持最近一个公司项目中部分下拉列表的美观统一，用一种变通的方式为select穿上一套标准的新衣：不论平台不论浏览器样式统一、样式高度自定义、不破坏select原有结构与功能（这意味着后端程序仍可像调用普通select那样取值）。<br />
<img src="http://mrthink.net/wp-content/uploads/2012/02/iSimulateSelect.jpg" alt="" title="iSimulateSelect" width="500" height="47" class="aligncenter size-full wp-image-1295" /><br />
原理无须多讲，在需要改变样式的select后插入一个div容器，同时隐藏掉select。然后把select的相关信息（optgroup/option/value/selected等）取出来用dl展现，如此一来，改变div容器中元素样式即可。记得前年写过一个<a href="http://mrthink.net/jquery-plugin-iselect/">用input[type=hidden]存值，用dl模拟下拉列表的插件</a>。两者原理差不多，只是本文中的可能更人性化，使用起来更方便些。<br />
<strong>jQuery代码：</strong><span class="demo"><a href="http://mrthink.net/demo/ijq20120228.html" target="_blank">点此查看样列</a></span></p>
<pre class="brush: js;">
;(function($){
    /*
     * 统一select样式并实现样式高度自定义的jQuery插件@Mr.Think(http://mrthink.net/)
     */
    $.fn.iSimulateSelect=function(iSet){
        iSet=$.extend({
            selectBoxCls:'i_selectbox', //string类型,外围class名
            curSCls:'i_currentselected',//string类型,默认显示class名
            optionCls:'i_selectoption',//string类型,下拉列表class名
            selectedCls:'selected',//string类型,当前选中class名
            width:222,//number类型，模拟select的宽度
            height:300,//number类型，模拟select的最大高度
            zindex:20//层级顺序
        },iSet||{});
        this.hide();
        return this.each(function(){
           var self=this;
           var thisCurVal,thisSelect,cIndex=0;
           //计算模拟select宽度
           if(iSet.width==0){
              iSet.width=$(self).width();
           }
           var html='&lt;div class="'+iSet.selectBoxCls+'" style="z-index:'+iSet.zindex+'"&gt;&lt;div class="'+iSet.curSCls+'" style="width:'+iSet.width+'px"&gt;'+$(self).find('option:selected').text()+'&lt;/div&gt;&lt;dl class="'+iSet.optionCls+'" style="display:none;width:'+iSet.width+'px"&gt;';
           //判断select中是否有optgroup
           //用dt替代optgroup，用dd替代option
           if($(self).find('optgroup').size()&gt;0){
               $(this).find('optgroup').each(function(){
                   html+='&lt;dt&gt;'+$(this).attr('label')+'&lt;/dt&gt;';
                   $(this).find('option').each(function(){
                        if($(this).is(':selected')){
                          html+='&lt;dd class="'+iSet.selectedCls+'"&gt;'+$(this).text()+'&lt;/dd&gt;';
                       }else{
                          html+='&lt;dd&gt;'+$(this).text()+'&lt;/dd&gt;';
                       }
                   });
               });
           }else{
               $(this).find('option').each(function(){
                   if($(this).is(':selected')){
                      html+='&lt;dd class="'+iSet.selectedCls+'"&gt;'+$(this).text()+'&lt;/dd&gt;';
                   }else{
                      html+='&lt;dd&gt;'+$(this).text()+'&lt;/dd&gt;';
                   }
               });
           }
           //将模拟dl插入到select后面
           $(self).after(html);
           //当前模拟select外围box元素
           thisBox=$(self).next('.'+iSet.selectBoxCls);
           //当前模拟select初始值元素
           thisCurVal=thisBox.find('.'+iSet.curSCls);
           //当前模拟select列表
           thisSelect=thisBox.find('.'+iSet.optionCls);
           /*
           若同页面还有其他原生select,请前往https://github.com/brandonaaron/bgiframe下载bgiframe，同时在此处调用thisSelect.bgiframe()
            */
           //thisSelect.bgiframe();

           //弹出模拟下拉列表
           thisCurVal.click(function(){
              $('.'+iSet.optionCls).hide();
              $('.'+iSet.selectBoxCls).css('zIndex',iSet.zindex);
              $(self).next('.'+iSet.selectBoxCls).css('zIndex',iSet.zindex+1);
              thisSelect.show();
           });
           //若模拟select高度超出限定高度，则自动overflow-y:auto
           if(thisSelect.height()&gt;iSet.height){
               thisSelect.height(iSet.height);
           }
           //模拟列表点击事件-赋值-改变y坐标位置-...
           thisSelect.find('dd').click(function(){
               $(this).addClass(iSet.selectedCls).siblings().removeClass(iSet.selectedCls);
               cIndex=thisSelect.find('dd').index(this);
               thisCurVal.text($(this).text());
               $(self).find('option').eq(cIndex).attr('selected','selected');
               $('.'+iSet.selectBoxCls).css('zIndex',iSet.zindex);
               thisSelect.hide();
           });
           //非模拟列表处点击隐藏模拟列表
           //$(document)点击事件不兼容部分移动设备
           $('html,body').click(function(e){
                if(e.target.className.indexOf(iSet.curSCls)==-1){
                  thisSelect.hide();
                  $('.'+iSet.selectBoxCls).css('zIndex',iSet.zindex);
              }
           });
           //取消模块列表处取消默认事件
           thisSelect.click(function(e){
              e.stopPropagation();
           });
        });
    }
})(jQuery);
</pre>
<p><strong>如何调用？</strong><br />
1、在页面中引入上面的插件代码；<br />
2、<strong>$(select).iSimulateSelect({&#8230;});</strong><br />
3、相关参数及功能，请参考插件中的注释说明。</p>
<p>若在ie6下，同页面中有未调用插件元素，为避免被原生select遮盖，请下载bgiframe插件，并在代码中关于bgiframe调用的公位置取消注释。另外，在调用插件的select后面插入的是一个相对定位元素，如果select前后还有其他行内元素，尽量使用float定位，或者给select外围加一个容器再进行绝对定位。</p>
]]></content:encoded>
			<wfw:commentRss>http://mrthink.net/jquery-select-isimulateselect/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>【上海】急募前端攻城师一名</title>
		<link>http://mrthink.net/jobs-frontend-tworing/</link>
		<comments>http://mrthink.net/jobs-frontend-tworing/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 11:46:02 +0000</pubDate>
		<dc:creator>Mr.Think</dc:creator>
				<category><![CDATA[招聘]]></category>
		<category><![CDATA[上海前端]]></category>
		<category><![CDATA[前端招聘]]></category>

		<guid isPermaLink="false">http://mrthink.net/?p=1286</guid>
		<description><![CDATA[帮朋友公司招的，偏开发，公司前景和发展状况都不错。
一些要求：
1、不拘泥于学历经验男女老少，但一定要专注专业；
2、熟练掌握并运用前端各项必备技能，诸如xhtml、css、js等；
3、如果你对上面的要求不知所云，也不清楚前端攻城师的职责，那说明你不适合这个职位，请绕行。
联系及薪资
薪资：实力决定报酬，5000起，上不封顶，外加资金福利。
欢迎投送简历：cnbluebird#gmail.com 或 306779974#qq.com。
]]></description>
			<content:encoded><![CDATA[<p>帮朋友公司招的，偏开发，公司前景和发展状况都不错。<br />
<strong>一些要求：</strong><br />
1、不拘泥于学历经验男女老少，但一定要专注专业；<br />
2、熟练掌握并运用前端各项必备技能，诸如xhtml、css、js等；<br />
3、如果你对上面的要求不知所云，也不清楚前端攻城师的职责，那说明你不适合这个职位，请绕行。</p>
<p><strong>联系及薪资</strong><br />
薪资：实力决定报酬，<strong><em>5000起，上不封顶</em></strong>，外加资金福利。<br />
欢迎投送简历：<strong><em>cnbluebird#gmail.com 或 306779974#qq.com</em></strong>。</p>
]]></content:encoded>
			<wfw:commentRss>http://mrthink.net/jobs-frontend-tworing/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>智讯互动高薪招募IOS开发人员和PHP开发人员</title>
		<link>http://mrthink.net/jobs-wit-ios-php/</link>
		<comments>http://mrthink.net/jobs-wit-ios-php/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 06:30:11 +0000</pubDate>
		<dc:creator>Mr.Think</dc:creator>
				<category><![CDATA[招聘]]></category>
		<category><![CDATA[ios招聘]]></category>
		<category><![CDATA[php招聘]]></category>
		<category><![CDATA[智讯互动]]></category>
		<category><![CDATA[西安招聘]]></category>

		<guid isPermaLink="false">http://mrthink.net/?p=1276</guid>
		<description><![CDATA[我们诚挚的邀请优秀的人才加盟，并为他们创造尽量宽松、愉快的工作环境；
我们推崇专注而高效的工作，轻松开放的沟通，用创造性的想法解决问题；
我们提供让你在这个城市里能够体面生活的薪水。
在智讯互动，有艺术生、文科生、理科生、退学生，还有猫。有人热衷相声表演，有人钻研佛教文化；也有人喜欢泡淘宝和豆瓣。我们鼓励背景各异的人在此互相分享，激荡创造力。
西安，智讯互动，热切求贤。
以下职位不问出处，只看实力。我们提供远高于西安同行业水准的工资。只要有实力，薪水由你定。录用者享受五险一金+年终奖+多种人性化福利。
简历投送：info#zhixunhudong.com 或 cnbluebird#gmail.com
IOS开发工程师1-2人
1、iOS方向应用项目开发；
2、一年以上相关工作经验；
3、熟悉Objective-C,熟悉Cocoa开发，熟练掌握XCode、Interface Builder等工具；能熟练进行网络和UI方面的设计开发；
4、具备TCP/IP网络通信开发经验者或熟悉C/C++项目经验者佳；熟悉xml解析，了解并有Webservice使用、开发经验；
5、有网上支付项目经验、有openGL开发经验者优先；
6、高效、专注、诚实、负责，能承受高强度工作。
PHP开发工程师1-2人
1、只招猛人，菜鸟绕行！
2、高效、专注、诚实、负责，能承受高强度工作；
3、精通PHP+MySQL，熟悉WAMP开发流程,能写优质的代码；
4、一年以上商用网站开发经验，熟悉XHTML/CSS/JAVASCRIPT/AJAX及HTML5&#038;CSS3技术者优先。
]]></description>
			<content:encoded><![CDATA[<p>我们诚挚的邀请优秀的人才加盟，并为他们创造尽量宽松、愉快的工作环境；<br />
我们推崇专注而高效的工作，轻松开放的沟通，用创造性的想法解决问题；<br />
我们提供让你在这个城市里能够体面生活的薪水。<br />
在智讯互动，有艺术生、文科生、理科生、退学生，还有猫。有人热衷相声表演，有人钻研佛教文化；也有人喜欢泡淘宝和豆瓣。我们鼓励背景各异的人在此互相分享，激荡创造力。<br />
西安，智讯互动，热切求贤。<br />
以下职位不问出处，只看实力。我们提供远高于西安同行业水准的工资。只要有实力，薪水由你定。录用者享受五险一金+年终奖+多种人性化福利。<br />
<strong><em>简历投送：info#zhixunhudong.com 或 cnbluebird#gmail.com</em></strong><br />
<strong>IOS开发工程师1-2人</strong><br />
1、iOS方向应用项目开发；<br />
2、一年以上相关工作经验；<br />
3、熟悉Objective-C,熟悉Cocoa开发，熟练掌握XCode、Interface Builder等工具；能熟练进行网络和UI方面的设计开发；<br />
4、具备TCP/IP网络通信开发经验者或熟悉C/C++项目经验者佳；熟悉xml解析，了解并有Webservice使用、开发经验；<br />
5、有网上支付项目经验、有openGL开发经验者优先；<br />
6、高效、专注、诚实、负责，能承受高强度工作。</p>
<p><strong>PHP开发工程师1-2人</strong><br />
1、只招猛人，菜鸟绕行！<br />
2、高效、专注、诚实、负责，能承受高强度工作；<br />
3、精通PHP+MySQL，熟悉WAMP开发流程,能写优质的代码；<br />
4、一年以上商用网站开发经验，熟悉XHTML/CSS/JAVASCRIPT/AJAX及HTML5&#038;CSS3技术者优先。</p>
]]></content:encoded>
			<wfw:commentRss>http://mrthink.net/jobs-wit-ios-php/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>点击加减或手动改变表单值(支持键盘控制)的jQuery插件</title>
		<link>http://mrthink.net/jquery-vary-input-value/</link>
		<comments>http://mrthink.net/jquery-vary-input-value/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 11:42:15 +0000</pubDate>
		<dc:creator>Mr.Think</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery插件]]></category>
		<category><![CDATA[点击减小值]]></category>
		<category><![CDATA[点击增加值]]></category>
		<category><![CDATA[购物数量插件]]></category>
		<category><![CDATA[购物车常用jQuery]]></category>
		<category><![CDATA[键盘控制]]></category>

		<guid isPermaLink="false">http://mrthink.net/?p=1263</guid>
		<description><![CDATA[大多电子商务网站购物车页面，都有通过点击来增减商品数量的功能，特地根据常规功能写了一个jQuery插件。

实现的功能：
1、可通过点击增加或减小定义的input值；
2、可手动输入input值，且支持键盘控制：上右为加，下左为减；
3、可设定表单的最大最小值，并对input值进行了非负整数判断；
4、定义了回调函数，输出表单最后的input值和所改变input的索引值。也可在插件中稍稍修改一下，把想返回的值传到一个hidden input中；
点此查看样列
jQuery代码：

$.fn.iVaryVal=function(iSet,CallBack){
	/*
	 * Minus:点击元素--减小
	 * Add:点击元素--增加
	 * Input:表单元素
	 * Min:表单的最小值，非负整数
	 * Max:表单的最大值，正整数
	 */
	iSet=$.extend({Minus:$('.J_minus'),Add:$('.J_add'),Input:$('.J_input'),Min:0,Max:20},iSet);
	var C=null,O=null;
	//插件返回值
	var $CB={};
	//增加
	iSet.Add.each(function(i){
		$(this).click(function(){
			O=parseInt(iSet.Input.eq(i).val());
			(O+1iSet.Max){
					$(this).val(iSet.Max);
				}
			}
			if(O&#60;iSet.Min){
				$(this).val(iSet.Min);
			}
			//输出当前改变后的值
			$CB.val=$(this).val();
			$CB.index=iSet.Input.index(this);
			//回调函数
			if (typeof CallBack == 'function') {
                CallBack($CB.val,$CB.index);
            }
		}
	});
}

若有bug，请以评论形式及时反馈～
]]></description>
			<content:encoded><![CDATA[<p>大多电子商务网站购物车页面，都有通过点击来增减商品数量的功能，特地根据常规功能写了一个jQuery插件。<br />
<img src="http://mrthink.net/wp-content/uploads/2011/12/i201112091.jpg" alt="购物车常用功能" title="购物车常用功能" width="628" height="71" class="aligncenter size-full wp-image-1269" /><br />
<strong>实现的功能：</strong><br />
1、可通过点击增加或减小定义的input值；<br />
2、可手动输入input值，且支持键盘控制：上右为加，下左为减；<br />
3、可设定表单的最大最小值，并对input值进行了非负整数判断；<br />
4、定义了回调函数，输出表单最后的input值和所改变input的索引值。也可在插件中稍稍修改一下，把想返回的值传到一个hidden input中；<br />
<span class="demo"><a href="http://mrthink.net/demo/ijq20111209.htm" target="_blank">点此查看样列</a></span><br />
<strong>jQuery代码：</strong></p>
<pre class="brush: js;">
$.fn.iVaryVal=function(iSet,CallBack){
	/*
	 * Minus:点击元素--减小
	 * Add:点击元素--增加
	 * Input:表单元素
	 * Min:表单的最小值，非负整数
	 * Max:表单的最大值，正整数
	 */
	iSet=$.extend({Minus:$('.J_minus'),Add:$('.J_add'),Input:$('.J_input'),Min:0,Max:20},iSet);
	var C=null,O=null;
	//插件返回值
	var $CB={};
	//增加
	iSet.Add.each(function(i){
		$(this).click(function(){
			O=parseInt(iSet.Input.eq(i).val());
			(O+1<=iSet.Max) || (iSet.Max==null) ? iSet.Input.eq(i).val(O+1) : iSet.Input.eq(i).val(iSet.Max);
			//输出当前改变后的值
			$CB.val=iSet.Input.eq(i).val();
			$CB.index=i;
			//回调函数
			if (typeof CallBack == 'function') {
                CallBack($CB.val,$CB.index);
            }
		});
	});
	//减少
	iSet.Minus.each(function(i){
		$(this).click(function(){
			O=parseInt(iSet.Input.eq(i).val());
			O-1&lt;iSet.Min ? iSet.Input.eq(i).val(iSet.Min) : iSet.Input.eq(i).val(O-1);
			$CB.val=iSet.Input.eq(i).val();
			$CB.index=i;
			//回调函数
			if (typeof CallBack == 'function') {
				CallBack($CB.val,$CB.index);
		  	}
		});
	});
	//手动
	iSet.Input.bind({
		'click':function(){
			O=parseInt($(this).val());
			$(this).select();
		},
		'keyup':function(e){
			if($(this).val()!=''){
				C=parseInt($(this).val());
				//非负整数判断
				if(/^[1-9]\d*|0$/.test(C)){
					$(this).val(C);
					O=C;
				}else{
					$(this).val(O);
				}
			}
			//键盘控制：上右--加，下左--减
			if(e.keyCode==38 || e.keyCode==39){
				iSet.Add.eq(iSet.Input.index(this)).click();
			}
			if(e.keyCode==37 || e.keyCode==40){
				iSet.Minus.eq(iSet.Input.index(this)).click();
			}
			//输出当前改变后的值
			$CB.val=$(this).val();
			$CB.index=iSet.Input.index(this);
			//回调函数
			if (typeof CallBack == 'function') {
                CallBack($CB.val,$CB.index);
            }
		},
		'blur':function(){
			$(this).trigger('keyup');
			if($(this).val()==''){
				$(this).val(O);
			}
			//判断输入值是否超出最大最小值
			if(iSet.Max){
				if(O>iSet.Max){
					$(this).val(iSet.Max);
				}
			}
			if(O&lt;iSet.Min){
				$(this).val(iSet.Min);
			}
			//输出当前改变后的值
			$CB.val=$(this).val();
			$CB.index=iSet.Input.index(this);
			//回调函数
			if (typeof CallBack == 'function') {
                CallBack($CB.val,$CB.index);
            }
		}
	});
}
</pre>
<p>若有bug，请以评论形式及时反馈～</p>
]]></content:encoded>
			<wfw:commentRss>http://mrthink.net/jquery-vary-input-value/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>多屏自动切换jQuery效果，可手动切换</title>
		<link>http://mrthink.net/jquery-multi-screen-switching/</link>
		<comments>http://mrthink.net/jquery-multi-screen-switching/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 05:50:27 +0000</pubDate>
		<dc:creator>Mr.Think</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery幻灯片]]></category>
		<category><![CDATA[多屏切换]]></category>
		<category><![CDATA[自动切换]]></category>

		<guid isPermaLink="false">http://mrthink.net/?p=1254</guid>
		<description><![CDATA[油翁酌油沥钱，自钱孔入而钱不湿。因曰：“我亦无他， 唯手熟尔”。
好久没有好好的写过代码了，博客也有好几个月没有更新。忙于工作，忙于人身大事，忙于琐碎。最近相对清闲，正好一个做后端的朋友求助于我，帮他写一个新蛋网首页多屏自动切换效果。顺便分享之。

思路很简单，详见代码。本来是想封装成插件的，但一想，这种效果，也不大可能同时用多个，就偷懒直接写了。相关自定义的变量都放在一起了，一些功能函数也都有注释。自测兼容性良好，若有BUG请反馈。
点此查看样列
jQuery代码：

	var imgField=$('#J_imgList');
	var imgList=$('#J_imgList>li');
	var navField=$('#J_navList');
	var navList=$('#J_navList>li');
	var btnPrev=$('#J_prev');
	var btnNext=$('#J_next');
	var turnPage=4;//每屏显示数
	var T=5000;//切换间隔时间
	var turnT=300;//animate时间
	var N=0;//图片初始索引
	var P=1;//屏初始索引

	var goFun=null;
	var hoverFun=null;
	var triggerFun=null;
	var delayFun=null
	var navListW=navList.outerWidth(true);
	var turnPages=Math.ceil(navList.size()/turnPage);
	//初始图片区域高度与标题区域宽度
	imgField.height(imgList.size()*imgList.height());
	navField.width(navList.size()*navListW);
	//初始自动切换
	GO();
	//自动切换
	function GO() {
		imgField.stop().animate({
			marginTop:-N*(imgList.height())
		},turnT);
		navList.eq(N).addClass('hover').siblings().removeClass('hover');
		if(N%turnPage==0) {
			navField.stop().animate({
				marginLeft:-N*navListW+'px'
			},turnT);
		}
		N++;
		N= N>=imgList.size()?0:N;
		P=Math.ceil(N/turnPage);
		goFun=setTimeout(GO,T);
	}

	//停止切换
	function STOP() {
		clearTimeout(goFun);
	}

	//标题划过移出
	navList.hover( function() {
		clearTimeout(delayFun);
		STOP();
		N=navList.index(this);
		imgField.stop().animate({
			marginTop:-N*(imgList.height())
		},turnT);
		$(this).addClass('hover').siblings().removeClass('hover');
	}, function() {
		N++;
		delayFun=setTimeout(GO,T)
	});
	//图片划过移出
	imgList.hover( function() {
		N=imgList.index(this);
		navList.eq(N).trigger('mouseover');
	}, function() {
		navList.eq(N).trigger('mouseleave');
	});
	//左切换
	btnPrev.click( function() {
		if(P==1) {
			navField.animate({
				marginLeft:-turnPage*navListW*(turnPages-1)+'px'
			},turnT);
			P=turnPages;
		} else {
			STOP();
			P--;
			navField.animate({
				marginLeft:-turnPage*navListW*(P-1)+'px'
			},turnT);
		}
		navList.eq((P-1)*turnPage).trigger('mouseover');
		GO();
	});
	//右切换
	btnNext.click( function() {
		if(P==turnPages) {
			navField.animate({
				marginLeft:0
			},turnT);
			P=1;
		} else {
			STOP();
			P++;
			navField.animate({
				marginLeft:-turnPage*navListW*P+'px'
			});
		}
		navList.eq((P-1)*turnPage).trigger('mouseover');
		GO();
	});

]]></description>
			<content:encoded><![CDATA[<p>油翁酌油沥钱，自钱孔入而钱不湿。因曰：“我亦无他， 唯手熟尔”。<br />
好久没有好好的写过代码了，博客也有好几个月没有更新。忙于工作，忙于人身大事，忙于琐碎。最近相对清闲，正好一个做后端的朋友求助于我，帮他写一个新蛋网首页多屏自动切换效果。顺便分享之。<br />
<img src="http://mrthink.net/wp-content/uploads/2011/11/20111105.jpg" alt="多屏自动切换jQuery效果" title="多屏自动切换jQuery效果" width="700" height="350" class="aligncenter size-full wp-image-1256" /><br />
思路很简单，详见代码。本来是想封装成插件的，但一想，这种效果，也不大可能同时用多个，就偷懒直接写了。相关自定义的变量都放在一起了，一些功能函数也都有注释。自测兼容性良好，若有BUG请反馈。<br />
<span class="demo"><a target="_blank" href="http://mrthink.net/demo/ijq20111105.htm">点此查看样列</a></span><br />
<strong>jQuery代码：</strong></p>
<pre class="brush: js;">
	var imgField=$('#J_imgList');
	var imgList=$('#J_imgList>li');
	var navField=$('#J_navList');
	var navList=$('#J_navList>li');
	var btnPrev=$('#J_prev');
	var btnNext=$('#J_next');
	var turnPage=4;//每屏显示数
	var T=5000;//切换间隔时间
	var turnT=300;//animate时间
	var N=0;//图片初始索引
	var P=1;//屏初始索引

	var goFun=null;
	var hoverFun=null;
	var triggerFun=null;
	var delayFun=null
	var navListW=navList.outerWidth(true);
	var turnPages=Math.ceil(navList.size()/turnPage);
	//初始图片区域高度与标题区域宽度
	imgField.height(imgList.size()*imgList.height());
	navField.width(navList.size()*navListW);
	//初始自动切换
	GO();
	//自动切换
	function GO() {
		imgField.stop().animate({
			marginTop:-N*(imgList.height())
		},turnT);
		navList.eq(N).addClass('hover').siblings().removeClass('hover');
		if(N%turnPage==0) {
			navField.stop().animate({
				marginLeft:-N*navListW+'px'
			},turnT);
		}
		N++;
		N= N>=imgList.size()?0:N;
		P=Math.ceil(N/turnPage);
		goFun=setTimeout(GO,T);
	}

	//停止切换
	function STOP() {
		clearTimeout(goFun);
	}

	//标题划过移出
	navList.hover( function() {
		clearTimeout(delayFun);
		STOP();
		N=navList.index(this);
		imgField.stop().animate({
			marginTop:-N*(imgList.height())
		},turnT);
		$(this).addClass('hover').siblings().removeClass('hover');
	}, function() {
		N++;
		delayFun=setTimeout(GO,T)
	});
	//图片划过移出
	imgList.hover( function() {
		N=imgList.index(this);
		navList.eq(N).trigger('mouseover');
	}, function() {
		navList.eq(N).trigger('mouseleave');
	});
	//左切换
	btnPrev.click( function() {
		if(P==1) {
			navField.animate({
				marginLeft:-turnPage*navListW*(turnPages-1)+'px'
			},turnT);
			P=turnPages;
		} else {
			STOP();
			P--;
			navField.animate({
				marginLeft:-turnPage*navListW*(P-1)+'px'
			},turnT);
		}
		navList.eq((P-1)*turnPage).trigger('mouseover');
		GO();
	});
	//右切换
	btnNext.click( function() {
		if(P==turnPages) {
			navField.animate({
				marginLeft:0
			},turnT);
			P=1;
		} else {
			STOP();
			P++;
			navField.animate({
				marginLeft:-turnPage*navListW*P+'px'
			});
		}
		navList.eq((P-1)*turnPage).trigger('mouseover');
		GO();
	});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mrthink.net/jquery-multi-screen-switching/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>碎</title>
		<link>http://mrthink.net/ilife-0000000/</link>
		<comments>http://mrthink.net/ilife-0000000/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 14:29:00 +0000</pubDate>
		<dc:creator>Mr.Think</dc:creator>
				<category><![CDATA[记录]]></category>

		<guid isPermaLink="false">http://mrthink.net/?p=1252</guid>
		<description><![CDATA[离上次写博客整整两月了。
工作，忙，累，懒散，分裂。理由，也是借口。
我还活着。从明天起，要做一个勤劳的人。抽时间学习，抽时间分享文章。
HTML5，架构，用研，JS。碎碎的。
不进，即退。
]]></description>
			<content:encoded><![CDATA[<p>离上次写博客整整两月了。<br />
工作，忙，累，懒散，分裂。理由，也是借口。</p>
<p>我还活着。从明天起，要做一个勤劳的人。抽时间学习，抽时间分享文章。<br />
HTML5，架构，用研，JS。碎碎的。</p>
<p>不进，即退。</p>
]]></content:encoded>
			<wfw:commentRss>http://mrthink.net/ilife-0000000/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>利用label标签和CSS美化文件上传表单(不兼容IE6)</title>
		<link>http://mrthink.net/css-input-label-file/</link>
		<comments>http://mrthink.net/css-input-label-file/#comments</comments>
		<pubDate>Sun, 15 May 2011 15:21:23 +0000</pubDate>
		<dc:creator>Mr.Think</dc:creator>
				<category><![CDATA[CSS+HTML]]></category>
		<category><![CDATA[文件选择表单]]></category>
		<category><![CDATA[美化上传表单]]></category>

		<guid isPermaLink="false">http://mrthink.net/?p=1237</guid>
		<description><![CDATA[最近着实很忙，匆忙间有一个月没更新博客了。
文件上传类型表单&#60;input type=&#8221;file&#8221; /&#62;是一个让很多前端开发者纠结过的表单类型，因为它是一个无法单纯用CSS给它定义兼容的样式。上周的工作中有个批量上传图片的页面，又遇到了这个问题，于是，今天把我的解决方案奉献给大家：利用label标签与CSS共同打造一个样式可控的并兼容IE6之外主流浏览器的上传表单。
实现思路通俗易懂：点此查看样例

首先，我们要新增一个与file相册大小的button按钮，然后利用label为初始的file类型表单定义标注(关于label的解释与用法，此处不详解，不了解的请自行查阅HTML手册)。如此一来，一个可以触发选择文件表单的按钮就出来了。接下来，相信很多人都知道怎么做了。
有了一个可以触发file表单的按钮，只要通过绝对定位将file表单从文档流中拖出，然后用z-index属性将它的层级提升到比button按钮高，同时将file表单的透明度置为0，这样一来，file表单就正好覆盖在button按钮上了，并且可触发选择文件表单。此处有一点需要说明，FireFox中是无法通过width来设定宽度值的，所以需要用input的size值来设定file表单宽度值。
最后，附上样例中的成型代码：
HTML代码:



	



CSS代码:

.btns{position:relative}
.btns input{width:120px;height:30px}
.btns .btn_file_molding{position:absolute;left:0;top:0;z-index:1;border:0 none;filter:alpha(opacity=0);opacity:0}/*file的z-index要大于button*/

几个注意的细节：
1.file表单与button按钮的高宽一定要相同；
2.因各浏览器对file表单的表现不一致，其边框一定要隐藏掉，以免出现各浏览器不兼容问题；
3.firefox中直接通过样式定义width是无效的，需要用size设置file宽度；
4.IE6可用JS为button绑定file表单的点击事件，此处不详述。
另，本文提供的是一种主体思路，你可以在此思路上做进一步的美化扩展，比如加背景图片文字样式等等。
]]></description>
			<content:encoded><![CDATA[<p>最近着实很忙，匆忙间有一个月没更新博客了。<br />
文件上传类型表单&lt;input type=&#8221;file&#8221; /&gt;是一个让很多前端开发者纠结过的表单类型，因为它是一个无法单纯用CSS给它定义兼容的样式。上周的工作中有个批量上传图片的页面，又遇到了这个问题，于是，今天把我的解决方案奉献给大家：利用label标签与CSS共同打造一个样式可控的并兼容IE6之外主流浏览器的上传表单。<br />
实现思路通俗易懂：<span class="demo"><a target="_blank" href="http://mrthink.net/demo/icss20110515.htm">点此查看样例</a></span><br />
<img src="http://mrthink.net/wp-content/uploads/2011/05/20110515.gif" alt="利用LABEL与CSS美化文件上传表单" title="利用LABEL与CSS美化文件上传表单" width="317" height="255" class="aligncenter size-full wp-image-1240" /><br />
首先，我们要新增一个与file相册大小的button按钮，然后利用label为初始的file类型表单定义标注(关于label的解释与用法，此处不详解，不了解的请自行查阅HTML手册)。如此一来，一个可以触发选择文件表单的按钮就出来了。接下来，相信很多人都知道怎么做了。<br />
有了一个可以触发file表单的按钮，只要通过绝对定位将file表单从文档流中拖出，然后用z-index属性将它的层级提升到比button按钮高，同时将file表单的透明度置为0，这样一来，file表单就正好覆盖在button按钮上了，并且可触发选择文件表单。此处有一点需要说明，FireFox中是无法通过width来设定宽度值的，所以需要用input的size值来设定file表单宽度值。<br />
最后，附上样例中的成型代码：<br />
<strong>HTML代码</strong>:</p>
<pre class="brush:html">
<div class="btns">
<input type="file" size="6" class="btn_file_molding" id="input_file_molding" />
	<label for="input_file_molding">
<input type="button" value="添加照片" /></label>
</div>
</pre>
<p><strong>CSS代码</strong>:</p>
<pre class="brush:css">
.btns{position:relative}
.btns input{width:120px;height:30px}
.btns .btn_file_molding{position:absolute;left:0;top:0;z-index:1;border:0 none;filter:alpha(opacity=0);opacity:0}/*file的z-index要大于button*/
</pre>
<p>几个注意的细节：<br />
1.file表单与button按钮的高宽一定要相同；<br />
2.因各浏览器对file表单的表现不一致，其边框一定要隐藏掉，以免出现各浏览器不兼容问题；<br />
3.firefox中直接通过样式定义width是无效的，需要用size设置file宽度；<br />
4.IE6可用JS为button绑定file表单的点击事件，此处不详述。</p>
<p>另，本文提供的是一种主体思路，你可以在此思路上做进一步的美化扩展，比如加背景图片文字样式等等。</p>
]]></content:encoded>
			<wfw:commentRss>http://mrthink.net/css-input-label-file/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>HTML 5的革新：结构之美</title>
		<link>http://mrthink.net/html5-simple-structure/</link>
		<comments>http://mrthink.net/html5-simple-structure/#comments</comments>
		<pubDate>Sat, 09 Apr 2011 14:46:11 +0000</pubDate>
		<dc:creator>Mr.Think</dc:creator>
				<category><![CDATA[CSS+HTML]]></category>

		<guid isPermaLink="false">http://mrthink.net/?p=1195</guid>
		<description><![CDATA[前言
HTML 5如同一场革命，正在Web2.0后时代轰轰烈烈的进行着。
HTML 5是什么，无须我在这里赘述了。对于HTML 5的革新，按我的理解，可以总结为语义明确的标签体系、化繁为简的富媒体支持、神奇的本地数据存储技术、不需要插件的富动画(canvas)、强大的API支持。总之，HTML 5让人机交互，人网交互变得更加舒适，贴合用户。以往对富媒体应用与本存储的支持乏力也不再是浏览器的切肤之痛。将Web从内容平台推向标准化的应用平台，并一统各在平台阵营的标准，才是HTML 5革命的初衷。
本文，我就抛砖引玉，阐述HTML 5的革新之一：语义更明确简洁的结构。
从&#8221;头&#8221;说起
一个标准的XHTML头部代码应该是这样：

&#60;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&#62;
&#60;html xmlns="http://www.w3.org/1999/xhtml"&#62;
&#60;head&#62;
&#60;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&#62;
&#60;/head&#62;

你能记住吗？你会去死记硬背吗？当然不会！我们只需要机械的复制粘贴即可。
再看看一个标准的HTML 5头部是如何的：

&#60;!doctype html&#62;
&#60;meta charset=gb2312&#62;

孰繁孰简，就不用我说了。是的，HTML 5的头部可以如此简单，可以轻易的记住！并且，可以忽略大小写，引号以及最后一个尖括号前的反斜线。
为什么可以如此松散？其实，如果把XHTML当成text/html发送，浏览器一样可以很好的解析，浏览器并不在乎代码的语法。所以，HTML 5是形而上的，它可能会破坏原有的一些标准，但仍可在浏览器中很好的表现。
当然，为了团队协助与后续维护的方便，我们还是应该统一一种你喜欢的风格的写法，比如：

&#60;!doctype html&#62;
&#60;html&#62;
&#60;head&#62;
&#60;meta charset="gb2312" /&#62;
...
&#60;/head&#62;
&#60;body&#62;
...
&#60;/body&#62;
&#60;/html&#62;

另外，HTML 5虽然目前并不为所有浏览器所支持，但这个能省去100多字节(对于日PV百万级以上的站点，能省下不少的流量哦)的头部已可以完美的兼容了。如果你对浏览器解析模式有研究的话，你应该知道，页面在没有定义doctype的情况下会触发怪异模式，而只要定义了&#60;!doctype html&#62;浏览器就可以在标准模式下解析页面，而不需要指定某个类型的DTD。
新的语义化标签体系
语义化编码是一个合格前端Developer必备的技能，但随着网页的日渐丰富化，仅仅用原有的xhtml标签去语义化显然已经力不从心。上帝说：&#8221;要有光！&#8221;便有了光。于是，HTML 5提供了一系列新的标签及相应属性，以反应现代网站典型语义。实践出真理。还是写一个例子吧：

&#60;div id="header"&#62;
	&#60;div class="hgroup"&#62;
		&#60;h1&#62;网站标题&#60;/h1&#62;
		&#60;h1&#62;网站副标题&#60;/h1&#62;
	&#60;/div&#62;
	&#60;div id="nav"&#62;
		&#60;ul&#62;
			&#60;li&#62;HTML 5&#60;/li&#62;
			&#60;li&#62;CSS&#60;/li&#62;
			&#60;li&#62;JavaScript&#60;/li&#62;
		&#60;/ul&#62;
	&#60;/div&#62;
&#60;/div&#62;
&#60;!--//header end--&#62;
&#60;div id="left"&#62;
	&#60;div class="article"&#62;
		&#60;p&#62;这是一篇讲述HTML 5新结构标签的文章。&#60;/p&#62;
	&#60;/div&#62;
	&#60;div class="article"&#62;
		&#60;p&#62;这还是一篇讲述HTML 5新结构标签的文章。&#60;/p&#62;
	&#60;/div&#62;
&#60;/div&#62;
&#60;!--//left end--&#62;
&#60;div id="aside"&#62;
	&#60;h1&#62;作者简介&#60;/h1&#62;
	&#60;p&#62;Mr.Think，专注Web前端技术的凡夫俗子。&#60;/p&#62;
&#60;/div&#62;
&#60;!--//side end--&#62;
&#60;div id="footer"&#62;
页面的底部
&#60;/div&#62;
&#60;!--//footer end--&#62;

上面是一个简单的博客页面部分HTML，由头部、文章展示区、右侧栏、底部组成。编码整洁，也符合XHTML的语义化，即便是在HTML 5中也可以很好的表现。但是对浏览器来说，这就是一段没有区分开权重的代码，而不是一个让机器也能读懂语义的标签来定义相应的区块。比如，标准浏览器（比如Firefox、Chroome甚至新版的IE）都有一个快捷键可以带引客户直接跳转到页面的导航，但问题是所有的区块都是用DIV定义，并且DIV的ID值是同开发者定的，所以，浏览器并不知道哪个应该是导航链接所在区块。HTML 5新标签的出现，正好弥补了这一缺憾。那么，上面的代码，换成HTML 5就可以这样写：

&#60;header&#62;
	&#60;hgroup&#62;
		&#60;h1&#62;网站标题&#60;/h1&#62;
		&#60;h1&#62;网站副标题&#60;/h1&#62;
	&#60;/hgroup&#62;
	&#60;nav&#62;
		&#60;ul&#62;
			&#60;li&#62;HTML 5&#60;/li&#62;
			&#60;li&#62;CSS&#60;/li&#62;
			&#60;li&#62;JavaScript&#60;/li&#62;
		&#60;/ul&#62;
	&#60;/nav&#62;
&#60;/header&#62;
&#60;div id="left"&#62;
	&#60;article&#62;
		&#60;p&#62;这是一篇讲述HTML 5新结构标签的文章。&#60;/p&#62;
	&#60;/article&#62;
	&#60;article&#62;
		&#60;p&#62;这还是一篇讲述HTML 5新结构标签的文章。&#60;/p&#62;
	&#60;/article&#62;
&#60;/div&#62;
&#60;aside&#62;
	&#60;h1&#62;作者简介&#60;/h1&#62;
	&#60;p&#62;Mr.Think，专注Web前端技术的凡夫俗子。&#60;/p&#62;
&#60;/aside&#62;
&#60;footer&#62;
	网页底部
&#60;/footer&#62;

原来，HTML的页面结构可以如此之美，不用注释也能一目了然。对于浏览器，找到对应的区块也不再会茫然无措。
如何用HTML 5新标签结构化元素
通过上面的示例，我们了解到HTML 5的新标签对结构化的革新，但切换到实际使用中，该如何恰当的使用它们呢？我想这也是很多HTML 5学习者想问一个问题。如同XHTML语义化一样，HTML [...]]]></description>
			<content:encoded><![CDATA[<p><strong>前言</strong><br />
HTML 5如同一场革命，正在Web2.0后时代轰轰烈烈的进行着。<br />
HTML 5是什么，无须我在这里赘述了。对于HTML 5的革新，按我的理解，可以总结为语义明确的标签体系、化繁为简的富媒体支持、神奇的本地数据存储技术、不需要插件的富动画(canvas)、强大的API支持。总之，HTML 5让人机交互，人网交互变得更加舒适，贴合用户。以往对富媒体应用与本存储的支持乏力也不再是浏览器的切肤之痛。将Web从内容平台推向标准化的应用平台，并一统各在平台阵营的标准，才是HTML 5革命的初衷。<br />
本文，我就抛砖引玉，阐述HTML 5的革新之一：语义更明确简洁的结构。<br />
<strong>从&#8221;头&#8221;说起</strong><br />
一个标准的XHTML头部代码应该是这样：</p>
<pre class="brush:html;auto-links:false">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;
&lt;/head&gt;
</pre>
<p>你能记住吗？你会去死记硬背吗？当然不会！我们只需要机械的复制粘贴即可。<br />
再看看一个标准的HTML 5头部是如何的：</p>
<pre class="brush:html">
&lt;!doctype html&gt;
&lt;meta charset=gb2312&gt;
</pre>
<p>孰繁孰简，就不用我说了。是的，HTML 5的头部可以如此简单，可以轻易的记住！并且，可以忽略大小写，引号以及最后一个尖括号前的反斜线。<br />
为什么可以如此松散？其实，如果把XHTML当成text/html发送，浏览器一样可以很好的解析，浏览器并不在乎代码的语法。所以，HTML 5是形而上的，它可能会破坏原有的一些标准，但仍可在浏览器中很好的表现。<br />
当然，为了团队协助与后续维护的方便，我们还是应该统一一种你喜欢的风格的写法，比如：</p>
<pre class="brush:html">
&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="gb2312" /&gt;
...
&lt;/head&gt;
&lt;body&gt;
...
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>另外，HTML 5虽然目前并不为所有浏览器所支持，但这个能省去100多字节(对于日PV百万级以上的站点，能省下不少的流量哦)的头部已可以完美的兼容了。如果你对浏览器解析模式有研究的话，你应该知道，页面在没有定义doctype的情况下会触发怪异模式，而只要定义了&lt;!doctype html&gt;浏览器就可以在标准模式下解析页面，而不需要指定某个类型的DTD。<br />
<strong>新的语义化标签体系</strong><br />
语义化编码是一个合格前端Developer必备的技能，但随着网页的日渐丰富化，仅仅用原有的xhtml标签去语义化显然已经力不从心。上帝说：&#8221;要有光！&#8221;便有了光。于是，HTML 5提供了一系列新的标签及相应属性，以反应现代网站典型语义。实践出真理。还是写一个例子吧：</p>
<pre class="brush:html">
&lt;div id="header"&gt;
	&lt;div class="hgroup"&gt;
		&lt;h1&gt;网站标题&lt;/h1&gt;
		&lt;h1&gt;网站副标题&lt;/h1&gt;
	&lt;/div&gt;
	&lt;div id="nav"&gt;
		&lt;ul&gt;
			&lt;li&gt;HTML 5&lt;/li&gt;
			&lt;li&gt;CSS&lt;/li&gt;
			&lt;li&gt;JavaScript&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;!--//header end--&gt;
&lt;div id="left"&gt;
	&lt;div class="article"&gt;
		&lt;p&gt;这是一篇讲述HTML 5新结构标签的文章。&lt;/p&gt;
	&lt;/div&gt;
	&lt;div class="article"&gt;
		&lt;p&gt;这还是一篇讲述HTML 5新结构标签的文章。&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;!--//left end--&gt;
&lt;div id="aside"&gt;
	&lt;h1&gt;作者简介&lt;/h1&gt;
	&lt;p&gt;Mr.Think，专注Web前端技术的凡夫俗子。&lt;/p&gt;
&lt;/div&gt;
&lt;!--//side end--&gt;
&lt;div id="footer"&gt;
页面的底部
&lt;/div&gt;
&lt;!--//footer end--&gt;
</pre>
<p>上面是一个简单的博客页面部分HTML，由头部、文章展示区、右侧栏、底部组成。编码整洁，也符合XHTML的语义化，即便是在HTML 5中也可以很好的表现。但是对浏览器来说，这就是一段没有区分开权重的代码，而不是一个让机器也能读懂语义的标签来定义相应的区块。比如，标准浏览器（比如Firefox、Chroome甚至新版的IE）都有一个快捷键可以带引客户直接跳转到页面的导航，但问题是所有的区块都是用DIV定义，并且DIV的ID值是同开发者定的，所以，浏览器并不知道哪个应该是导航链接所在区块。HTML 5新标签的出现，正好弥补了这一缺憾。那么，上面的代码，换成HTML 5就可以这样写：</p>
<pre class="brush:html">
&lt;header&gt;
	&lt;hgroup&gt;
		&lt;h1&gt;网站标题&lt;/h1&gt;
		&lt;h1&gt;网站副标题&lt;/h1&gt;
	&lt;/hgroup&gt;
	&lt;nav&gt;
		&lt;ul&gt;
			&lt;li&gt;HTML 5&lt;/li&gt;
			&lt;li&gt;CSS&lt;/li&gt;
			&lt;li&gt;JavaScript&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/nav&gt;
&lt;/header&gt;
&lt;div id="left"&gt;
	&lt;article&gt;
		&lt;p&gt;这是一篇讲述HTML 5新结构标签的文章。&lt;/p&gt;
	&lt;/article&gt;
	&lt;article&gt;
		&lt;p&gt;这还是一篇讲述HTML 5新结构标签的文章。&lt;/p&gt;
	&lt;/article&gt;
&lt;/div&gt;
&lt;aside&gt;
	&lt;h1&gt;作者简介&lt;/h1&gt;
	&lt;p&gt;Mr.Think，专注Web前端技术的凡夫俗子。&lt;/p&gt;
&lt;/aside&gt;
&lt;footer&gt;
	网页底部
&lt;/footer&gt;
</pre>
<p>原来，HTML的页面结构可以如此之美，不用注释也能一目了然。对于浏览器，找到对应的区块也不再会茫然无措。<br />
<strong>如何用HTML 5新标签结构化元素</strong><br />
通过上面的示例，我们了解到HTML 5的新标签对结构化的革新，但切换到实际使用中，该如何恰当的使用它们呢？我想这也是很多HTML 5学习者想问一个问题。如同XHTML语义化一样，HTML 5语义化标签的使用也应该遵循：每个标签都有它特定的意义，而语义化，就是让我们在适当的位置用适当的标签，以更好的让人和机器(机器可理解为浏览器可理解为搜索引擎)都一目了然。比如header标签一般是页面的第一个区块元素(header标签也可用于类型的头部元素中，比如文章区块的标题)，包含的了页面的主题信息；nav标签一般用于包裹导航信息；footer一般用来包裹页面底部信息；等等。<br />
下面是我参考HTML 5手册列出的结构类常用新标签的语义解释及使用指引：<br />
<strong>&lt;header&gt;标签</strong><br />
手册释义：定义 section 或 document 的页眉。<br />
使用指引：一般用来包含页面头部，也可用于其他区域头部，比如article头部：</p>
<pre class="brush:html">
&lt;header&gt;
	&lt;hgroup&gt;
		&lt;h1&gt;网站标题&lt;/h1&gt;
		&lt;h1&gt;网站副标题&lt;/h1&gt;
	&lt;/hgroup&gt;
&lt;/header&gt;
</pre>
<p><strong>&lt;hgroup&gt;标签</strong><br />
手册释义：用于对网页或区段（section）的标题进行组合。<br />
使用指引：用于标题类的组合，比如文章的标题与副标题：</p>
<pre class="brush:html">
&lt;hgroup&gt;
	&lt;h1&gt;这是一篇介绍HTML 5结构标签的文章&lt;/h1&gt;
	&lt;h2&gt;HTML 5的革新&lt;/h2&gt;
&lt;/hgroup&gt;
</pre>
<p><strong>&lt;nav&gt;标签</strong><br />
手册释义：定义导航链接的部分。<br />
使用指引：用于定义页面的导航部分：</p>
<pre class="brush:html">
&lt;nav&gt;
	&lt;ul&gt;
		&lt;li&gt;HTML 5&lt;/li&gt;
		&lt;li&gt;CSS&lt;/li&gt;
		&lt;li&gt;JavaScript&lt;/li&gt;
	&lt;/ul&gt;
&lt;/nav&gt;
</pre>
<p><strong>&lt;aside&gt;标签</strong><br />
定义 article 以外的内容。aside 的内容应该与 article 的内容相关。<br />
使用指引：用于成节的内容，会在文档流中开始一个新的节，一般用于与文章内容相关的边栏：</p>
<pre class="brush:html">
&lt;aside&gt;
	&lt;h1&gt;作者简介&lt;/h1&gt;
	&lt;p&gt;Mr.Think，专注Web前端技术的凡夫俗子。&lt;/p&gt;
&lt;/aside&gt;
</pre>
<p><strong>&lt;section&gt;标签</strong><br />
手册释义：定义文档中的节（section）。比如章节、页眉、页脚或文档中的其他部分。<br />
使用指引：用于成节的内容，会在文档流中开始一个新的节：</p>
<pre class="brush:html">
&lt;section&gt;
	&lt;h1&gt;section是什么？&lt;/h1&gt;
	&lt;h2&gt;一个新的章节&lt;/h2&gt;
	&lt;article&gt;
		&lt;h2&gt;关于section&lt;/h1&gt;
		&lt;p&gt;section的介绍&lt;/p&gt;
		...
	&lt;/article&gt;
&lt;/section&gt;
</pre>
<p><strong>&lt;footer&gt;标签</strong><br />
手册释义：定义 section 或 document 的页脚。典型地，它会包含创作者的姓名、文档的创作日期以及/或者联系信息。<br />
使用指引：一般用来包裹整个页面通用底部，也可用于其他区域底部，比如article底部：</p>
<pre class="brush:html">
&lt;footer&gt;
	COPYRIGHT@Mr.Think
&lt;/footer&gt;
</pre>
<p><strong>&lt;article&gt;标签</strong><br />
手册释义：定义外部的内容。比如来自一个外部的新闻提供者的一篇新的文章，或者来自 blog 的文本，或者是来自论坛的文<br />
本。亦或是来自其他外部源内容。<br />
使用指引：顾名思义，一般用于文章区块：</p>
<pre class="brush:html">
&lt;article&gt;
	&lt;header&gt;
		&lt;hgroup&gt;
			&lt;h1&gt;这是一篇介绍HTML 5结构标签的文章&lt;/h1&gt;
			&lt;h2&gt;HTML 5的革新&lt;/h2&gt;
		&lt;/hgroup&gt;
		&lt;time datetime="2011-03-20"&gt;2011.03.20&lt;/time&gt;
	&lt;/header&gt;
	&lt;p&gt;文章内容详情&lt;/p&gt;
&lt;/article&gt;
</pre>
<p><strong>&lt;figure&gt;标签</strong><br />
手册释义：用于对元素进行组合。<br />
使用指引：多用于图片与图片描述组合：</p>
<pre class="brush:html">
&lt;figure&gt;
	&lt;img src="img.gif" alt="figure标签"  title="figure标签" /&gt;
	&lt;figcaption&gt;这儿是图片的描述信息&lt;/figcaption&gt;
&lt;/figure&gt;
</pre>
<p><strong>&lt;menu&gt;标签</strong><br />
手册释义：定义菜单列表。当希望列出表单控件时使用该标签。<br />
使用指引：使用于菜单类区块，用来定义菜单列表或菜单选项:</p>
<pre class="brush:html">
&lt;menu&gt;
	&lt;li&gt;HTML 5&lt;/li&gt;
	&lt;li&gt;CSS&lt;/li&gt;
	&lt;li&gt;JavaScript&lt;/li&gt;
&lt;/menu&gt;
</pre>
<p>HTML 5的其他新标签，就不此一一解释了，请自行查询一下手册。<br />
其实，这些东西，如同XHTML的div、h1、inpu等标签一样，只要平时多加实践，运用自如也是轻而易举的。<br />
<strong>关于兼容性</strong><br />
如果你是一个喜欢研究关注前端的人，你应该知道淘宝的页面结构中已大量用到了HTML 5新标签。所以，我想说的是只要敢于尝试，兼容性不是问题，兼容的方法，网上有很多（本文是讲结构的，哈~）。</p>
<p><strong>后话</strong><br />
任何一门新技术，都需要一个适应的过程。如果你准备好了做一名优秀的Web前端开发人员，那你就得不断的尝试并接受最新的前端技术。<br />
孙文曾说，欲经文明之幸福，不得不经文明之痛苦。人类的革命如此，HTML 5的革命亦是如此。IE的日渐没落，让各大浏览器厂商以一次进入了战国时代，群雄逐鹿。而对于开发者，我们只奢求各大浏览器厂商尽可能的遵循同一个标准，而不是群雄逐鹿后的四分五裂。因为，高效完美的呈现给各类用户同样的应用才是我们的终极目标。</p>
<p>如此，本文从页面的doctype说起，到用HTML 5新标签搭建语义化更明确的页面的结构，再解释了一番与页面结构相关的新标签。相信大家对HTML 5的结构性新标签有了一个新的认知，如果你有兴趣，那就打开你的IDE，写上一段由HTML 5新标签搭建的代码，然后用CSS去描绘你的宏伟蓝图吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://mrthink.net/html5-simple-structure/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>基于jQuery的可用于选项卡及幻灯的切换插件</title>
		<link>http://mrthink.net/jq-settab-slide/</link>
		<comments>http://mrthink.net/jq-settab-slide/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 10:30:27 +0000</pubDate>
		<dc:creator>Mr.Think</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery插件]]></category>
		<category><![CDATA[幻灯插件]]></category>
		<category><![CDATA[选项卡插件]]></category>

		<guid isPermaLink="false">http://mrthink.net/?p=1193</guid>
		<description><![CDATA[
最近公司项目页面中用到选项卡与幻灯比较多，特地写了个集选项卡、幻灯片与播放控制于一体的插件，同页面可多次使用。思路就不说了，记得以前写过一个自动切换的幻灯插件：http://mrthink.net/jq-plugin-ifadeslide/，思路有部分是类似的。当然，本文中插件源码中也有注释~
插件核心代码：点此查看样例

$.fn.WIT_SetTab=function(iSet){
	/*
	 * @Mr.Think
	 * Nav: 导航钩子；
	 * Field：切换区域
	 * K:初始化索引；
	 * CurCls：高亮样式；
	 * Auto：是否自动切换；
	 * AutoTime：自动切换时间；
	 * OutTime：淡入时间；
	 * InTime：淡出时间；
	 * CrossTime：鼠标无意识划过时间
	 * Ajax：是否开启ajax
	 * AjaxFun：开启ajax后执行的函数
	 */
	iSet=$.extend({Nav:null,Field:null,K:0,CurCls:'cur',Auto:false,AutoTime:4000,OutTime:100,InTime:150,CrossTime:60},iSet&#124;&#124;{});
	var acrossFun=null,hasCls=false,autoSlide=null;
	//切换函数
	function changeFun(n){
		iSet.Field.filter(':visible').fadeOut(iSet.OutTime, function(){
			iSet.Field.eq(n).fadeIn(iSet.InTime).siblings().hide();
		});
		iSet.Nav.eq(n).addClass(iSet.CurCls).siblings().removeClass(iSet.CurCls);
	}
	//初始高亮第一个
	changeFun(iSet.K);
	//鼠标事件
	iSet.Nav.hover(function(){
		iSet.K=iSet.Nav.index(this);
		if(iSet.Auto){
			clearInterval(autoSlide);
		}
		hasCls = $(this).hasClass(iSet.CurCls);
		//避免无意识划过时触发
		acrossFun=setTimeout(function(){
			//避免当前高亮时划入再次触发
			if(!hasCls){
				changeFun(iSet.K);
			}
		},iSet.CrossTime);
	},function(){
		clearTimeout(acrossFun);
		//ajax调用
		if(iSet.Ajax){
			iSet.AjaxFun();
		}
		if(iSet.Auto){
			//自动切换
			autoSlide = setInterval(function(){
	            iSet.K++;
	          [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mrthink.net/wp-content/uploads/2011/03/20110319.gif" alt="基于jQuery的可用于选项卡及幻灯的切换插件" title="基于jQuery的可用于选项卡及幻灯的切换插件" width="643" height="270" class="aligncenter size-full wp-image-1197" /><br />
最近公司项目页面中用到选项卡与幻灯比较多，特地写了个集选项卡、幻灯片与播放控制于一体的插件，同页面可多次使用。思路就不说了，记得以前写过一个自动切换的幻灯插件：<a href="http://mrthink.net/jq-plugin-ifadeslide/" title="基于jQuery淡入淡出可自动切换的幻灯插件(2011.01.11更新)">http://mrthink.net/jq-plugin-ifadeslide/</a>，思路有部分是类似的。当然，本文中插件源码中也有注释~<br />
插件核心代码：<span class="demo"><a target="_blank" href="http://mrthink.net/demo/ijq20110321.htm">点此查看样例</a></span></p>
<pre class="brush:js">
$.fn.WIT_SetTab=function(iSet){
	/*
	 * @Mr.Think
	 * Nav: 导航钩子；
	 * Field：切换区域
	 * K:初始化索引；
	 * CurCls：高亮样式；
	 * Auto：是否自动切换；
	 * AutoTime：自动切换时间；
	 * OutTime：淡入时间；
	 * InTime：淡出时间；
	 * CrossTime：鼠标无意识划过时间
	 * Ajax：是否开启ajax
	 * AjaxFun：开启ajax后执行的函数
	 */
	iSet=$.extend({Nav:null,Field:null,K:0,CurCls:'cur',Auto:false,AutoTime:4000,OutTime:100,InTime:150,CrossTime:60},iSet||{});
	var acrossFun=null,hasCls=false,autoSlide=null;
	//切换函数
	function changeFun(n){
		iSet.Field.filter(':visible').fadeOut(iSet.OutTime, function(){
			iSet.Field.eq(n).fadeIn(iSet.InTime).siblings().hide();
		});
		iSet.Nav.eq(n).addClass(iSet.CurCls).siblings().removeClass(iSet.CurCls);
	}
	//初始高亮第一个
	changeFun(iSet.K);
	//鼠标事件
	iSet.Nav.hover(function(){
		iSet.K=iSet.Nav.index(this);
		if(iSet.Auto){
			clearInterval(autoSlide);
		}
		hasCls = $(this).hasClass(iSet.CurCls);
		//避免无意识划过时触发
		acrossFun=setTimeout(function(){
			//避免当前高亮时划入再次触发
			if(!hasCls){
				changeFun(iSet.K);
			}
		},iSet.CrossTime);
	},function(){
		clearTimeout(acrossFun);
		//ajax调用
		if(iSet.Ajax){
			iSet.AjaxFun();
		}
		if(iSet.Auto){
			//自动切换
			autoSlide = setInterval(function(){
	            iSet.K++;
	            changeFun(iSet.K);
	            if (iSet.K == iSet.Field.size()) {
	                changeFun(0);
					iSet.K=0;
	            }
	        }, iSet.AutoTime)
		}
	}).eq(0).trigger('mouseleave');
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mrthink.net/jq-settab-slide/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>【西安】求贤令：智讯互动渴求UI设计师一名</title>
		<link>http://mrthink.net/jobs-wit-ui/</link>
		<comments>http://mrthink.net/jobs-wit-ui/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 07:07:21 +0000</pubDate>
		<dc:creator>Mr.Think</dc:creator>
				<category><![CDATA[招聘]]></category>

		<guid isPermaLink="false">http://mrthink.net/?p=1173</guid>
		<description><![CDATA[——听说你跳槽了？回西安了？
——恩。
——薪水很高吗？
——跟原来差不多。
——那你去那儿干啥？
——购买力增强三倍。
再次求贤，我们急需一名UI设计师！
基本要求：
·了解网站前端界面设计，对用户体验有深入理解；
·美术感好，有很强视觉表现力；
·对Flash、Photoshop、Illustrator等相关工具应用自如；
·美术、设计或相关专业
·痴迷于创意，热心于品牌视觉设计，善于把握潮流动向；
如有以下技能，狠狠加分！
·熟悉HTML语言，掌握Dreamweaver等制作工具；
·熟悉XHTML+CSS网页布局；
·熟悉Flash ActionScript 动画设计；
·有传统广告公司经验，或有成熟平面设计作品；
·有手绘功底。
薪资：
能力决定薪水！我们提供高于西安同行业的薪资。
公司介绍：
智讯互动，西安首家整合互动营销机构，已搞定西安最优质的客户，万事具备，只欠猛人。
我们提供与京广沪相同水平的薪水，在西安这座很有味道的城市，大家可以过上更体面的生活。
热切欢迎业内的西安游子回来。
我们的人才理念很简单：
·我们诚挚的邀请优秀的人才加盟，并为他们创造尽量宽松、愉快的工作环境。
·我们推崇专注而高效的工作，轻松开放的沟通，用创造性的想法解决问题。
·我们提供高于同城行业标准的薪水，能让你在这个城市里体面、有尊严的生活。
在我们的团队中，有艺术生、文科生、理科生、退学生；
有人热衷相声表演，有人钻研佛教文化，也有人喜欢泡淘宝和豆瓣；
有人是手持设备技术发烧友，有人是游戏狂人，霸占公司那台Wii；
我们鼓励背景各异的人在此互相分享，激荡创造力。
投递:
cnbluebird#gmail.com（非诚勿扰）
]]></description>
			<content:encoded><![CDATA[<p>——听说你跳槽了？回西安了？<br />
——恩。<br />
——薪水很高吗？<br />
——跟原来差不多。<br />
——那你去那儿干啥？<br />
——购买力增强三倍。<br />
再次求贤，我们急需一名UI设计师！<br />
<strong>基本要求：</strong><br />
·了解网站前端界面设计，对用户体验有深入理解；<br />
·美术感好，有很强视觉表现力；<br />
·对Flash、Photoshop、Illustrator等相关工具应用自如；<br />
·美术、设计或相关专业<br />
·痴迷于创意，热心于品牌视觉设计，善于把握潮流动向；<br />
<strong>如有以下技能，狠狠加分！</strong><br />
·熟悉HTML语言，掌握Dreamweaver等制作工具；<br />
·熟悉XHTML+CSS网页布局；<br />
·熟悉Flash ActionScript 动画设计；<br />
·有传统广告公司经验，或有成熟平面设计作品；<br />
·有手绘功底。<br />
<strong>薪资：</strong><br />
能力决定薪水！我们提供高于西安同行业的薪资。<br />
<strong>公司介绍：</strong><br />
智讯互动，西安首家整合互动营销机构，已搞定西安最优质的客户，万事具备，只欠猛人。<br />
我们提供与京广沪相同水平的薪水，在西安这座很有味道的城市，大家可以过上更体面的生活。<br />
热切欢迎业内的西安游子回来。<br />
<strong>我们的人才理念很简单：</strong><br />
·我们诚挚的邀请优秀的人才加盟，并为他们创造尽量宽松、愉快的工作环境。<br />
·我们推崇专注而高效的工作，轻松开放的沟通，用创造性的想法解决问题。<br />
·我们提供高于同城行业标准的薪水，能让你在这个城市里体面、有尊严的生活。<br />
在我们的团队中，有艺术生、文科生、理科生、退学生；<br />
有人热衷相声表演，有人钻研佛教文化，也有人喜欢泡淘宝和豆瓣；<br />
有人是手持设备技术发烧友，有人是游戏狂人，霸占公司那台Wii；<br />
我们鼓励背景各异的人在此互相分享，激荡创造力。<br />
<strong>投递:</strong><br />
cnbluebird#gmail.com（非诚勿扰）</p>
]]></content:encoded>
			<wfw:commentRss>http://mrthink.net/jobs-wit-ui/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

