【Cenvol插件】— 使用指南

时间:2023-01-20 22:25:49

前言


本人目前在杭州世翔信息技术有限公司担任前端工作,隶属于网建部,大多时间是在制作企业网站(偶尔开发大型项目),经常要用到tab选项卡、slide焦点图、无缝滚动、banner切换、等高等等的js功能or特效。
刚开始时,不会js,网上找代码来用(懒人图库懒人建站是不错的网站哦);之后看了《javascript DOM编程艺术》学会了自己写,就不用网上的代码了,觉得网上的代码不干净,还是用自己的舒服,同时可以锻炼自己的js水平;再后来完看了《锋利的jQuery》开始用jquery做各种特效(相对于js来说真心方便- -)。

企业网站要用到js功能其实大多数就是前面提到的这些,反复复制使用原先写的代码,为什么不自己写个插件只要输入参数就好呢?于是,我开始写自己的插件库。目前我的插件库里写了tab选项卡插件slide焦点图插件Equal等高插件Odevity隔行变色兼容HTML5-placeholder属性ScrollTo滚动跳转,后续会不断增加新功能的。

Ps:我们公司的英文名称是cenvol,所以插件名称同名。

Tab选项卡


jQuery插件的开发包括两种:
一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法。jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级别的插件开发,即给jQuery对象添加方法。

Tab选项卡是基于jQuery本身拓展的功能。
它的默认参数是:

oTab:"#tab",                    //tab选项卡的容器(父级)
sTabChildren:"a",               //tab选项卡
oTabMain:"#tabMain",            //tab内容区的容器(父级)
sTabMainChildren:"ul",          //tab内容区
sClass:"current",               //选中样式
sEvent:"click",                 //tab选项卡切换的触发事件
sEarliest:true,                 //是否执行初始化显示
iStart:0,                       //最先显示的选项卡
fnAdditional:""                 //追加方法

假如我们有这样的页面:

<div id="tab"><a>1</a><a>2</a><a>3</a></div>
    <div id="tabMain">
        <ul>
            <li>内容一</li>
        </ul>
        <ul>
            <li>内容二</li>
        </ul>
        <ul>
            <li>内容三</li>
        </ul>
    </div>

跟默认值相完全符合,直接写$.tab()就能生效了。见案例:
http://sandbox.runjs.cn/show/himra3nx

但是我们不可能每次html结构都是这样的,当遇到结构不同的时候就需要对参数进行修改(不要跑到插件内部去修改,因为它还有可能在其它地方被调用)。这时候我们就要这样写:

$.tab({
    oTab:"#tab",                    //tab选项卡的容器(父级)
    sTabChildren:"a",               //tab选项卡
    oTabMain:"#tabMain",            //tab内容区的容器(父级)
    sTabMainChildren:"ul",          //tab内容区
    sClass:"current",               //选中样式
    sEvent:"click",                 //tab选项卡切换的触发事件
    sEarliest:true,                 //是否执行初始化显示
    iStart:0,                       //最先显示的选项卡
    fnAdditional:""                 //追加方法
});

可以只写要修改的部分(各参数都对应了相应的注释,只要按照注释修改就可以了),其它依旧按照默认值,比如:

$.tab({
    sTabMainChildren:"dl",
    sEvent:mouseover
})

注意,参数之间的分割是“,” 。末尾的参数不要加标点符号!不然现代浏览器下正常、低版本浏览器(IE6 \ 7)会报错且代码无效!

其中最后面的追加方法(fnAdditional)要特别介绍一下,这个是一个拓展的方法。原本插件功能是写死的,但是有了追加方法,它可以让它活起来。比如:

$.tab({
    sTabMainChildren:"dl",
    sEvent:mouseover,
    fnAdditional:function(){
        alert("123");
    }
})

它会在插件被调用时被触发,也会在你鼠标事件触发时触发(这里可以理解为回调函数)。有时候我们通过js做的两栏等高布局的页面,tab选项卡切换后,新显示的tab主体太高结果把其中一栏给撑开,或者被溢出隐藏了。这时候就可以用追加方法了。在使用ajax的时候也同样适用。
在后面的很多插件功能中都有追加方法这个参数,它让插件功能更加灵活。

Slide焦点图


Slide焦点图也是基于jQuery本身拓展的功能。
它的默认参数是:

oSlide:"#slide",            //焦点图内容容器
oSlideChildren:"li",        //焦点图内容
oSlideList:"#SlideList",    //焦点图列表容器
oSlideListChildren:"a",     //焦点图列表
sClass:"current",           //选中样式
sEvent:"mouseenter",        //焦点图切换的触发事件
bAuto:true,                 //需要自动切换吗
iSpeed:3000,                //自动切换的速度
iNumber:0,                  //首先显示的图片编号
bDrChoose:true,             //是否淡入淡出
ichangeSpeed:1000,          //渐变速度
bHover:true,                //是否启动鼠标移入时停止切换
fnAdditional:""             //追加方法

同样的假如插件的默认值和页面的html结构相完全符合,直接写$.Slide()就能生效了。但是如果不一样,可以通过调用插件,进行局部的修改(如下),只需要改要改变的地方即可。

$.slide({
    sClass:"click",             //选中样式
    bAuto:true,                 //需要自动切换吗
    iSpeed:5000                 //自动切换的速度
});

假如说我们给bAuto参数设置了fasle,事实上下面的iSpeed是不用填写的,你都不用自动切换了,还要切换速度干嘛?插件中有很多地方会有这样相关联的参数,看备注应该没什么问题吧?

这里的追加方法是页面切换一次调用一次。使用方式如tab选项卡。

Equal等高插件


