<?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>Life["Breathing"] &#187; css</title>
	<atom:link href="http://blog.hsin.tw/tag/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hsin.tw</link>
	<description></description>
	<lastBuildDate>Mon, 07 Jun 2010 07:30:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>jQuery in Action</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 11:54:43 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=337</guid>
		<description><![CDATA[這些只是我大概記一下的內容 要詳細閱讀跟學習jQuery還是買本書比較實在喔~ 原文書網址：jQuery in Action 中文版：jQuery實戰手冊 原文電子書版本：咕狗"jquery in action ebook" http://jquery.com/ 這本書是以jQuery 1.2.1版為基礎 ch.1 Introuducing jQuery&#160; jQuery概略介紹 ch.2 Creating the wrapped element set&#160; 建立elements set ch.3 Bringing pages to life with jQuery&#160; 讓頁面上的東西更生動 ch.4 Events are where it happens!&#160; events的操作 ch.5 Sprucing up with animations and effects&#160; 動畫及效果 ch.6 jQuery utility functions&#160; 通用函式 ch.7 Extending [...]]]></description>
			<content:encoded><![CDATA[<p>這些只是我大概記一下的內容<br />
<span id="more-337"></span><br />
要詳細閱讀跟學習jQuery還是買本書比較實在喔~<br />
原文書網址：<a href="http://www.manning.com/bibeault/" target="_blank">jQuery in Action</a><br />
中文版：<a href="http://findbook.tw/book/9789861816388/basic" target="_blank">jQuery實戰手冊</a><br />
原文電子書版本：<a href="http://tinyurl.com/d3tbsq" target="_blank">咕狗"jquery in action ebook"</a></p>
<p><a href="http://jquery.com/" target="_blank">http://jquery.com/</a><br />
這本書是以jQuery 1.2.1版為基礎</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch1-introuducing-jquery/">ch.1 Introuducing jQuery</a>&nbsp;<br />
jQuery概略介紹</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch2-creating-the-wrapped-element-set/">ch.2 Creating the wrapped element set</a>&nbsp;<br />
建立elements set</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch3/">ch.3 Bringing pages to life with jQuery</a>&nbsp;<br />
讓頁面上的東西更生動</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch4/">ch.4 Events are where it happens!</a>&nbsp;<br />
events的操作</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch5/">ch.5 Sprucing up with animations and effects</a>&nbsp;<br />
動畫及效果</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch-6/">ch.6 jQuery utility functions</a>&nbsp;<br />
通用函式</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch-7/">ch.7 Extending jQuery with custom plugins</a>&nbsp;<br />
自訂擴充plugin</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch8/">ch.8 Talk to the server with Ajax</a>&nbsp;<br />
ajax介紹</p>
<p><b>ch.9 Prominent, powerful,and practical plugins</b><br />
plugin介紹<br />
<a href="http://docs.jquery.com/Plugins" target="_blank">http://docs.jquery.com/Plugins</a>&nbsp;<br />
<a href="http://jquery.com/plugins/most_popular" target="_blank">http://jquery.com/plugins/most_popular</a>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.8 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch8/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch8/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 12:05:45 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=323</guid>
		<description><![CDATA[ch.8 Talk to the server with Ajax .method{background-color:#ffffcc;color:#000000;margin:10px;width:250px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 8.1 Brushing up on Ajax 簡單地說明了ajax運作的過程 8.2 Loading content into elements 8.2.1 Loading content with jQuery 首先先介紹jQuery中ajax最簡單的一個command load(url,parameters,callback) url是要求的網址 parameters是以object形式帶入的參數 如果有值是使用POST method，省略的話則是使用GET method callback是當load好的值已經被放入elements後執行的function 這個function有三個參數 response text、the status code跟the XHR instance $('.injectMe').load('/someResource #div'); 這個例子會讀取/someResource頁面的東西 並將內容填入所有class=injectMe的elements中 有一點可以提的是 在url這個參數中 如果只是要取得該頁面上部份的內容時 可以在後面加上selector 像這個例子就是取得/someResource中&#60;div>裡的內容 serialize() 而如果要使用表單中的值帶入參數 可以利用serialize()來將要傳送的值轉成query string &#60;form [...]]]></description>
			<content:encoded><![CDATA[<p>ch.8 Talk to the server with Ajax<br />
<span id="more-323"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:250px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">8.1 Brushing up on Ajax</div>
<p><!--div class="subtitle">8.1.1 Creating an XHR instance</div>
<div class="subtitle">8.1.2 Initiating the request</div>
<div class="subtitle">8.1.3 Keeping track of progress</div>
<div class="subtitle">8.1.4 Getting the response</div-->
簡單地說明了ajax運作的過程</p>
<div class="title">8.2 Loading content into elements</div>
<div class="subtitle">8.2.1 Loading content with jQuery</div>
<p>首先先介紹jQuery中ajax最簡單的一個command</p>
<div class="method">load(url,parameters,callback)</div>
<p>url是要求的網址<br />
parameters是以object形式帶入的參數<br />
如果有值是使用POST method，省略的話則是使用GET method<br />
callback是當load好的值已經被放入elements後執行的function<br />
這個function有三個參數 response text、the status code跟the XHR instance</p>
<pre class="brush: jscript;">
$('.injectMe').load('/someResource #div');
</pre>
<p>這個例子會讀取/someResource頁面的東西<br />
並將內容填入所有class=injectMe的elements中<br />
有一點可以提的是 在url這個參數中 如果只是要取得該頁面上部份的內容時<br />
可以在後面加上selector<br />
像這個例子就是取得/someResource中&lt;div>裡的內容</p>
<div class="method">serialize()</div>
<p>而如果要使用表單中的值帶入參數<br />
可以利用serialize()來將要傳送的值轉成query string</p>
<pre class="brush: xml;">
&lt;form id=&quot;form1&quot; name=&quot;form1&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;myname&quot; value=&quot;joe&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;age&quot; value=&quot;18&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;city&quot; value=&quot;taipei&quot;&gt;
&lt;/form&gt;
</pre>
<pre class="brush: jscript;">
var str = $(&quot;#form1&quot;).serialize();
//str會轉成這樣
// myname=joe&amp;age=18&amp;city=taipei
</pre>
<div class="method">serializeArray()</div>
<p>而serializeArray()則是會返回一個object</p>
<pre class="brush: jscript;">
var myobj = $(&quot;#form1&quot;).serializeArray();
</pre>
<p>myobj會轉成這樣<br />
[{name: 'myname', value:'joe'},{name: 'age', value:'18'},{name: 'city', value:'taipei'}]</p>
<div class="subtitle">8.2.2 Loading dynamic inventory data</div>
<p>舉一個賣鞋的頁面來練習load()</p>
<div class="title">8.3 Making GET and POST requests</div>
<div class="subtitle">8.3.1 Getting data with jQuery</div>
<div class="method">$.get(url,parameters,callback)</div>
<p>以get method連線</p>
<pre class="brush: jscript;">
$.get(
	'getmydata.php',
	{a:1, b:2, c:3},
	function(data){alert(data);}
);
</pre>
<p>url是要求的網址<br />
parameters是參數(Object或是字串)<br />
callback是返回的function 這個function可以有兩個參數 第一個是返回的內容 第二個是status</p>
<div class="subtitle">8.3.2 Getting JSON data</div>
<div class="method">$.getJSON(url,parameters,callback)</div>
<p>url是要求的網址<br />
parameters是參數(Object或是字串)<br />
callback是返回的function 這個function可以有兩個參數 第一個是返回的內容 第二個是status<br />
與$.get()相同 但是是返回JSON形式的值</p>
<div class="subtitle">8.3.3 Making POST requests</div>
<div class="method">$.post(url,parameters,callback)</div>
<p>以post method連線<br />
url是要求的網址<br />
parameters是參數(Object或是字串)<br />
callback是返回的function 這個function可以有兩個參數 第一個是返回的內容 第二個是status</p>
<div class="title">8.4 Taking full control of an Ajax request</div>
<p>前一節介紹的是簡易的ajax連線方式<br />
這節則是會介紹比較詳細 可以設定較多細節的方式</p>
<div class="subtitle">8.4.1 Making Ajax requests with all the trimmings</div>
<div class="method">$.ajax(options)</div>
<p>可以帶的參數很多<br />
這裡舉較常使用的三個<br />
其他的可以到<a href="http://docs.jquery.com/Ajax/jQuery.ajax#toptions" target="_blank">docs</a>看</p>
<pre class="brush: jscript;">
$.ajax({
  url: &quot;test.js&quot;,
  type: &quot;GET&quot;,
  dataType: &quot;script&quot;
});
</pre>
<p>url是要求的網址<br />
type是POST或是GET<br />
dataType是返回值的形式 可以填入的有xml、xml、xml、json、jsonp、text</p>
<div class="subtitle">8.4.2 Setting request defaults</div>
<div class="method">$.ajaxSetup(properties)</div>
<p>$.ajaxSetup()設定同一個頁面中$.ajax()可以共用的參數<br />
可以帶入的參數也就是前一小節(8.4.1)所說的參數<br />
這個不會影響到load()<br />
而設定type時也不會影響到$.get()跟$.post()</p>
<div class="subtitle">8.4.3 Global functions</div>
<p>除了可以用$.ajaxSetup()預設參數外<br />
還有在ajax連線中的不同階段可以使用的function<br />
ajaxStart()、ajaxSend()、ajaxSuccess()、ajaxError()、ajaxComplete()、ajaxStop()<br />
可以到<a href="http://docs.jquery.com/Ajax" target="_blank">docs</a>看</p>
<div class="title">8.5 Putting it all together</div>
<p>是一個綜合練習的例子</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.7 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch-7/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch-7/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 12:03:52 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[瀏覽器]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=316</guid>
		<description><![CDATA[ch.7 Extending jQuery with custom plugins .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 7.1 Why extend? 使用自訂擴充的plugin可以讓程式及設計有一致性 而且建立重複使用的設計有很多優點 繼承進而擴充了jQuery裡原本就存在的功能更是可以讓事情變得更簡單 7.2 The jQuery plugin authoring guidelines 要建立自訂擴充的plugin需要一定的規範及規則 以確保可以與其他plugin甚至是其他js lib正常地運作 Extending jQuery包含了像是Utility functions或是Methods兩種形式 7.2.1 Naming files and functions 為了避免plugin的檔名與原本已經在使用或是其他人建立的檔名重複 這邊提了三點建議 1.以jquery為開頭(可以避免與不是以jQuery為基礎的其他js檔重複) 2.接著可以寫這個plugin的名字 3.最後以.js結尾 以書中的例子來說 如果要寫一個名為Fred的plugin 其檔名可以命名為jquery.fred.js 另一個有用的方法 可以上jQuery收集plugin的地方找找看 如果看到相同的名字就可以避免重複囉 同樣的避免function名字與別人重複到 也是一樣的方法 7.2.2 Beware the $ jQuery('#myitem').show(); 如果是自己在寫jQuery的script時 常常會使用$來代替jQuery的寫法 但是在寫plugin時 則是可以使用jQuery來寫 以避免不確定性(例如同頁面有使用prototype.js)囉 [...]]]></description>
			<content:encoded><![CDATA[<p>ch.7 Extending jQuery with custom plugins<br />
<span id="more-316"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">7.1 Why extend?</div>
<p>使用自訂擴充的plugin可以讓程式及設計有一致性<br />
而且建立重複使用的設計有很多優點<br />
繼承進而擴充了jQuery裡原本就存在的功能更是可以讓事情變得更簡單</p>
<div class="title">7.2 The jQuery plugin authoring guidelines</div>
<p>要建立自訂擴充的plugin需要一定的規範及規則<br />
以確保可以與其他plugin甚至是其他js lib正常地運作<br />
Extending jQuery包含了像是Utility functions或是Methods兩種形式</p>
<div class="subtitle">7.2.1 Naming files and functions</div>
<p>為了避免plugin的檔名與原本已經在使用或是其他人建立的檔名重複<br />
這邊提了三點建議<br />
1.以jquery為開頭(可以避免與不是以jQuery為基礎的其他js檔重複)<br />
2.接著可以寫這個plugin的名字<br />
3.最後以.js結尾<br />
以書中的例子來說<br />
如果要寫一個名為Fred的plugin<br />
其檔名可以命名為<b>jquery.fred.js</b></p>
<p>另一個有用的方法 可以上<a href="http://docs.jquery.com/Plugins">jQuery收集plugin的地方</a>找找看<br />
如果看到相同的名字就可以避免重複囉</p>
<p>同樣的避免function名字與別人重複到<br />
也是一樣的方法</p>
<div class="subtitle">7.2.2 Beware the $</div>
<pre class="brush: jscript;">
jQuery('#myitem').show();
</pre>
<p>如果是自己在寫jQuery的script時<br />
常常會使用$來代替jQuery的寫法<br />
但是在寫plugin時<br />
則是可以使用jQuery來寫<br />
以避免不確定性(例如同頁面有使用prototype.js)囉<br />
或是如前一章6.2所提的</p>
<pre class="brush: jscript;">
(function($){
//
// 在這裡使用$
//
})(jQuery);
</pre>
<p>寫在這裡面時就可以用$囉</p>
<div class="subtitle">7.2.3 Taming complex parameter lists</div>
<p>在使用plugin時可能會需要傳入不同的參數來運用<br />
但是有時只需要用預設值就好了</p>
<pre class="brush: jscript;">
//例如有一個function有7個參數
function complex(p1,p2,p3,p4,p5,p6,p7) {/* ... */}
//
//但有時只需要填入p1或是p7的值來使用
complex(valueA,null,null,null,null,null,valueB);
//
//甚或是這樣
complex(valueA,null,valueC,valueD,null,null,valueB);
</pre>
<p>這樣會造成傳入及讀取參數的複雜度<br />
所以可以使用下面的方法來取代</p>
<pre class="brush: jscript;">
complex(valueA, {
  p3: valueC,
  p4: valueD,
  p7: valueB
});
</pre>
<p>將一定要傳入的參數如同之前一樣的設定置放<br />
而把其他有時候可以省略的參數合併放在一個object中<br />
這樣便不用在意是第幾個參數省略<br />
或是傳入了多少個參數了</p>
<p>在plugin裡要使用參數的時候<br />
可以利用6.3.6講到的$.extend()</p>
<pre class="brush: jscript;">
function complex(p1,options){
  var settings = $.extend({
    option1: defaultValue1,
    option2: defaultValue2,
    option3: defaultValue3,
    option4: defaultValue4,
    option5: defaultValue5,
    option6: defaultValue6
  },options||{});
  //其他script
}
</pre>
<p>因為$.extend()裡排在後面的object會把前面的object中有相同的property值蓋過去<br />
所以如果有填入參數 就會使用填入的參數<br />
不然就是使用預設的參數<br />
而有一點要注意的是<b>||{}</b>這個地方<br />
當完全沒有填入參數時<br />
就都使用plugin中的預設值</p>
<div class="title">7.3 Writing custom utility functions</div>
<pre class="brush: jscript;">
(function($){
//
// 在這裡使用$
//
})(jQuery);
</pre>
<p>就如同7.2.2講的<br />
如果在plugin中有大量使用到jQuery自己本身的method<br />
可以使用上面這樣的方法<br />
就可以在裡面使用$ 而不受到干擾</p>
<div class="subtitle">7.3.1 Creating a data manipulation utility function</div>
<div class="subtitle">7.3.2 Writing a date formatter</div>
<p>這兩小節各別有一個Utility functions類型的自訂擴充練習</p>
<div class="title">7.4 Adding new wrapper methods</div>
<p>要建立wrapper methods是使用<b>$.fn</b><br />
下面是一個簡單的例子</p>
<pre class="brush: jscript;">
(function($){
  $.fn.makeItBlue = function() {
    return this.css('color','blue');
  }
})(jQuery);
</pre>
<p>通常來說 除非是特殊需要<br />
否則return的值仍是該wrapped set<br />
這樣才能繼續在chain中使用這組elements</p>
<div class="subtitle">7.4.1 Applying multiple operations in a wrapper method</div>
<div class="subtitle">7.4.2 Retaining state within a wrapper method</div>
<p>這兩小節各別有一個wrapper method類型的自訂擴充練習</p>
<pre class="brush: jscript;">
(function($){
  //將settings定義在這裡 才能讓其他的methods(如下面的showPhoto)使用到
  var settings;
  //主要的plugin
  $.fn.photomatic = function(callerSettings) {
    //如同7.2.3所講的參數用法一樣
    settings = $.extend({
      photoElement: '#photomaticPhoto',
      lastControl: null
    }, callerSettings || {});
    //plugin所執行的功能
    settings.thumbnails = this.filter('img');
    settings.thumbnails.click(function(){ showPhoto(this.index); });
    //如果有需要 可以給一個初始值
    showPhoto(0);
    //返回同樣的wrapped set
    return this;
  };
  //將重複性的功能另外寫一個method
  var showPhoto = function(index) {
    settings.photoElement
      .attr('src',settings.transformer(settings.thumbnails[index].src));
    settings.current = index;
  };
})(jQuery);
</pre>
<p>在7.4.2中 講解的例子架構大概是上面這樣(有刪掉部份的東西)</p>
<p><!--<br />
-本章小節-<br />
自己寫plugin我還沒嘗試過<br />
下次來踹踹<br />
(有結跟沒結一樣...)<br />
--></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.6 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch-6/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch-6/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 12:11:36 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[瀏覽器]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=304</guid>
		<description><![CDATA[ch.6 jQuery utility functions .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 這章會介紹除了操作elements外的utility functions 6.1 Using the jQuery flags 這節要介紹三個jQuery flags $.browser $.boxModel $.styleFloat 6.1.1 Detecting the user agent (jQuery1.3已經不建議使用$.browser，而有新增一個新的物件$.support) 檢測使用者所用的瀏覽器 一開始是先介紹使用判斷method的方法 if (element.attachEvent) { element.attachEvent('onclick',someHandler); } else if (element.addEventListener) { element.addEventListener('click',someHandler); } else { throw new Error('event handling not supported'); } 而這個可能發生的問題是 method可以使用 但是裡面帶的參數因為不同的瀏覽器而有不同的意義 所以jQuery提供了一個辨識瀏覽器的方法 $.browser if($.browser.msie){ alert('這是IE瀏覽器'); } [...]]]></description>
			<content:encoded><![CDATA[<p>ch.6 jQuery utility functions<br />
<span id="more-304"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<p>這章會介紹除了操作elements外的utility functions</p>
<div class="title">6.1 Using the jQuery flags</div>
<p>這節要介紹三個jQuery flags<br />
$.browser<br />
$.boxModel<br />
$.styleFloat</p>
<div class="subtitle">6.1.1 Detecting the user agent</div>
<div style="color:#cc0000;">(jQuery1.3已經不建議使用$.browser，而有新增一個新的物件<a href="http://docs.jquery.com/Utilities/jQuery.support" target="_blank">$.support</a>)</div>
<p>檢測使用者所用的瀏覽器<br />
一開始是先介紹使用判斷method的方法</p>
<pre class="brush: jscript;">
if (element.attachEvent) {
  element.attachEvent('onclick',someHandler);
}
else if (element.addEventListener) {
  element.addEventListener('click',someHandler);
}
else {
  throw new Error('event handling not supported');
}
</pre>
<p>而這個可能發生的問題是 method可以使用<br />
但是裡面帶的參數因為不同的瀏覽器而有不同的意義<br />
所以jQuery提供了一個辨識瀏覽器的方法</p>
<div class="method">$.browser</div>
<pre class="brush: jscript;">
if($.browser.msie){
	alert('這是IE瀏覽器');
}
</pre>
<p>會有下面幾個值<br />
$.browser.msie<br />
$.browser.mozilla<br />
$.browser.safari<br />
$.browser.opera<br />
$.browser.version<br />
前面四個返回的是boolean值<br />
是將瀏覽器歸類到四大類<br />
如果為該類即返回true<br />
其餘會是false<br />
而有些瀏覽器因為版本不同 也可能會有差異 所以$.browser.version是使用的版本</p>
<p>建議是method方法也無法判別了才使用$.browser</p>
<div class="subtitle">6.1.2 Determining the box model</div>
<div style="color:#cc0000;">(jQuery1.3已經不建議使用$.boxModel，而有新增一個新的物件<a href="http://docs.jquery.com/Utilities/jQuery.support" target="_blank">$.support</a>)</div>
<div class="method">$.boxModel</div>
<p>$.boxModel返回一個boolean值<br />
當是使用W3C standard box model時返回true<br />
而使用IE box model(或是說traditional box model)時返回false<br />
這個需要用到的時機<br />
書中提到的是關於width跟height的解釋<br />
使用W3C standard box model時<br />
計算width跟height不會包含padding跟border的pixels<br />
而IE box model則會包含<br />
所以可能會造成elements的大小在不同瀏覽器看起來會不太一樣</p>
<div class="subtitle">6.1.3 Detecting the correct float style to use</div>
<div class="method">$.styleFloat</div>
<p>在不同的瀏覽器對於float有不同的名字<br />
在IE是styleFloat 其他的則是cssFloat<br />
所以使用$.styleFloat就不用擔心這個問題了</p>
<pre class="brush: jscript;">
element.style[$.styleFloat] = 'left';
</pre>
<p>不過通常使用css(&#8216;float&#8217;)就可以了<br />
$.styleFloat主要是給plugins或是extensions製作的人使用</p>
<div class="title">6.2 Using other libraries with jQuery</div>
<div class="method">$.noConflict()</div>
<p>在Ch1有稍微提到<br />
如果在同個頁面上要使用其他的javascript library<br />
可以使用$.noConflict()來避免衝突</p>
<pre class="brush: jscript;">
var $j = jQuery.noConflict();
</pre>
<p>這樣就可以使用$j來代替jQuery或是$了</p>
<p>或是可以使用下面這樣</p>
<pre class="brush: jscript;">
//要注意有帶參數$喔
(function($) { /* function body here */ })(jQuery);
//或是下面這個ready function
jQuery(function($){alert('$ = '+ $);});
</pre>
<p>在裡面就還是可以使用$來操作囉</p>
<div class="title">6.3 Manipulating JavaScript objects and collections</div>
<div class="subtitle">6.3.1 Trimming strings</div>
<div class="method">$.trim(value)</div>
<pre class="brush: jscript;">
$('#someField').val($.trim($('#someField').val()));
</pre>
<p>就像PHP中trim()的函式<br />
將字串前後的空白都消除掉<br />
在表單驗證中很常用到</p>
<div class="subtitle">6.3.2 Iterating through properties and collections</div>
<div class="method">$.each(container,callback)</div>
<p>對一個array或object中的值依序作處理</p>
<pre class="brush: jscript;">
var anArray = ['one','two','three'];
$.each(anArray,function(n,value) {
  //do something here
});
var anObject = {one:1, two:2, three:3};
$.each(anObject,function(name,value) {
  //do something here
});
</pre>
<p>container是要處理的array或是object<br />
callback是作處理的function<br />
這個function會有兩個參數 第一個是index 第二個是value</p>
<div class="subtitle">6.3.3 Filtering arrays</div>
<div class="method">$.grep(array,callback,invert)</div>
<p>以某個條件過濾一個array以生成另一個新的array </p>
<pre class="brush: jscript;">
var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];
var newarr = $.grep(arr, function(n, i){
					      return (n &gt; 5);
					    });
//新生成的newarr會是 [9, 8, 6, 9, 7, 8, 6, 9]
</pre>
<p>第一個參數array很明顯的就是要處理的array<br />
第二個參數callback是作處理的function 會有兩個參數 第一個是value 第二個是index<br />
第三個參數invert是個boolean值<br />
如果省略invert或是填寫false時 當callback返回值為true的話 就會將這個值放進新生成的array中<br />
如果invert填入true 則當callback返回值為false才會將這個值放進新生成的array中</p>
<pre class="brush: jscript;">
var bigNumbers = $.grep(originalArray,'a&gt;100');
//這時jQuery會自己建立一個function
function(a,i){return a&gt;100;}
//而a就是value ,i就是index
</pre>
<p>如上所示 callback也可以簡寫為一個string</p>
<div class="subtitle">6.3.4 Translating arrays</div>
<div class="method">$.map(array,callback)</div>
<p>對一個array作處理並生成為一個新array<br />
第一個參數array是要處理的array<br />
第二個參數callback是作處理的function 會有兩個參數 第一個是value 第二個是index</p>
<pre class="brush: jscript;">
//將array中的每個值都+1
var oneBased = $.map([0,1,2,3,4],function(value){return value+1;});
//callback如同$.grep()一樣 也是可以寫成一個string
var oneBased = $.map([0,1,2,3,4],'a+1');
</pre>
<p>而有一點要注意的是<br />
如果callback返回值為null或是undefined<br />
則這個值就不會被放進新array中<br />
所以新的array元素個數是有可能比原本的array少</p>
<pre class="brush: jscript;">
var characters = $.map(
  ['that','other thing'],
  function(value){return value.split('');}
);
//characters會是['t','h','a','t','o','t','h','e','r',' ','t','h','i','n','g']
</pre>
<p>如上所示 另一個可以提的是<br />
如果callback處理值完之後 回傳的是一個array<br />
則會將這些所有回傳的array都和在同一個新的array中</p>
<div class="subtitle">6.3.5 More fun with JavaScript arrays</div>
<div class="method">$.inArray(value,array)</div>
<p>判斷一個array中有沒有某個值</p>
<pre class="brush: jscript;">
var index = $.inArray(2,[1,2,3,4,5]);
//會返回1
</pre>
<p>第一個參數value是要判斷的值<br />
當第二個參數array中遇到第一個值為value的時候 會返回其index<br />
找不到的時候則會返回-1</p>
<div class="method">$.makeArray(object)</div>
<pre class="brush: jscript;">
var images = document.getElementsByTagName(&quot;img&quot;);
//這樣是一個NodeList
</pre>
<p>將一個array-like object(像是一個NodeList)轉換成array</p>
<div class="method">$.unique(array)</div>
<p>將array中相同的值剔除掉</p>
<div class="subtitle">6.3.6 Extending objects</div>
<div class="method">$.extend(target,source1,source2, &#8230; sourceN)</div>
<p>將數個object合併<br />
下面是一個簡單的例子</p>
<pre class="brush: jscript;">
var target =  { a: 1, b: 2, c: 3 };
var source1 = { c: 4, d: 5, e: 6 };
var source2 = { e: 7, f: 8, g: 9 };
$.extend(target,source1,source2);
</pre>
<p>如果沒有返回給一個新的object<br />
則是會合併在第一個參數target<br />
而這個例子中 target會變為{a: 1, b: 2, c: 4, d: 5, e: 7, f: 8, g: 9}<br />
有一點要注意的是<br />
如果objects中有相同的property 則後面的object的會蓋過前面的<br />
(這個例子就是source1的c:4會蓋過target的c:4，source2的e:7會蓋過source1的e:6)</p>
<div class="title">6.4 Dynamically loading scripts</div>
<div class="method">$.getScript(url,callback)</div>
<p>依據條件或是情況下再讀取其他的外部script 而不是在頁面load時就讀取script<br />
第一個參數url是要讀取的script的路徑<br />
第二個參數是讀取script完成後會執行的function</p>
<p><!--[本章小結]<br />
我以前比較少用到utility functions的東西<br />
所以這章講的東西大多都是第一次見到<br />
有些東西看起來<br />
用了應該是可以省很多力氣的~<br />
但是還是要多想多練習才知道哪裡需要用或是用得到--></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.5 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch5/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch5/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 11:50:49 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=297</guid>
		<description><![CDATA[ch.5 Sprucing up with animations and effects .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 5.1 Showing and hiding elements 要簡單地顯示或隱藏elements 是使用show()以及hide()這兩個方法 $(&#34;#myimg&#34;).hide(); $(&#34;#myimg&#34;).show(); 這裡還有提到一點就是 如果頁面上某個element要預設成隱藏 書裡推薦的是在頁面load完後再使用hide()將他隱藏 會比直接在style裡加display:none;好 5.1.1 Implementing a collapsible list 這個小節利用一個巢狀列表 以顯示或是隱藏裡面的資訊來練習show()及hide() 5.1.2 Toggling the display state of elements 還有一個可以切換顯示或是隱藏elements的方法 toggle() $(&#34;#myimg&#34;).toggle(); 當elements是隱藏的時候 使用toggle()會將他顯示 相反也是一樣 5.2 Animating the display state of elements 這節是要介紹比較不突兀的顯示或隱藏elements的方法 利用一些effect來讓這個動作比較平滑 5.2.1 Showing and [...]]]></description>
			<content:encoded><![CDATA[<p>ch.5 Sprucing up with animations and effects<br />
<span id="more-297"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">5.1 Showing and hiding elements</div>
<p>要簡單地顯示或隱藏elements 是使用<b>show()</b>以及<b>hide()</b>這兩個方法</p>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).hide();
$(&quot;#myimg&quot;).show();
</pre>
<p>這裡還有提到一點就是<br />
如果頁面上某個element要預設成隱藏<br />
書裡推薦的是在頁面load完後再使用hide()將他隱藏<br />
會比直接在style裡加display:none;好</p>
<div class="subtitle">5.1.1 Implementing a collapsible list</div>
<p>這個小節利用一個巢狀列表 以顯示或是隱藏裡面的資訊來練習show()及hide()</p>
<div class="subtitle">5.1.2 Toggling the display state of elements</div>
<p>還有一個可以切換顯示或是隱藏elements的方法 <b>toggle()</b></p>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).toggle();
</pre>
<p>當elements是隱藏的時候 使用toggle()會將他顯示 相反也是一樣</p>
<div class="title">5.2 Animating the display state of elements</div>
<p>這節是要介紹比較不突兀的顯示或隱藏elements的方法<br />
利用一些effect來讓這個動作比較平滑</p>
<div class="subtitle">5.2.1 Showing and hiding elements gradually</div>
<div class="method">hide(speed,callback)</div>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).show('fast');
$(&quot;#myimg&quot;).hide(2000);
</pre>
<p>第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast)<br />
如果省略的話 則是會像上節講的一樣直接隱藏<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="method">show(speed,callback)</div>
<div class="method">toggle(speed,callback)</div>
<p>同樣的 show()跟toggle()的用法也是一樣<br />
第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast)<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="subtitle">5.2.2 Fading elements into and out of existence</div>
<p>另一種顯示或隱藏的方法是改變elements的透明度直到完全透明或是完全顯示<br />
<b>fadeIn()</b>跟<b>fadeOut()</b></p>
<div class="method">fadeOut(speed,callback)</div>
<div class="method">fadeIn(speed,callback)</div>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).fadeOut('fast');
</pre>
<p>(與show()、hide()、toggle()的參數用法一樣)<br />
第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<p>另一個方法<b>fadeTo()</b>則是可以調整elements的透明度</p>
<div class="method">fadeTo(speed,opacity,callback)</div>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).fadeTo('fast',0.5);
</pre>
<p>第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
第二個參數opacity是透明度 他的範圍可以填入0.0 ~ 1.0<br />
第三個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="subtitle">5.2.3 Sliding elements up and down</div>
<p>還有另一種顯示或隱藏的方法是將elements慢慢向上收回或是慢慢向下展開<br />
<b>slideDown()</b>跟<b>slideUp()</b>及切換的<b>slideToggle()</b></p>
<div class="method">slideDown(speed,callback)</div>
<div class="method">slideUp(speed,callback)</div>
<div class="method">slideToggle(speed,callback)</div>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).slideDown(1000);
$(&quot;#myimg&quot;).slideToggle('slow');
</pre>
<p>(與show()、hide()、toggle()的參數用法一樣)<br />
第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="subtitle">5.2.4 Stopping animations</div>
<div class="method">stop()</div>
<p>當要停止某個elements的動作時 要使用stop()</p>
<div class="title">5.3 Creating custom animations</div>
<p>jQuery提供了一個方法<b>animate()</b> 可以讓我們自己設計想要elements作的動作</p>
<div class="method" style="width:300px;">animate(properties,duration,easing,callback)</div>
<div class="method">animate(properties,options)</div>
<pre class="brush: jscript;">
$('#animateMe').animate(
	{opacity:0,top:0}
  ,'slow'
  ,function(){ $(this).hide(); }
);
</pre>
<p>properties是填入一個object 而這個object要包含所有最後要達到css stlye<br />
(例如elements的寬度要達到600px 之類的)<br />
duration可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
easing是漸變的方式 有兩種內建的方式linear(線性)、swing(搖擺)<br />
callback是擺一個function 當這個動作完成時會執行<br />
options是填入一個object 而這個object則是可以填入上面講過的duration、easing跟complete(也就是上面說的callback)<br />
還有另一個可以填入的是queue 如果設定為false 則這個動作會立即被執行(也就是如果後面也跟著另一個animate() 這個動作會同時執行)<br />
<b>[update]</b><br />
如果要設定顏色的漸變 還要再裝<a href="http://plugins.jquery.com/project/color" target="_blank">plugin</a></p>
<div class="subtitle">5.3.1 A custom scale animation</div>
<p>先介紹一個改變尺寸的例子</p>
<pre class="brush: jscript;">
$('.animateMe').each(function(){
	$(this).animate(
		{
			width: $(this).width() * 2,
			height: $(this).height() * 2
		},
		2000
	);
});
</pre>
<p>將class=animateMe的elements在2秒(2000毫秒)的時間內將長寬都各別變大為兩倍</p>
<div class="subtitle">5.3.2 A custom drop animation</div>
<p>介紹一個drop的例子</p>
<pre class="brush: jscript;">
$('.animateMe').each(function(){
	$(this)
		.css('position','relative')
		.animate(
			{
				opacity: 0,
				top: $(window).height() - $(this).height() - $(this).position().top
			},
			'slow',
			function(){ $(this).hide(); });
});
</pre>
<p>要先將elements的position設定為relative(因為這樣才能動)<br />
改變class=animateMe的elements的透明度及高度<br />
最後會被移到畫面的底部 並且透明度會變0(也就是完全透明)<br />
然後再將elements隱藏起來</p>
<p>有一點可以提的是<br />
如果將opacity:0改成opacity:"hide"<br />
這個動作最後完成時會直接將elements隱藏<br />
同時也不需要最後的callback的function</p>
<div class="subtitle">5.3.3 A custom puff animation</div>
<p>一個擴散並消失的例子<br />
將前兩小節的功能結合在一起</p>
<pre class="brush: jscript;">
$('.animateMe').each(function(){
	var position = $(this).position();
	$(this)
		.css({position:'absolute',top:position.top,
					left:position.left})
		.animate(
			{
        opacity: 'hide',
        width: $(this).width() * 5,
        height: $(this).height() * 5,
        top: position.top - ($(this).height() * 5 / 2),
        left: position.left - ($(this).width() * 5 / 2)
      },
      'normal');
});
</pre>
<p>因為在擴散的過程中 elements的位置會向右下方長大<br />
所以同時也要改變位置 讓看起來的位置像沒有變一樣(真繞舌)<br />
首先要改變position為absolute 並給定目前的top跟left<br />
然後最終要到達的狀態是<br />
opacity就跟前一小節講的一樣 hide的意思就是最後會隱藏起來<br />
寬度跟高度則是變為原來的五倍<br />
top跟left則是要計算成會讓elements的中心點像是沒有變一樣(也就是向四方擴散)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>css 同一行同時要有置左跟置右的內容</title>
		<link>http://blog.hsin.tw/2009/css-float-left-float-right/</link>
		<comments>http://blog.hsin.tw/2009/css-float-left-float-right/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 16:23:03 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=288</guid>
		<description><![CDATA[這是在某網站找到的用法 不知道是不是很普通的用法 但是我到今天才知道XD 首先先講一下我原本的用法 &#60;div style=&#34;width:300px;border:1px solid #c3c3c3;&#34;&#62; &#60;div style=&#34;float:left;&#34;&#62;左邊 長的會像這樣&#60;/div&#62; &#60;div style=&#34;float:right;&#34;&#62;右邊&#60;/div&#62; &#60;div style=&#34;clear:both;&#34;&#62;&#60;/div&#62; &#60;/div&#62; 右邊 左邊 長的會像這樣 其實是堪用的 不過我找到的用法是這樣 &#60;div style=&#34;width:300px;border:1px solid #c3c3c3;&#34;&#62; &#60;div style=&#34;float:right;&#34;&#62;右邊&#60;/div&#62; &#60;div&#62;左邊 效果是這樣&#60;/div&#62; &#60;/div&#62; 右邊 左邊 效果是這樣 兩個效果好像一樣喔 但是碼簡潔了不少 記上一筆~~~]]></description>
			<content:encoded><![CDATA[<p>這是在某網站找到的用法<br />
<span id="more-288"></span><br />
不知道是不是很普通的用法<br />
但是我到今天才知道XD<br />
首先先講一下我原本的用法</p>
<pre class="brush: xml;">
&lt;div style=&quot;width:300px;border:1px solid #c3c3c3;&quot;&gt;
  &lt;div style=&quot;float:left;&quot;&gt;左邊 長的會像這樣&lt;/div&gt;
  &lt;div style=&quot;float:right;&quot;&gt;右邊&lt;/div&gt;
  &lt;div style=&quot;clear:both;&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<div style="width:300px;border:1px solid #c3c3c3;">
<div style="float:right;">右邊</div>
<div style="float:left;">左邊 長的會像這樣</div>
<div style="clear:both;"></div>
</div>
<p>其實是堪用的<br />
<br />
不過我找到的用法是這樣</p>
<pre class="brush: xml;">
&lt;div style=&quot;width:300px;border:1px solid #c3c3c3;&quot;&gt;
  &lt;div style=&quot;float:right;&quot;&gt;右邊&lt;/div&gt;
  &lt;div&gt;左邊 效果是這樣&lt;/div&gt;
&lt;/div&gt;
</pre>
<div style="width:300px;border:1px solid #c3c3c3;">
<div style="float:right;">右邊</div>
<div>左邊 效果是這樣</div>
</div>
<p>兩個效果好像一樣喔<br />
但是碼簡潔了不少<br />
記上一筆~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/css-float-left-float-right/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>造飛機~</title>
		<link>http://blog.hsin.tw/2009/plane/</link>
		<comments>http://blog.hsin.tw/2009/plane/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 10:26:56 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[瀏覽器]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=262</guid>
		<description><![CDATA[不知道有沒有人發現上面有時候會有一隻飛機從右邊往左邊飛過去XD 這是我突然覺得上面標題的地方好像有點空 好像該加些什麼喔 所以想說加台會飛的飛機好了 哈哈 他有一定的機率會出現 所以不是每次都會出現囉 如果不想瞭解運作原理的話 可以直接下載檔案就好~ 這是檔案連結 將plane這個資料夾放在跟網頁同一層的目錄 並在該網頁的&#60;body>&#60;/body>之中的任何地方加上一行 建議是頁面的最後 也就是&#60;/body>的上面一行 &#38;lt;script src=&#38;quot;plane/plane.js&#38;quot; type=&#38;quot;text/javascript&#38;quot;&#38;gt;&#38;lt;/script&#38;gt; 就有飛機飛囉~ (如果網頁有作網址rewrite 就可能要把此js檔的路徑跟js檔中圖檔的路徑改成絕對路徑才會正常動作喔) 有時候會卡卡的 應該就是. . .瀏覽器的關係 用google chrome看會飛很快XD ========分隔線===========分隔線========分隔線============= 以下是有用到的相關原理 一共需要4種東西 首先是要加入load事件 可以參考這個 var oldOnload=window.onload&#124;&#124;function(){}; window.onload=function(){ oldOnload(); //do something } 這樣如果頁面上已經有其他onload的函式 就不會被蓋掉了 再來呢 因為要讓飛機從最右邊開始飛 所以要取得可視螢幕的寬度大小 可以參考這裡 而需要這段程式也是因為IE比較XXX的關係 所以要判斷是不是IE function getSize(){ var myWidth=0; if(typeof(window.innerWidth)=='number'){//Non-IE myWidth=window.innerWidth; }else if(document.documentElement&#38;amp;&#38;amp;(document.documentElement.clientWidth&#124;&#124;document.documentElement.clientHeight)){//IE 6+ [...]]]></description>
			<content:encoded><![CDATA[<p>不知道有沒有人發現上面有時候會有一隻飛機從右邊往左邊飛過去XD<br />
<span id="more-262"></span><br />
這是我突然覺得上面標題的地方好像有點空<br />
好像該加些什麼喔<br />
所以想說加台會飛的飛機好了 哈哈<br />
他有一定的機率會出現 所以不是每次都會出現囉<br />
如果不想瞭解運作原理的話 可以直接下載檔案就好~<br />
這是<a href="http://ex.hsin.tw/files/pack.zip">檔案連結</a><br />
將plane這個資料夾放在跟網頁同一層的目錄<br />
並在該網頁的&lt;body>&lt;/body>之中的任何地方加上一行<br />
建議是頁面的最後 也就是&lt;/body>的上面一行</p>
<pre class="brush: xml;">
&amp;lt;script src=&amp;quot;plane/plane.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
</pre>
<p>就有飛機飛囉~<br />
(如果網頁有作網址rewrite 就可能要把此js檔的路徑跟js檔中圖檔的路徑改成絕對路徑才會正常動作喔)</p>
<p>有時候會卡卡的 應該就是. . .瀏覽器的關係<br />
用google chrome看會飛很快XD</p>
<p>========分隔線===========分隔線========分隔線=============</p>
<p>以下是有用到的相關原理<br />
一共需要4種東西</p>
<p>首先是要加入load事件<br />
可以參考<a href="http://www.jaceju.net/blog/?p=160" target="_blank">這個</a></p>
<pre class="brush: jscript;">
var oldOnload=window.onload||function(){};
window.onload=function(){
oldOnload();
//do something
}
</pre>
<p>這樣如果頁面上已經有其他onload的函式 就不會被蓋掉了</p>
<p>再來呢<br />
因為要讓飛機從最右邊開始飛<br />
所以要取得可視螢幕的寬度大小<br />
可以參考<a href="http://www.howtocreate.co.uk/tutorials/javascript/browserwindow" target="_blank">這裡</a><br />
而需要這段程式也是因為IE比較XXX的關係<br />
所以要判斷是不是IE</p>
<pre class="brush: jscript;">
function getSize(){
  var myWidth=0;
  if(typeof(window.innerWidth)=='number'){//Non-IE
    myWidth=window.innerWidth;
  }else if(document.documentElement&amp;amp;&amp;amp;(document.documentElement.clientWidth||document.documentElement.clientHeight)){//IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
  }else if(document.body&amp;amp;&amp;amp;(document.body.clientWidth||document.body.clientHeight)){//IE 4 compatible
    myWidth = document.body.clientWidth;
  }
  return myWidth;
}
</pre>
<p>第三點呢<br />
則是只有當圖片是png才需要的<br />
因為IE6之前的瀏覽器 不支援透明的png圖片(會顯示一塊灰色的)<br />
所以如果當圖片是png的時候<br />
需要用到一點css hack<br />
下面是函式中的片段</p>
<pre class="brush: jscript;">
var img_src=&amp;quot;plane/plane.png&amp;quot;;
var img2_src=&amp;quot;plane/transparent.gif&amp;quot;;
var img_w=45;
var img_h=45;
var img=document.createElement(&amp;quot;img&amp;quot;);
if(navigator.appName==&amp;quot;Microsoft Internet Explorer&amp;quot;){
	img.src=img2_src;
	img.width=img_w;
	img.height=img_h;
	img.style.filter=&amp;quot;progid:DXImageTransform.Microsoft.AlphaImageLoader(src=&amp;quot;+img_src+&amp;quot;, sizingmethod=scale);&amp;quot;;
}
else{
	img.src=img_src;
}
</pre>
<p>如果為IE的話 則是先將原本的圖片替換成一張透明的圖片<br />
並設定這張透明的圖片寬度高度 使寬高跟原本的圖片一樣<br />
再加上IE特有的filter<br />
便完成了</p>
<p>最後一點就是讓飛機動起來～<br />
先將這個&lt;img>的position設定為absolute<br />
並設定好top跟left<br />
再利用setTimeout()改變他的left<br />
結果就會很像在動囉~</p>
<p>如果要看完整的js檔 可以在該下載檔案裡面看到喔</p>
<p>這個例子沒有用到javascript library(如jQuery)<br />
所以碼不是太簡潔<br />
如果利用jQuery的話 會更簡單<br />
下次再試試看XD</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/plane/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CSS 幾個關於IE6下無法使用position:fixed;的解決辦法</title>
		<link>http://blog.hsin.tw/2009/css-ie6position-fixed/</link>
		<comments>http://blog.hsin.tw/2009/css-ie6position-fixed/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 11:35:22 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=181</guid>
		<description><![CDATA[找了幾個可能有效的辦法 不過發現好像都需要取捨些什麼. . . 所以這個問題還是無解 整個是. .. 外星來的IE6&#8230;&#8230;&#8230;. 下面列一下我找到的資訊 IE6 position:fixed bug (固定窗口方法) 跨浏览器的CSS固定定位{position:fixed} CSS Fixed Positioning position:fixed for Internet Explorer position: fixed in Internet Explorer 讓你的頁面在ie6也能玩position:fixed]]></description>
			<content:encoded><![CDATA[<p>找了幾個可能有效的辦法<br />
<span id="more-181"></span><br />
不過發現好像都需要取捨些什麼. . . <囧><br />
所以這個問題還是無解<br />
整個是. .. 外星來的IE6&#8230;&#8230;&#8230;.<br />
下面列一下我找到的資訊</p>
<p><a target="_blank" href="http://www.happinesz.cn/archives/991/">IE6 position:fixed bug (固定窗口方法)</a><br />
<a target="_blank" href="http://dancewithnet.com/2007/04/19/cross-brower-css-fixed-position/">跨浏览器的CSS固定定位{position:fixed}</a><br />
<a target="_blank" href="http://davidwalsh.name/css-fixed-position">CSS Fixed Positioning</a><br />
<a target="_blank" href="http://tagsoup.com/cookbook/css/fixed/">position:fixed for Internet Explorer</a><br />
<a target="_blank" href="http://www.gunlaug.no/contents/wd_additions_15.html">position: fixed in Internet Explorer</a><br />
<a target="_blank" href="http://www.wowbox.com.tw/blog/article.asp?id=2357">讓你的頁面在ie6也能玩position:fixed</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/css-ie6position-fixed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
