作者:吉光片羽 主页:www.jgpy.cn Email:kandytang[at]msn.com QQ:121885959 腾讯微博:t.qq.com/kandyt
前端交流群:204694749 承接JQuery特效/插件定制、博客主题设计定制、企业建站
通常情况下,Tab选项卡的默认结构都类似如下:
<div class="tab"> <div class="tabtitle"> <span>Tab 1</span> <span>Tab 2</span> <span>百度</span> <span>谷歌</span> </div> <div class="tabboy"> <div class="tabcont"> Tab 1 的内容 </div> <div class="tabcont"> Tab 2 的内容 </div> <div class="tabcont"> 百度一下你就知道 www.baidu.com </div> <div class="tabcont"> 谷歌不一定打得开哦 </div> </div> </div>
表现出来就类似这样:
Tab 1 Tab 2 百度 谷歌Tab 1 的内容Tab 2 的内容百度一下你就知道
www.baidu.com谷歌不一定打得开哦
一旦内容过多,标题和内容就会相距甚远,表意也就不准确了,谁知道哪一段开始是另一部分内容呢?当然,这是在JS失效的前提下。但是蜘蛛并不知道你用了选项卡,对于它来说,这就是一片不连贯,读不通的“伪原创”(夸张了点…)。再者,考虑下手机用户吧,他们可能只看纯文本的内容。有没有恍然大悟呢?
OK,既然你恍然大悟的意识到了这一点,那么就一起加入我们吧。为了更佳的用户体验,你有理由选择 KandyTabs 。还没弄明白?那就看看代码结构吧。
P.S. 各个效果的具体使用方法请参看下方的演示,详细的教程会陆续推出,请关注吉光片羽的博客。
展望的意思就是还没有实现的,所以别乱激动。
很简单,使用 .KandyTabs() 到你的对象即可。如 $("div").KandyTabs() 。
从来没用过JQuery插件?那好吧……
因为是JQuery插件,所以我们要在插件之前导入JQuery(必须为1.4以上版本)库,并一同放在<head></head>之间,如下:
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="kandytabs.js"></script>
接下来,就让KandyTabs发威吧。
你可以在这两行之后,或者是<body/>之内使用如下代码让KandyTabs发威:
<script type="text/javascript"> $(function(){ $("dl").KandyTabs(); }) </script>
通常情况下,我们会使用 <dl/> 来制作标准的Tab选项卡原型,所以你的KandyTabs对象就是 dl ,当然也可以是别的,请查看代码结构了解详情。这个也看不懂?那先学学 JQuery 吧……
更高级的应用请查看 配置说明
推荐使用dl元素(不是说必须得用dl元素)
<dl> <dt>Tab 1</dt> <dd>Tab 1 的内容。</dd> <dt>Tab 2</dt> <dd>Tab 2 的内容。</dd> </dl>
或者你想考虑SEO
<div> <h1>Tab 1 关键词</h1> <div>Tab 1 的内容。</div> <h2>Tab 2 关键词</h2> <div>Tab 2 的内容。</div> </div>
是的,不用担心,只要你能保持这样的结构,选项卡,折叠效果都可以使用。如果不具备这样的结构条件,那就用DOM创建。
注意:如果你要使用默认数字导航的幻灯片,你可以不必考虑dt/hn等标题元素,KandyTabs会自动创建数字标题。
构建一个幻灯片,你只需如下代码结构即可
<div> <img src="1.jpg" /> <img src="2.jpg" /> <img src="3.jpg" /> <a href="#" title="也可以是一个包含有链接的图片"><img src="4.jpg" /></a> </div>
在最新版本中,你也可以直接使用符合KandyTabs生成结构的代码结构来生成选项卡,如此可以避免选项卡生成前后出现的界面“混乱”问题。
此代码结构并不被推荐使用,原因在插件简介中已说明——请考虑内容的可读性!
<dl> <dt> <span>Tab 1</span> <span>Tab 2</span> </dt> <dd> <div> Tab 1 的内容 </div> <div> Tab 2 的内容 </div> </dd> </dl>
你可以在.KandyTabs({})的“{}”中使用以下配置来自定效果:(以下显示的是默认配置)
配置名称 | 默认值 | 说明 |
---|---|---|
id | "" | Tab生成后的id,将覆盖之前的id,注意样式修改。 |
classes | "kandyTabs" | Tab的自定义class,默认为kandyTabs,其他自带默认样式有kandyFold、kandySlide、kandyLoop、kandyStep。 |
hoverNEW | "" | Tab暂停切换(播放)的触发对象,默认是Tab本体;如“#tab .tabtitle”。 |
btn | "" | 符合KandyTabs结构的指定按钮元素;如“dt”或“.btn”。 |
cont | "" | 符合KandyTabs结构的指定内容元素;如“dd”或“.cont”。 |
type | "tab" | Tab的衍生用法,支持“slide(幻灯片),fold(折叠)”。 |
trigger | "mouseover" | Tab触发的方式,支持默认事件及自定义事件。 |
action | "toggle" | Tab切换的方式,只包括“toggle(直接显示/关闭),fade(渐隐渐现),slide(滑动),roll(滚动),slifade(fade后调整高度)” |
easing | linear | JQuery Easing插件(这是啥?)接口。 |
custom | function($btn,$cont,index,$tab,this){} | 自定义效果,即切换后自定义的动画效果,效果见Slide效果演示三; btn=选项卡按钮、cont=选项卡内容、index=当前索引、tab=当前选项卡;this=当前选项卡实例化对象;请按顺序匹配。 |
delay | 200 | 仅在mouseover事件中有用,即鼠标经过响应延时。 |
last | 400 | 动画(切换效果持续)时间,默认为400。 |
current | 1 | 默认激活的第N个Tab,可通过URL配置,格式为“元素ID:数值”,支持多个,如:xxx.com/?mytab:2&myslide:5&myfold:10。 |
fullNEW | false | 全屏背景播放效果,尺寸依据相对定位的父元素,采用CSS3填充背景属性。 注:将采用cont中第一张图为背景并隐藏第一张图,IE9以下图片尺寸需要足够大为佳。 |
direct | "top" | roll的方向,默认为向上(即垂直方向),支持 left 即向左、right 即向右、bottom 即向下。 |
except | "" | 不作为Tab的元素,如你本Tab在右上角看到的提示,支持N个,如 "h4 .tip .more"。 |
child | [] | ["对象",{配置}],如 ['#child .son',{}],{}中直接写配置内容,不填则沿用父配置效果。 |
ready | function($tab,this){} | Tab运行前回调函数;tab=当前选项卡;this=当前选项卡实例化对象。 |
done | function($btn,$cont,$tab,this){} | Tab完成后回调函数; btn=选项卡按钮、cont=选项卡内容、tab=当前选项卡;this=当前选项卡实例化对象;请按顺序匹配。 |
auto | false | 是否启用自动切换(播放);支持播放次数设置,如:auto:1,即只自动播放一次;默认不启用。 |
stall | 5000 | 切换停顿时间,默认为5000毫秒(即5秒)。 |
scroll | false | Tab选项个数超出Tab的宽度时启用卷轴功能,以避免选项按钮变成两行影响美观;默认不启用;启用后会在Tab选项按钮后追加一对“< >”。 |
add | false | 是否启用增加Tab选项功能;默认不启用;启用后会在Tab选项按钮后追加一个“+”。 |
del | false | 是否启用删除Tab选项功能;默认不启用;启用后会在Tab的每个选项按钮右上方显示一个“x”。 |
process | false | 是否显示进度条;默认不启用;可通过CSS设置外观; 也可配置进度条的尺寸、动画方向和背景色,格式为“尺寸[w|h][+|-]尺寸#色号”; 其中“[w|h][+|-]”即宽高的增减为必写,或可只写“#色号”,前后尺寸不写则采用默认Tab尺寸。 例1:100h+200,即宽度为100px,高度为200px,动画高度从0到200; 例2:w-#f00,即高度为Tab高度,宽度为Tab宽度,动画宽度从Tab宽度到0,背景色为#f00; 直接写true,则效果如同 w- ,即Slide演示的第一个效果,但需CSS设置背景色。 |
ctrl | false | 是否显示 暂停/自动 控制按钮。 |
nav | false | 是否显示前一个/后一个导航,默认包含当前索引值和总数,可以通过css控制显示与否。 |
loop | false | 导航操作是否循环,默认为否。 |
column | 0 | 默认为0,即不启用旋转木马效果,填写相应数值则自动执行旋转木马效果,请配合 type:"slide" 使用。 |
resize | true | 切换动作完成后是否重新调整高宽,如果高宽在CSS中定死请写false以提高效率。 |
lang | { first:["已是首个","<"], prev:["前一个","<"], next:["后一个",">"], last:["已是末个",">"], play:["播放",">>"], pause:["暂停","| |"], left:["前一个选项","<"], right:["后一个选项",">"], add:["新增选项","+"], del:["删除选项","x"] btn:"新选项", cont:"新内容", empty:"暂无内容" } |
目前显示的是默认语言和符号; 数组项请按照["提示文字","显示文字"]的格式填写,支持HTML代码; 如需调用iframe或ajax内容,cont内容请按如下规范填写(即通过链接的rel来判断类型): AJAX:<a href='url' rel='ajax'/> 或 <a href='#content' rel='ajax'/> IFRAME: <a href='url' rel='iframe'/> 或 <a href='url?h:400' rel='iframe'/> 其中地址参数h:400表示设定高度为400px。 |
你可以通过以下三种方式来调用API接口。
//方法一;当选项卡为单个时,定义变量并同时赋值。 var mytab = $("#tab").KandyTabs();//例:mytab.tab(5) //方法二;当选项卡为多个时,定义变量并同时赋值,最后通过数组来设置对应选项卡。 var tabs = $("dl").KandyTabs();//例:tabs[0].tab(1); tabs[1].play("reverse"); tabs[n].add(); //方法三;当选项卡为多个时,首先生成KandyTabs选项卡。 $(".tab").KandyTabs(); var taba = $(".tab")[0].KandyTabs;//例:taba.add() var tabb = $(".tab")[1].KandyTabs;//例:tabb.del() var tabc = $(".tab")[2].KandyTabs;//例:tabc.play()
然后通过“.”来连接接口,如:$("#tab")[0].KandyTabs.add() 或 tab.add()。
接口名称 | 配置 | 示例 | 说明 |
---|---|---|---|
tab | (num | string | $obj) | tab(1) | 激活第N个选项,非选项索引值,从1开始,填0则为最后一个。 |
tab("prev") 或 tab("next") | 激活前一个或后一个选项。 | ||
tab("#bla") 或 tab($("#bla")) | 激活选项对象,即tabbtn的id或class乃至tagName。 | ||
add | ("text | html" | true,"text | html" | true, | true) | add() 或 add(true) add("new tab","<p>new tab content</p>",true) |
新增选项;可选填选项、选项内容,true表示激活当前新增选项。选项及内容支持文本或单个HTML元素。 |
del | ( | num | string | $obj) | del() 或 del(1) | 删除第N个选项;为空则删除最后一个选项。 |
del(".bla") 或 del($(".bla")) | 选项对象,即tabbtn的id或class乃至tagName。 | ||
play | ( | string | true, | true) | play() 或 play("prev") play("reverse") |
true为空时只调整自动播放(切换)方向。 play("next")等同于play();next表示向后,prev表示向前播放;reverse表示反向;true表示开始自动播放。 |
play(true) 或 play("prev",true) play("reverse",true) |
|||
pause | ( | true) | pause() 或 pause(true) | 暂停播放(切换);true则表示停止播放(切换)。 |
set | .action=Str .custom=Fn .delay=Num .last=Num .auto=Bln | Num .stall=Num .loop=Bln .resize=Bln .lang.del=Array .lang.btn=Str .lang.cont=Str |
set.action="slide" set.custom=foo() set.delay=500 set.last=1000 set.auto=true 或 .auto=1 set.stall=8000 set.loop=true set.resize=true set.lang.del="关闭" set.lang.btn="珍惜生命" set.lang.cont="<b>远离IE!</b>" |
除了在TAB生成时已既定的配置,其余皆可通过set来设置。 .action配置,在非roll的情况下可自由变换,且roll会自动换成slide,而为roll时不支持变换 .lang的配置,仅在可增填选项时可用。 |
get | {options} .now .all |
get方法仅用于获取KandyTabs配置中无法在外部控制的配置内容; {options}表示KandyTabs的配置内容中除了上方set配置以外的所有配置; 注:若配置与set中相同,则等同于set,即get.action="fade"等同于设置了set.action="fade"; get.now 表示当前激活的选项位数,get.all表示选项总数。 |
如需显示本页样式,可导入kandytabs.css文件,并正确命名各类class即可;如需自定义样式,请参考如下元素样式命名表:
注:有缩进行为基本元素样式,其他非缩进行元素需在相关配置后设置。
.kandyTabs{} .kandyTabs .tabexcept-title{} .kandyTabs .tabtitle{} .kandyTabs .tabtitle .tabbtn{} .kandyTabs .tabtitle .tabbtn .tabdel{} .kandyTabs .tabtitle .tabbtn kbd{} .kandyTabs .tabtitle .tabcur{} .kandyTabs .tabtitle .tabscroll{} .kandyTabs .tabtitle .tabscroll .tabadd{} .kandyTabs .tabtitle .tabscroll .tableft{} .kandyTabs .tabtitle .tabscroll .tabright{} .kandyTabs .tabbody{} .kandyTabs .tabbody .tabcont{} .kandyTabs .tabbody .tabroll{} .kandyTabs .tabbody .tabroll .tabcont{} .kandyTabs .tabexcept{} .kandyTabs .tabporcess{} .kandyTabs .tabnav{} .kandyTabs .tabnav em.tabprev{} .kandyTabs .tabnav em.tabprevno{} .kandyTabs .tabnav b.tabnow{} .kandyTabs .tabnav i{} .kandyTabs .tabnav b.taball{} .kandyTabs .tabnav em.tabnext{} .kandyTabs .tabnav em.tabnextno{} .kandyTabs .tabctrl{} .kandyTabs .tabctrl .tabplay{} .kandyTabs .tabctrl .tabpause{}
特别声明: 没有什么东西是拿来就能用的,如果你只是希望复制粘贴的用上KandyTabs,请绕道百度谷歌搜索其他能让你直接复制粘贴使用的JS特效或JQuery插件吧,谢谢合作!
不好意思,完整的DEMO演示还没有做好,如果你急着用,就请先下载最新 kandytabs.pack.js 和 kandytabs.css 吧!别忘了 jquery.js !
注意: 如果您要下载本演示页面请使用IE浏览器。
请前往本插件博客发布页面提交反馈或BUG。http://www.jgpy.cn/blog/front-end/KandyTabs.htm
以下为已知BUG及(解决办法):
想增加外链么?那就快点使用并告诉我吧!或者观摩一下实际应用效果:
<dl id="simple"> <dt>简介</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>参数</dt> <dd>......</dd> </dl>
$("#simple").KandyTabs();
<dl id="fade"> <dt>简介</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>参数</dt> <dd>......</dd> </dl>
#fade .tabtitle{ text-align:center; }
$("#fade").KandyTabs( { action:"fade", delay:1000 } );
<dl id="fade"> <dt>简介</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>参数</dt> <dd>......</dd> </dl>
#fade .tabtitle{ text-align:center; }
$("#slifade").KandyTabs( { action:"slifade", delay:500 } );
<dl id="slide"> <dt>简介</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>参数</dt> <dd>......</dd> </dl>
$("#slide").KandyTabs( { action:"slide", trigger:"click" } );
<dl id="rollleft"> <dt>简介</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>参数</dt> <dd>......</dd> </dl>
#rollleft .tabtitle{ float:left; margin:0 2px -2px 0; _margin-right:-1px; border:none; } #rollleft .tabtitle .tabbtn{ display:block; width:50px; margin:0 0 2px; background:none; border:1px solid #DDD; cursor:pointer } #rollleft .tabtitle .tabcur{ border:1px solid #ddd; background:#DDD; margin:0 -2px 2px 0; width:52px; cursor:default; _position:relative } #rollleft .tabbody{ border-width:1px 1px 1px 2px; float:right } #rollleft .tabcont{ margin:0 5px; width:237px }
$("#rollleft").KandyTabs( { action:"roll", trigger:"mouseup", direct:"left" } );
这是一个非标准的选项卡原型,目前为未生成KandyTabs时的外观,无法切换选项卡。你可以生成KandyTabs选项卡,并查看原型的xhtml代码结构。
<dl id="fold-simple"> <dt>Intro</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>JS</dt> <dd>......</dd> </dl>
$("#fold-simple").KandyTabs( { classes:"kandyFold", type:"fold" } );
<dl id="fold-slide"> <dt>Intro</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>JS</dt> <dd>......</dd> </dl>
$("#fold-slide").KandyTabs( { classes:"kandyFold", action:"slide", type:"fold" } );
<dl id="fold-fade"> <dt>Intro</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>JS</dt> <dd>......</dd> </dl>
#fold-fade .tabbtn{ cursor:pointer } #fold-fade .tabcur{ display:none }
$("#fold-fade").KandyTabs( { classes:"kandyFold", action:"fade", type:"fold", trigger:"click" } );
<dl id="fold-left"> <dt>Intro</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>JS</dt> <dd>......</dd> </dl>
整理中...
$("#fold-left").KandyTabs({ classes:"kandyFold", type:"fold", action:"fade", trigger:"click", last:800 })
<dl id="fold-right"> <dt>Intro</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>JS</dt> <dd>......</dd> </dl>
整理中...
$("#fold-right").KandyTabs({ classes:"kandyFold", type:"fold", direct:"left", action:"slide", done:function(b,c,t){ b.each(function(i){ $(this).insertAfter(c[i]) }) c.wrapInner("<div style='padding:10px'/>") } })
这是一个
单列
非循环
且选项卡宽度非tabcont宽度正比
的一个滚动效果演示
这个效果只支持
direct为left或top
并且tabnav不包含tabpage内容
同时还隐藏了tabtitle
否则
他看起来会很不科学
你还可以倒着播放一次
<dl id="scroll"> <dt>简介</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>参数</dt> <dd>......</dd> </dl>
$("#scroll").KandyTabs( { scroll:true } );
<dl id="deladd"> <dt>简介</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>参数</dt> <dd>......</dd> </dl>
$("#deladd").KandyTabs( { action:"fade", trigger:"click", add:true, del:true, scroll:true, nav:true } );
<dl id="fade"> <dt>简介</dt> <dd>......</dd> <dt>Xhtml</dt> <dd>......</dd> <dt>CSS</dt> <dd>......</dd> <dt>参数</dt> <dd>......</dd> </dl>
var tab $(function(){ tab = $("#api").KandyTabs( { action:"slide" } ); })