Equal等高插件是让某个对象下面的元素进行等高的插件,最终的高度统一按照元素中最大高度进行赋值。
与前面的tab选项卡和slide焦点图插件不同,它是对象级别的插件。调用方式有所不同,如下:

$("#idName").equal();

这里的#idName是需要等高的元素的上级元素(可以是父亲也可以是祖父、只要辈分比它大就能执行到)。这里的equal()就是调用插件,它里面有两个默认参数,上面的写法只是在和默认参数相符合的情况下有效。多数情况下是需要修改参数的,参数如下:   

oEqualSon:new Array(".layoutSmall",".layoutBig"),   //需要匹配高度的元素数组
fnAdditional:""

默认需要匹配高度的是 父级元素下的.layoutSmall和.layoutBig两个元素。因为oEqualSon是数组,所以这里输入参数有两种形式:

//oEqualSon 调用形式1
$("#idName").equal({
    oEqualSon:new Array(".a",".b",".c"),
    fnAdditional:""
});
//oEqualSon 调用形式2
$("#idName").equal({
    oEqualSon:[".a",".b",".c"],
    fnAdditional:""
});

结果是一样的,都是让id为idName的对象下面的.a\.b\.c三个元素统一高度。
这里的追加方法是在元素高度赋值之后执行。使用的情况最多的是,a元素的高是100px,b元素的高也是100px但是它上下各有1px的边,这个时候就需要在赋值高度结束后,再对这个高度进行-2px的处理。注:如果不处理高度分别是100px、102px。

Cenvol插件中所有对象级别的插件都是可以进行链式结构的,它们最后都会返回$(this),即调用插件的对象。
跟普通的jquery语法一样,你可以:

var idNameHtml=$("#idName").equal().html();

Odevity隔行变色插件


Odevity隔行变色插件是让某个对象下面的元素按照基数,进行添加class的操作。最原先它为了实现表格的隔行变色而写的,后来对其进行了功能拓展。
它也是对象级别的插件,因此调用方式如下:

$("#idName").odevity();

#idName是需要进行隔行添加样式的元素的父级。插件的默认参数如下:

oChange:"tr",                   //需要被匹配的元素
iBase:2,                        //基数
bZero:true,                     //是否从1开始计数,否则从0开始
sClass:"even"                   //应用的class

从默认参数看出,它的默认设置是用来做表格的奇偶数换行的。给table中偶数的tr添加even样式。如下:

$("table").odevity();

我们平时对奇偶数的理解是第一行是奇数、第二行是偶数、第三行是奇数,但是在jquery中元素编号是从0开始计数的,也即使说:第一行偶数、第二行奇数、第三行偶数,跟我们正常的理解方式正好相反。
插件中对这个问题进行了修正,默认情况下元素是从1开始计数的,假如需要从0开始计数,把bZero参数设为false就可以了。
这个插件的功能不止于此,前面说过后来有对插件进行了功能拓展。这个拓展使Odevity奇偶数插件不在局限于表格的奇偶数换行,我们可以隔N元素个添加class,只要修改iBase参数,这个参数就是需要隔几行添加class的意思,如果想要添加其它的class样式,可以修改插件的sClass属性。
做企业网站时,经常要做到这样的页面:【Cenvol插件】— 使用指南
为了使UL下所有li并排,于是给每个Li写了左浮动(float:left);为了给所有LI增加边距又写了右外边距(margin-right:?px)。但是每行的最后一个LI我们不想给他添加右边距怎么办?这个时候就需要用到插件的隔行添加样式的功能了,以上图为例,代码如下:

$("ul").odevity({
    oChange:"li",                   //需要被匹配的元素
    iBase:3,                        //基数
    bZero:true,                     //是否从1开始计数,否则从0开始
    sClass:"last"                   //应用的class
});

每三个添加一个名为last的样式,这个样式中我写了margin-right:0;把每行最后一个元素的右边距取消了。

兼容HTML5-placeholder属性


IE10以下都不支持html5的placeholder属性,ie10和FF对placeholder的展现方式和谷歌也有所不同。occupied插件就是为了兼容placeholder属性而写的,它是一个对象级别的插件。
html5的placeholder属性是什么?有什么用?w3school对其解释如下:

placeholder 属性提供可描述输入字段预期值的提示信息(hint)。
该提示会在输入字段为空时显示,并会在字段获得焦点时消失。

本博客的左侧搜索框就用到了placeholder属性。除了搜索框,在登录界面也经常用到,如下图【Cenvol插件】— 使用指南
调用这个插件的方式很简单,只需要给定需要匹配的表单元素的父级就可以了,无需输入任何参数。调用方式如下:

$("form").occupied();

跟前面的对象级别的插件一样,调用之后依然可以使用链式结构进行其它操作。

ScrollTo滚动跳转


网页中经常要用到返回顶部的功能,于是就写了ScrollTo插件,它不仅可以返回顶部还可以跳转到任意元素的位置(可以用来做楼层跳转)。它是一个对象级别的插件,参数如下:

oFinish:"body",             //要滚动到的元素
iSpeed:"500",               //滚动速度
fnAdditional:""             //追加方法

默认是滚动到body元素的起点坐标,也就是网页顶部。调用方式如下:

$("#btn").scrollTo();

当点击id为btn的元素,滚动到网页导航,速度为500毫秒。如需滚动到指定元素,只需要修改相应的参数,如下:

$("#btn").scrollTo({
    oFinish:"#nav",             //要滚动到的元素
    iSpeed:"500",               //滚动速度
    fnAdditional:""             //追加方法
});

当点击id为btn的元素,将会滚动到id为nav的元素。
这里的追加方法,是在滚动结束后执行的方法。

在线地址:http://tet.cenvol.com/jquery.cenvol.js
下载地址:http://pan.baidu.com/share/link?shareid=1530613647&uk=3221702211