2013-4-8 藍(lán)藍(lán)設(shè)計(jì)的小編
轉(zhuǎn)載藍(lán)藍(lán)設(shè)計(jì)( www.88yangsc.com )是一家專注而深入的設(shè)計(jì)機(jī)構(gòu) ,為期望卓越的國(guó)內(nèi)外企業(yè)提供有效的 BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)
來(lái)源:http://www.cnblogs.com/Wayou/archive/2012/10/02/jquery_ui.html
如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里
最近項(xiàng)目中使用了一些插件來(lái)做頁(yè)面,這里把jQuery UI的使用分享出來(lái),希望 對(duì)新手有幫助。文章結(jié)尾附源碼下載。
2.2.2 實(shí)現(xiàn)打開多個(gè)標(biāo)簽
有時(shí)你僅僅是為了實(shí)現(xiàn)一個(gè)漸變的動(dòng)畫效果而不得不把javascrip 重新學(xué)習(xí)一遍然后書寫大量代碼。直到j(luò)Query的出現(xiàn),讓開發(fā)人員從一大堆繁瑣的js代碼中解脫,取而代之幾行jQuery代碼。現(xiàn)今,jQuery無(wú)疑已成為最為流行沒有之一的JavaScript類庫(kù)。
而jQuery UI 則是在jQuery 基礎(chǔ)上開發(fā)的一套界面工具,幾乎包括了網(wǎng)頁(yè)上你所能想到和用到的插件以及動(dòng)畫,讓一個(gè)毫無(wú)藝術(shù)感只知道碼字的碼農(nóng)不費(fèi)吹灰之力就可以做出令人炫目的界面。讓你在做界面的時(shí)候隨便‘拿來(lái)’就用,還有一點(diǎn)就是,它是免費(fèi)開源的,用戶可根據(jù)需要自定義甚至重新設(shè)計(jì)。
下面以Tabs和Accordion插件來(lái)看看如何在項(xiàng)目中使用jQuery UI。其他插件的詳盡使用文檔及演示在這里可以學(xué)習(xí)到,只不過(guò)是英文的。
Tabs 形式的插件在網(wǎng)頁(yè)及桌面應(yīng)用程序中都使用得相當(dāng)廣泛,可以用作菜單,也可做為一小部分內(nèi)容的選項(xiàng)卡
圖0
首先在VS2010新建一個(gè)MVC項(xiàng)目,要使用jQuery UI,首先要把jQuery及jQuery UI 腳本文件包含在項(xiàng)目當(dāng)中,并且相關(guān)頁(yè)面要用<script>標(biāo)簽進(jìn)行引用。當(dāng)我們創(chuàng)建好一個(gè)MVC項(xiàng)目后,在Scripts文件夾里,系統(tǒng)已經(jīng)自動(dòng)把jQuery及jQuery UI 腳本文件包含在項(xiàng)目當(dāng)中了(如圖1)。
圖 1
注釋:圖中jquery-1.5.1-vsdoc.js為包含完整提示注釋的版本,在VS里編寫代碼時(shí)會(huì)有智能地顯示提示信息及注釋;jquery-1.5.1.js為標(biāo)準(zhǔn)版本;帶min的為壓縮精簡(jiǎn)后的版本,為的是在客戶端減少下載時(shí)間。一般頁(yè)面中我們會(huì)使用精簡(jiǎn)的版本,只要項(xiàng)目文件夾包含jquery-1.5.1-vsdoc.js,VS會(huì)自動(dòng)調(diào)用里面的提示信息。
現(xiàn)在需要做的就是在頁(yè)面將它包含進(jìn)來(lái)。由于創(chuàng)建好項(xiàng)目后,系統(tǒng)在Site.Mater頁(yè)面中已經(jīng)將jQuery引用到頁(yè)面,這意味著所有使用了母版頁(yè)的頁(yè)面都默認(rèn)引用了jQuery,所以我們?cè)趇ndex頁(yè)面只需要添加對(duì)是jQuery UI文件的聲明:
1 <script src="http://www.cnblogs.com/Scripts/jquery-ui-1.8.11.min.js" type="text/javascript" ></script>
為了在頁(yè)面上呈現(xiàn)Tabs插件,我們需要定義一個(gè)Div,并且在<script>腳本代碼里面選中它,在它身上應(yīng)用tabs方法。
1 <div id="tabs"> 2 </div> 3 4 <script type="text/javascript"> 5 6 $(document).ready(function () { 7 8 $("#tabs").tabs(); 9 10 })11 12 </script>
現(xiàn)在運(yùn)行程序不會(huì)看到任何東西,因?yàn)槲覀冞€沒有往主體Div中定義要顯示的tab,只是定義好了一個(gè)可以放tabs的地方。現(xiàn)在tabs Div中定義一個(gè)無(wú)序列表,列表項(xiàng)決定了要顯示的標(biāo)簽個(gè)數(shù)及要顯示的標(biāo)簽名稱。
1 <div id="tabs"> 2 3 <ul> 4 5 <li><a href="#tabs-1">Tabs1</a></li> 6 7 <li><a href="#tabs-2">Tabs2</a></li> 8 9 <li><a href="#tabs-3">Tabs3</a></li> 10 11 </ul> 12 13 <div id="tabs-1"> 14 15 <p>content of tab one</p> 16 17 </div> 18 19 <div id="tabs-2"> 20 21 <p>content of tab two</p> 22 23 </div> 24 25 <div id="tabs-3"> 26 27 <p>content of tab three</p> 28 29 </div> 30 31 </div>
這里定義3個(gè)列表項(xiàng),名稱分別為Tabs1、Tabs2、Tabs3,列表下方的三個(gè)Div對(duì)應(yīng)著上面定義的三個(gè)標(biāo)簽,用來(lái)呈現(xiàn)每個(gè)標(biāo)簽里面要顯示的正文。頁(yè)面部分基本完工。運(yùn)行程序:
圖 2
值得注意的是,進(jìn)行到這一步并沒有出現(xiàn)圖0中的效果,tabs樣式?jīng)]有應(yīng)用上。原因只可能有一個(gè),那就是樣式表。后來(lái)谷歌一下果然是沒有把相應(yīng)的樣式表包含到頁(yè)面。這在官方的Demo里也沒有提及,也沒給出相應(yīng)的注意,我覺得這里Demo不該省略點(diǎn)如果重要的一句代碼的,不一定每個(gè)第一次使用jQuery UI人都能快速找到問(wèn)題。對(duì)于每一個(gè)新手,在進(jìn)行到這一步都需要去谷歌一下為什么效果沒出來(lái)。找到問(wèn)題后解決起來(lái)就很簡(jiǎn)單了。在頁(yè)面里加上對(duì)jQuery UI 樣式表的引用。
圖 3
最后完整的代碼大概是這樣的。
1 <link href="http://www.cnblogs.com/Content/themes/base/jquery.ui.all.css"type="text/css"rel="stylesheet"/> 2 3 <script src="http://www.cnblogs.com/Scripts/jquery-ui-1.8.11.min.js" type="text/javascript"></script> 4 5 <div id="tabs"> 6 7 <ul> 8 9 <li><a href="#tabs-1">Tabs1</a></li> 10 11 <li><a href="#tabs-2">Tabs2</a></li> 12 13 <li><a href="#tabs-3">Tabs3</a></li> 14 15 </ul> 16 17 <div id="tabs-1"> 18 19 <p>content of tab one</p> 20 21 </div> 22 23 <div id="tabs-2"> 24 25 <p>content of tab two</p> 26 27 </div> 28 29 <div id="tabs-3"> 30 31 <p>content of tab three</p> 32 33 </div> 34 35 </div> 36 37 <script type="text/javascript"> 38 39 $(document).ready(function () {40 41 $("#tabs").tabs();42 43 })44 45 </script>
由于是用的MVC模板生成的項(xiàng)目,所以在Content/themes/base文件夾里已經(jīng)放入了jQuery UI的CSS樣式表,如果沒有,你需要單獨(dú)下載然后放到項(xiàng)目中,并在頁(yè)面正確引用。
現(xiàn)在再來(lái)刷新一下頁(yè)面,效果就出來(lái)了。
圖 4
既然是用樣式表控制的,代表著我們可以隨意對(duì)它進(jìn)行自定義,換顏色等,這在后面的應(yīng)用樣式 里介紹。
對(duì)于Accordion控件就有一些東西需要說(shuō)的了。因?yàn)閷?duì)于一個(gè)東西,如果它不夠靈活,不易擴(kuò)展,會(huì)給使用者帶來(lái)很大的不便。
圖 5
先來(lái)看一下如何將Accordion插件應(yīng)用起來(lái)。我們將它放到我們的Tabs1頁(yè)面里。同Tabs一樣,應(yīng)用起來(lái)也非常的簡(jiǎn)單,只需把相應(yīng)的Div定義好,之后,在腳本總要所要做的工作也就是一句代碼的事。是不是體驗(yàn)到了jQuery UI所帶來(lái)的便捷了。
將之前tabs-1 Div 中的<P>標(biāo)簽及內(nèi)容刪除掉,用如下的代碼替換。
1 <div id="tabs-1"> 2 3 <div id="accordion"> 4 5 <h3> 6 7 <a href="#">Section 1</a></h3> 8 9 <div> 10 11 <p>content of section 1</p> 12 13 </div> 14 15 <h3> 16 17 <a href="#">Section 2</a></h3> 18 19 <div> 20 21 <p>content of section 2</p> 22 23 </div> 24 25 <h3> 26 27 <a href="#">Section 3</a></h3> 28 29 <div> 30 31 <p>content of section 3</p> 32 33 </div> 34 35 </div> 36 37 </div>
其中id為accordion的外圍Div是容器,在腳本代碼里面選中它然后對(duì)它應(yīng)用accordion方法。
1 <script type="text/javascript"> 2 3 $(document).ready(function () { 4 5 $("#tabs").tabs(); 6 7 $("#accordion").accordion(); 8 9 })10 11 </script>
之后,里面的每個(gè)<a>標(biāo)簽就會(huì)被解析成一個(gè)可以點(diǎn)擊的標(biāo)題,<a>標(biāo)簽后緊跟<div>用于放置本小塊的內(nèi)容。最后效果如下圖。
圖 6
需要注意的地方有兩點(diǎn)。一是樣式,每個(gè)jQuery UI其實(shí)都用了在上面說(shuō)的那個(gè)樣式表,如果先前沒將它引用進(jìn)頁(yè)面,這里的Accordion效果也是不會(huì)出來(lái)的。二是這里的格式需要嚴(yán)格按照一個(gè)<a>標(biāo)簽然后跟一個(gè)<div>標(biāo)簽的形式,這樣的交叉形式如果被打亂,呈現(xiàn)出來(lái)的結(jié)果將是你所不愿意扯的。比如你在<a>跟兩個(gè)<div>:
1 <div id="accordion"> 2 3 <h3> 4 5 <a href="#">Section 1</a></h3> 6 7 <div> 8 9 <p>content of section 1.1</p> 10 11 </div> 12 13 <div> 14 15 <p>content of section 1.2</p> 16 17 </div> 18 19 <h3> 20 21 <a href="#">Section 2</a></h3> 22 23 <div> 24 25 <p>content of section 2</p> 26 27 </div> 28 29 <h3> 30 31 <a href="#">Section 3</a></h3> 32 33 <div> 34 35 <p>content of section 3</p> 36 37 </div> 38 39 </div>
你原本以為 這兩個(gè)div會(huì)被包在第一個(gè)secion里面,但其實(shí)真實(shí)的效果會(huì)是有點(diǎn)離譜的:
圖 7
是不是有點(diǎn)坑爹。那如果我需要在section里進(jìn)行布局,非要放兩個(gè)Div或者更多呢。那就必需把這些內(nèi)容裝到一個(gè)div中再放到section1里面,這樣就不會(huì)出錯(cuò)了。為了顯示出確實(shí)是放了兩個(gè)Div,給每個(gè)Div加上邊框。
1 <div id="accordion"> 2 3 <h3> 4 5 <a href="#">Section 1</a></h3> 6 7 <div> 8 9 <div style="border: 1px solid gray"> 10 11 <p>content of section 1.1</p> 12 13 </div> 14 15 <div style="border: 1px solid gray"> 16 17 <p>content of section 1.2</p> 18 19 </div> 20 21 </div> 22 23 <h3> 24 25 <a href="#">Section 2</a></h3> 26 27 <div> 28 29 <p>content of section 2</p> 30 31 </div> 32 33 <h3> 34 35 <a href="#">Section 3</a></h3> 36 37 <div> 38 39 <p>content of section 3</p> 40 41 </div>
圖 8
jQuery UI Accordion最大的一個(gè)硬傷也是最讓人蛋疼的特性就是同時(shí)只能打開一個(gè)標(biāo)簽,比如Section1被點(diǎn)開了,其他Secton必然處于閉合狀態(tài)。如果我想實(shí)現(xiàn)同時(shí)有幾個(gè)標(biāo)簽處于打開狀態(tài)呢,并且我不希望打開的標(biāo)簽因?yàn)槲尹c(diǎn)擊了另外的標(biāo)簽而關(guān)閉掉。很遺憾,這個(gè)插件并不有提供相應(yīng)的Option。更牛逼的是,在官方的Demo中明確說(shuō)了,如果你非要讓多個(gè)標(biāo)簽同時(shí)處于打開狀態(tài),那你就不要用我們的Accordion好了,愛用啥用啥,反正我們就是要讓它只支持一個(gè)標(biāo)簽被打開。
圖 9
好吧,我還沒強(qiáng)大到可以重寫這個(gè)Accordion插件,于是我谷歌“expander”” multi open accordion”之類的,確實(shí)還是有很多朋友是有這樣的需求的,并且也有牛人給出了一些解決方法,但都有點(diǎn)復(fù)雜。最后的最后,我突然頓悟,把每個(gè)section都定義成accordion不就行了嘛。一個(gè)acction同時(shí)只能打開一個(gè)secton,如果我想要每個(gè)section都可任意打開關(guān)閉而不影響別的部分,那把每個(gè)section用accordion代替就好了,并且accordion里只定義一個(gè)section。
說(shuō)起來(lái)有點(diǎn)暈,下面修改之前的代碼,定義id分別為accordion1,accordion2,accordion3三個(gè)div并放入相應(yīng)內(nèi)容:
1 <div id="tabs-1"> 2 3 <div id="accordion1"> 4 5 <h3><a href="#">Section 1</a></h3> 6 7 <div>content of section 1</div> 8 9 </div> 10 11 <div id="accordion2"> 12 13 <h3><a href="#">Section 2</a></h3> 14 15 <div>content of section 2</div> 16 17 </div> 18 19 <div id="accordion3"> 20 21 <h3><a href="#">Section 3</a></h3> 22 23 <div>content of section 3</div> 24 25 </div> 26 27 </div>
然后修改腳本代碼:
1 <script type="text/javascript"> 2 3 $(document).ready(function () { 4 5 $("#tabs").tabs(); 6 7 $("#accordion1").accordion(); 8 9 $("#accordion2").accordion();10 11 $("#accordion3").accordion();12 13 })14 15 </script>
運(yùn)行程序,發(fā)現(xiàn)三個(gè)secton同時(shí)打開了,并且還不能關(guān)閉!這顯然也不是我們想要的結(jié)果。原因很簡(jiǎn)單,如果上面所說(shuō)的accordion這個(gè)插件有且僅有一個(gè)section是被打開的,每個(gè)accordion里我們只定義了一個(gè)section,那這個(gè)section毫無(wú)疑問(wèn)應(yīng)該處于被打開狀態(tài),由于只有它一個(gè),把它關(guān)閉了之后沒有其他section可以打開,所以索性我們想關(guān)它都關(guān)不掉了。
但幸運(yùn)的是,我們可以通過(guò)設(shè)置accordion的collapsible為true來(lái)讓這個(gè)唯一的section可以進(jìn)行折疊打開操作。只需修改腳本如下:
1 <script type="text/javascript"> 2 3 $(document).ready(function () { 4 5 $("#tabs").tabs(); 6 7 $("#accordion1").accordion({ collapsible: true }); 8 9 $("#accordion2").accordion({ collapsible: true });10 11 $("#accordion3").accordion({ collapsible: true });12 13 })14 15 </script>
再次運(yùn)行程序,Okay,一切如我們所想的那樣。
圖 10
還有個(gè)問(wèn)題就是accordion的嵌套。一開始我在嘗試去實(shí)現(xiàn)這個(gè)功能時(shí)也是遇到了些麻煩的。
比如現(xiàn)在我們要在section 1里面想再放一個(gè)accordion,給它取名為subaccordion吧,需要注意的地方就是 這個(gè)subaccordion一定要放在“content of section1”這個(gè)Div中,其他任何形式的擺放都不會(huì)出現(xiàn)正確的效果。如果你覺得直接在Accordion 1里面加一個(gè)<a>標(biāo)簽再加一個(gè)<div>,就會(huì)正確地在Section1里面解析出一個(gè)內(nèi)嵌于Accortion1的Accordion,那你就錯(cuò)了。最后的代碼及效果如下。
1 <div id="tabs-1"> 2 3 <div id="accordion1"> 4 5 <h3><a href="#">Section 1</a></h3> 6 7 <div> 8 9 <div id="subaccortion"> 10 11 <h3><a href="#">subaccortion</a></h3> 12 13 <div>content of subaccortion</div> 14 15 </div> 16 17 </div> 18 19 </div> 20 21 <div id="accordion2"> 22 ........
圖 11
有點(diǎn)不完美的地方就是Section1出現(xiàn)了滾動(dòng)條,下面我們?cè)O(shè)置一下高度屬性并且讓里面那個(gè)子accortion一開始處于折疊狀態(tài)。
修改腳本代碼如下:
1 <script type="text/javascript"> 2 3 $(document).ready(function () { 4 5 $("#tabs").tabs(); 6 7 $("#accordion1").accordion({ collapsible: true, autoHeight: false }); 8 9 $("#subaccortion").accordion({ collapsible: true, active:false });10 11 $("#accordion2").accordion({ collapsible: true, autoHeight: false });12 13 $("#accordion3").accordion({ collapsible: true, autoHeight: false });14 15 })16 17 </script>
圖 12
從這里你已經(jīng)可以看到,可以設(shè)置任意一個(gè)標(biāo)簽一開始是處于折疊還是打開狀態(tài)。當(dāng)然也可以將一個(gè)accortion disable掉,那樣點(diǎn)擊標(biāo)題就不會(huì)有折疊打開動(dòng)作了。
現(xiàn)在,我們是可以方便地使用jQuery UI 做出界面了。但試想,那么多人如果都在用,會(huì)不會(huì)把整個(gè)互聯(lián)網(wǎng)搞得千篇一律,用戶一打開瀏覽器走到哪里看到的都是同一個(gè)東西,會(huì)不會(huì)有點(diǎn)摸不著北。并且我們也需要在使用這些插件的時(shí)候進(jìn)行一些調(diào)整以符合我們自己網(wǎng)站的主題,色調(diào)等。
jQuery UI支持用戶定義樣式,你甚至可以更改實(shí)現(xiàn)代碼來(lái)進(jìn)行更高級(jí)的自定義,如果你有能力的話。
你可以修改相應(yīng)的css文件以達(dá)到修改樣式的目的,但這不如到官網(wǎng)的主題網(wǎng)站去下載自己需要的主題,并且還可以在線編輯出自己想要的主題。
進(jìn)入theme roller后,選擇自己喜歡的主題樣式下載下來(lái)。
圖 13
解壓后進(jìn)行到css文件夾,將jquery-ui-1.8.24.custom.css文件和images文件夾復(fù)制到項(xiàng)目中適當(dāng)位置,然后需要在頁(yè)面正確地引用到,便可將樣式應(yīng)用上。不管你應(yīng)用什么主題,主題所使用的圖片名字都是一樣的,只是顏色不一樣而以。由于本例是用MVC模板生成的項(xiàng)目,所以項(xiàng)目中的imges文件夾中已經(jīng)存在的圖片和下載下來(lái)的圖片可能部分重名,復(fù)制時(shí)詢問(wèn)是否替換,點(diǎn)擊確實(shí)即可。
圖 14
圖 15
這時(shí)把之前寫的樣式表引用改成對(duì)這個(gè)customer樣式表的引用
1 <link href="http://www.cnblogs.com/Content/themes/base/jquery-ui-1.8.24.custom.css" type="text/css" rel="stylesheet" />
然后去刷新頁(yè)面,效果如下圖:
圖 16
需要注意的是jquery-ui-1.8.24.custom.css與images文件夾的相對(duì)位置最好不要改變,也就是把它們兩個(gè)放一起,因?yàn)閏ss文件中會(huì)調(diào)用images文件夾中的圖片,如果你改變了他們的相對(duì)位置,就需要到css中把所有對(duì)圖片的調(diào)用路徑通通改正確后才能使主題正常工作。
不僅僅是顏色,jQuery UI的主題里面,也為我們預(yù)設(shè)了很多圖標(biāo)可供選擇,在網(wǎng)頁(yè)上我們可以看到有一大堆豐富的圖標(biāo)。這些圖標(biāo)的顏色對(duì)應(yīng)你所下載的主題,包含在了imges文件夾中。
圖 17
問(wèn)題是在這么多圖標(biāo)中如何準(zhǔn)確指定我們想要的那一個(gè)。比如現(xiàn)在想把Accordion標(biāo)題左邊的三角形圖標(biāo)改成線條形的尖角形狀。
下面只是個(gè)人提供的一個(gè)小技巧。將鼠標(biāo)指到你想要的圖標(biāo)身上,會(huì)出現(xiàn)tooltip提示文本,這個(gè)文字就對(duì)應(yīng)這個(gè)圖標(biāo)。
圖 18
現(xiàn)在我們得到這個(gè)名字后,就可以到腳本代碼里去進(jìn)行修改了。
1 <script type="text/javascript"> 2 3 $(document).ready(function () { 4 5 $("#tabs").tabs(); 6 7 $("#accordion1").accordion({ collapsible: true, autoHeight: false, 8 9 icons: { "header": "ui-icon-carat-1-n", "headerSelected": "ui-icon-carat-1-s" }10 11 });12 13 $("#subaccortion").accordion({ collapsible: true, active:false ,14 15 icons: { "header": "ui-icon-carat-1-n", "headerSelected": "ui-icon-carat-1-s" }16 17 });18 19 $("#accordion2").accordion({ collapsible: true, autoHeight: false ,20 21 icons: { "header": "ui-icon-carat-1-n", "headerSelected": "ui-icon-carat-1-s" }22 23 });24 25 $("#accordion3").accordion({ collapsible: true, autoHeight: false,26 27 icons: { "header": "ui-icon-carat-1-n", "headerSelected": "ui-icon-carat-1-s" }28 29 });30 31 })32 33 </script>
最后來(lái)看下效果,perfect.
圖19
到這里基本介紹了jQuery UI的使用過(guò)程。當(dāng)然,jQuery UI不只包含tabs和accordion 這兩個(gè)插件,其他的插件及效果的使用也相差不多,詳盡的使用及設(shè)置方法都可以在官方的文檔及Demo中找到答案。
后記:因?yàn)閖Query已經(jīng)火得一塌糊涂了,如果再結(jié)合jQuery UI,將更大程度上減輕程序員的負(fù)擔(dān)。在享受這些便利的同時(shí),我們不得不默默地內(nèi)心要感謝一下那些為jQuery及UI做出奉獻(xiàn)的同行們,同時(shí)我們也能盡我們自己的一分力量,來(lái)豐富擴(kuò)展jQuery的插件及UI庫(kù)。
例子源碼下載:http://files.cnblogs.com/Wayou/jQueryUIExample.rar
藍(lán)藍(lán)設(shè)計(jì)(北京蘭亭妙微科技有限公司)是一家專注而深入的設(shè)計(jì)機(jī)構(gòu) ,為期望卓越的國(guó)內(nèi)外企業(yè)提供有效的視覺設(shè)計(jì)、ui界面設(shè)計(jì)、網(wǎng)站建設(shè)、用戶體驗(yàn)服務(wù),涉及互聯(lián)網(wǎng)、IT軟件、電子、銀行、保健品等多個(gè)行業(yè),并建立了良好的口碑,積累了豐富的經(jīng)驗(yàn)。
全國(guó)統(tǒng)一服務(wù)熱線 400-608-6026 QQ:896757335
藍(lán)藍(lán)設(shè)計(jì)的小編 http://www.88yangsc.com