最近都忙着写这个插件,用它来统合跑马灯(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/