最近都忙着寫這個插件,用它來統合跑馬燈(marquee),輪播(carousel),風手琴(accordion), 切換卡(tabs), slide(幻燈片)這五種控件。
下面是它們的一些描述:
- 跑馬燈沒有觸發點(trigger),而顯示內容通常是一行行文字或扁平狀的圖片,自動往上往下滾動。不過也有從左到右滾動的。
- 輪播經常出現新聞的首頁,觸發點與面板個數相同,基本上從左到右切換,到了盡頭回到第一張繼續切換。觸發點都浮於控件的最上層的右下角。
- 風手琴與輪播很相似,不過很少會自動進行自動切換。其觸發器與控件同寬或同高,非常顯眼。
- 切換卡的觸發器會於控件的上方,也比較少自動切換。
- 幻燈片基本會提供兩個觸發點,上一頁與下一頁,還有綁定鍵盤事件進行上下翻。
因此,我們要提供一個API,用於讓用戶切換到指定的面板,同時讓對應的觸發點處於激活狀態(高亮狀態)。
另外此五個控件就只在HTML結構上存在出入,什么功能只是添多或添少的問題而已。因此我提供了兩種方案來指定控件的主體。一種是像EXT那樣,其HTML與CSS都是動態生成的,另一種是,指定頁面已有的某一HTML片段作為頁面的主體。然后再從這主體中抽取出觸發點(triggers)與面板(panels),轉化為控件實例的屬性,供其他API調用。
下面是其API的說明:
$.fn.switchable(settings)
settings的配置參數:
- data:用於創建控件,必須是一個對象數組,每個對象都擁有trigger(可選)與panel屬性。
- data_expr:頁面現存的具有切換卡,手風琴等結構的HTML元素的CSS表達式。此屬性與data屬性只能二選一。
- trigger_class:觸發器的類名,它起着類似按鈕的作用,用於切換面板。
- panel_class:面板的類名。
- active_class:處於激活狀態的面板與觸發器都會添加上此類名。
- active_event:用於切換面板的事件,不是click就是mouseover。
- active_callback:切換面板時的回調函數。
- autoplay:是否自動進行切換,默認是false。
- pause_over_panel:當鼠標移到控件之上是否中止切換,默認是false。
- interval:切換面板后要延遲多久才自動開始下一個切換,單位為ms,默認是1000。
- switch_out:正在處於激活狀態的面板在失去激活狀態時要進行的切換動畫,默認是$.fn.slideUp。
- switch_out_args:上面動畫的參數, 默認為500。
- switch_in:某一面板在變成激活狀態時要進行的切換動畫,默認是$.fn.slideDown。
- switch_in_args:上面動畫的參數, 默認為500。
切換卡對象默認擁有以下方法,都是使用$(expr).tabs(method,args1,args2,args3)的形式進行調用:
- active(index, [callback],[e]): 切換到某一面板,index為面板的序號,從零開始。callback為回調函數,e為事件對象。回調函數中的this指向事件源對象或ui.target[0], 參數為e或ui
- remove(index, [callback]): 移除到某一面板,index為面板的序號,從零開始。callback為回調函數,擁有一個參數,就是實例自身, this指向ui.target[0]。
- add(index, trigger, panel): 在某一切換卡之后添加一個切換卡,trigger與panel為新切換卡的按鈕與面板。
- destroy(): 銷毀切換卡實例,移除相關事件綁定。
- invoke(method, args1, args2): 如果method為實例的一個方法,則調用此方法,將其他參數傳進去,否則則重寫或添加相關屬性。
經過我的觀察與研究,無論是切換卡也好,輪播也好,幻燈片也好,它們的結構都是非常相似。其中用於裝載內容的面板panel是必不可少, 而在這些控件中,基本上都會一個觸發器(trigger)與之對應,另外,在輪播控件中,切換大多數是整體向左移動或整體向上移動,這就要求有一個容器, 其寬等於所有面板的寬或其高等於所有面板的高,因此網上許多輪播控件都采用dl,dt,dd結構,對應我的switchable控件,分別中ui.target, ui.triggers, ui.panels,其中ui是可切換對象的實例,默認類名依次是.mass_swichable, .trigger, .panel。那么對非輪播控件,ui.target在外觀的構建上也不是沒有用處的, 畢竟多一層元素,我們可以用CSS把控件打扮得更漂亮。
下面是一個典型可切換對象的HTML結構
<div class="sample">
<div class="mass_switchable">
<div class="trigger active">標題1</div>
<div class="panel active">面板1</div>
<div class="trigger">標題2</div>
<div class="panel">面板2</div>
<div class="trigger">標題3</div>
<div class="panel">面板3</div>
<div class="trigger">標題4</div>
<div class="panel">面板4</div>
</div>
</div>
默認情況下,控件會在ui.parent進行事件代理(代理trigger元素上的點擊事件或mouseover事件),以實現面板的切換。 至於這些面板怎么切換,控件提供了三個入口, switch_in回調(this指向正要變成激活狀態的面板), switch_out回調(this指向正要失去激活狀態的面板)與 active_callback回調(this指向可切換對象, 我們可以ui.active_index得知處於激活狀態的面板的索引值, 同時也是對應觸發點的索引值)
下面是一些例子, 更詳細的講解見github上的文檔!暫沒有幻燈片的示例,其實它是最簡單的,但通常是炫在其幻換時的特效,大家可以想象一下微軟的PowerPoint,因此這需要一個強大的切換特效插件才行。這個以后會補上的。
http://detail.tmall.com/item.htm?spm=1103qB9o.2-v9_S.s-3vAY2l&id=12473871046 http://www.madeincima.it/download/samples/jquery/easyAccordion/