当前位置:首页 > 日记 > 正文

Javascript插件开发教程(四)

Javascript插件开发教程(四)
首先,开放分析

您好,请记住最后一篇文章。本文主要介绍了如何组织和实现一个制表符插件,并将流程设计和面向对象设计结合起来。

设计插件有两种方法。各有优缺点。本系列文章是面向学习的,我们决定使用特定场景的方式,

继续扩展相关功能。嘿嘿,少说点,直接输入实际效果图:
你看,添加了一个新的函数,如果我们在初始化时,条目的数量,项目模块的配置信息超过我们指定的,然后显示在更多的模块中。

隐藏的列表操作,初始化参数从新配置也如超过指定数量的条目的displaymax初始化调整,有一个项目属性、状态

在初始化中也去掉了不需要配置,在程序中动态生成配置,增加了程序的灵活性,下面是具体的分析。

(二)案例分析

(1)首先确定这个插件所做的工作:

复制代码代码如下所示:

{

按钮上显示的文本:添加模块

结果:{

{

文本:向导提示

URL

showclose:0

},

{

文本:学生信息

URL

showclose:1

},

{

文本:学生分类

网址:catery。HTML

showclose:1

},

{

文本:大熊的{ } }

URL

showclose:1

},

{

文本:beta测试模块

URL

showclose:1

},

{

正文:三胖子

URL

showclose:1

},

{

正文:四个秃头

URL

showclose:1

}

},

displaymax:5 / /最显示的项目

}

U3000

bigbear.ui.createtab包含两个参数,第一个是DOM节点对象,二是插件的参数选择,以及按钮上显示的文本代表标签插件的操作按钮的文本描述。

结果是一个数组,其中包含选项卡项的属性,包括文本描述。单击选项卡项时,URL用于发出请求。showclose代表标签显示关闭按钮的选项。

在初始化过程中,状态也会在没有配置的情况下被删除,并在程序中动态生成配置。可能会关闭,分别是:1 -默认显示,0 -关闭,2 -多于默认条目数。

(2)功能步骤介绍

1,可选参数初始化插件:

复制代码代码如下所示:

$(函数(){())

bigbear.ui.createtab($(#选项卡),{

按钮上显示的文本:添加模块

结果:{

{

文本:向导提示

URL

showclose:0

},

{

文本:学生信息

URL

showclose:1

},

{

文本:学生分类

网址:catery。HTML

showclose:1

},

{

文本:大熊的{ } }

URL

showclose:1

},

{

文本:beta测试模块

URL

showclose:1

},

{

正文:三胖子

URL

showclose:1

},

{

正文:四个秃头

URL

showclose:1

}

},

displaymax:5 / /最显示的项目

});

});
2,呈现和完成时间绑定和相关的业务逻辑,例如在初始化时验证项目的数量。

复制代码代码如下所示:

tabproto.init =函数(){

如果(这。_isemptyresult()){

这_setcontent(没有模块!;

}

var =;

This.getElem(),发现(。标题。加法)

。文本(++ this.getopts(){ 按钮上显示的文本})

在(单击)

that.getelem(),发现(。控制台面板)。SlideToggle(function(){()

,_renderconsolepanel(0 );

});

});

美元。每个(this.getopts()(结果},功能(我的项目){ }

如果(,_isdisplaymax(i + 1)){

,_saveorupdatestatus(项目,1 );

}

别的{

,_saveorupdatestatus(项目,2 );

}

这_render(项目);

});

如果(!,_isdisplaymax(this.getopts(){结果}。长度)){

This.getElem(),发现(。标题。更多的模式)。FadeIn(function(){()

$(this)查找()。

var = $(this);

Root.empty();

美元。每个(,_getitemlistbystatus(2 ),功能(我的数据){

$()。文本(数据{文本))

在(单击)

如果(,_getitemlistbystatus(1)。长度<that.getopts(){displaymax }){

that.getelem(),发现(。title.items div)。情商(数据{指数})。FadeIn(function(){)

,_saveorupdatestatus(数据,1 );

});

}

别的{

警报()不能添加任何模块,现在它是最大的数!;

}

})

appendto(根);

});

Root.toggle();

});
});

}

This.getElem(),发现(。title.items div)

情商(0)

触发器();必须具有插件,否则没有多大意义!

};
3,TAB开关和数据内容渲染操作。

复制代码代码如下所示:

tabproto。_setcurrent =函数(指数){

可变项目= this.getelem(),发现(。title.items div)。RemoveClass(主动);

items.eq(指数),AddClass(主动);

var内容= this.getelem(),发现(。内容。C)藏();

contents.eq(指数)显示();

};
复制代码代码如下所示:

item.on(单击

,_setcurrent($(this)。指数());

,_getcontent(数据{URL}),做(功能(结果){)

这_setcontent(结果);

})

失败(函数(){())

抛出新错误(NET错误!;

});

})
复制代码代码如下所示:

tabproto。_setcontent =功能(HTML){

This.getElem(),发现(内容),Html(HTML);

};

tabproto。_getcontent =功能(URL){

返回$ ajax({

网址:网址

});

};
4,核心辅助数据处理方法,不涉及DOM。

复制代码代码如下所示:

更新时间2015 1 / 26 / / * 15:36

tabproto。_isdisplaymax =功能(大小){

无功displaymax = this.getopts(displaymax ){ 5 } | |;

返回(大小displaymax真):假;

};

tabproto。_isemptyresult =函数(){

如果(!This.getOpts(){结果} {长度)。

返回false;

}

返回true;

};

tabproto。_saveorupdatestatus =功能(项目、状态){

项目{状态=状态;

};

tabproto。_getitemlistbystatus =功能(状态){

var列表{ };

this.getopts(){ var result =结果};

每个(结果,函数(i,项目){)

如果(状态项{状态}){

List.push(项);

}

});

返回列表;

};

tabproto。_getstatusbyindex =函数(指数){

var状态=空;

this.getopts(){ var result =结果};

每个(结果,函数(i,项目){)

如果(索引项{ = index}){

状态=项目{状态};

}

});

返回状态;

};
(三)完整的学习代码,代码已经过测试,包括目录结构和相关文件。

1、HTML

复制代码代码如下所示:
大熊君{ } } { BB -玉兔电子血压计---选项卡界面
+添加学生信息
X的欢迎页面

X的用户管理

xbigbear -->
更多的模块


姓名 uff1a

备注:uff1a
-->
2、CSS

复制代码代码如下所示:

{.Dxj-ui-hd

填料:0px;

保证金:0汽车;

边距:30px;

宽度:780px;

身高:60px;

行高:60px;

背景:# 3385ff;

颜色:# FFF;

字体微软雅黑;

字体大小:28px;

文本对齐:中心;

字体粗细:粗体;

}

{。玉兔电子血压计的UI BD

填料:0px;

保证金:0汽车;

宽度:778px;

30px垫上;

座垫:30px;

溢出:隐藏;

边境:1px solid # 3385ff;

}

UI BD { #选项卡。玉兔电子血压计

填料:0px;

保证金:0汽车;

宽度:720px;

溢出:隐藏;

职位:相对;

}

玉兔电子血压计tab.title { BD # UI。

宽度:720px;

溢出:隐藏;

底部边框:2px固体# 3385ff;

}

玉兔电子血压计tab.title.adder { BD # UI。

宽度:160px;

身高:32px;

行高:32px;

背景:# dc143c;

颜色:# FFF;

字体微软雅黑;

字体大小:14px;

文本对齐:中心;

字体粗细:粗体;

浮点数:左;

光标:指针;

}

玉兔电子血压计tab.title.more-mod { BD # UI。

溢出:隐藏;

边境:1px solid # dc143c;

宽度:70px;

位置:绝对;

权利:0;

右边距:6px;

显示:无;

}

。玉兔电子血压计的UI BD #标签。标题标签{。更多的MOD。

身高:32px;

行高:32px;

宽度:70px;

背景:# dc143c;

颜色:# FFF;

字体家庭:Arial;

字体大小:12px;

文本对齐:中心;

光标:指针;

}

玉兔电子血压计tab.title.more-mod.mods { BD # UI。

溢出:隐藏;

宽度:70px;

显示:无;

}

。玉兔电子血压计# UI BD tab.title.more-mod.mods div {

身高:24px;

行高:24px;

宽度:62px;

字体家庭:Arial;

字体大小:12px;

光标:指针;

左:10px填充;

}

玉兔电子血压计tab.title.items { BD # UI。

身高:32px;
宽度:480px;

溢出:隐藏;

浮点数:左;

}

。玉兔电子血压计# UI BD tab.title.items div {

填料:0px;

左:10px保证金;

宽度:84px;

身高:32px;

行高:32px;

背景:# 3385ff;

颜色:# FFF;

字体家庭:Arial;

字体大小:12px;

文本对齐:中心;

职位:相对;

浮点数:左;

光标:指针;

}

。玉兔电子血压计# UI BD tab.title.items div span.del {

宽度:16px;

身高:16px;

行高:16px;

显示块;

背景:# dc143c;

位置:绝对;

权利:0;

顶部:0;

光标:指针;

}

玉兔电子血压计tab.content { BD # UI。

宽度:716px;

30px垫上;

溢出:隐藏;

边境:2px固体# 3385ff;

边境上:0px;

最小高度:130px;

文本对齐:中心;

}

。玉兔电子血压计# UI BD tab.content表{

保证金:0汽车;

}

。玉兔电子血压计# UI BD tab.content div.c {

20px垫上;

左:20px填充;

背景:# Eee;

身高:140px;

}

。玉兔电子血压计# UI BD tab.content div.c.input-content {

边距:10px;

字体家庭:Arial;

字体大小:12px;

}

玉兔电子血压计tab.console-panel { BD # UI。

宽度:716px;

20px垫上;

座垫:20px;

溢出:隐藏;

边境:2px固体# 3385ff;

边境上:0px;

底部边框:2px固体# 3385ff;

背景:# FFF;

显示:无;

}
{活动。

字体粗细:粗体;

}
3、bigbear.js
复制代码代码如下所示:

(函数($){)

var =窗口;

VaR BB = win.bigbear = win.bigbear { | |

用户界面:{ }

};

VaR的UI = bb.ui = { };

Var Tab =功能(元素、选择){

this.elem =元;

this.opts =选择;

};

无功tabproto = tab.prototype;

更新时间2015 1 / 26 / / * 15:36

tabproto。_isdisplaymax =功能(大小){

无功displaymax = this.getopts(displaymax ){ 5 } | |;

返回(大小displaymax真):假;

};

tabproto。_isemptyresult =函数(){

如果(!This.getOpts(){结果} {长度)。

返回false;

}

返回true;

};

tabproto。_saveorupdatestatus =功能(项目、状态){

项目{状态=状态;

};

tabproto。_getitemlistbystatus =功能(状态){

var列表{ };

this.getopts(){ var result =结果};

每个(结果,函数(i,项目){)

如果(状态项{状态}){

List.push(项);

}

});

返回列表;

};

tabproto。_getstatusbyindex =函数(指数){

var状态=空;

this.getopts(){ var result =结果};

每个(结果,函数(i,项目){)

如果(索引项{ = index}){

状态=项目{状态};

}

});

返回状态;

};

tabproto。_renderconsolepanel =功能(状态){

var =;

VaR的根that.getelem(),发现(。控制台面板);

这_resetconsolepanel();

美元。每个(,_getitemlistbystatus(状态),功能(我的项目){

var elem = $()。AppendTo(根);

($)

数据()

appendto(元素);

$()。文本(项目{文本})AppendTo(元素);

});

如果(root.find(div)。尺寸()){

($)

在(单击)

VaR数据= root.find(输入{类型=广播}:检查)。数据(项目);

如果(,_getitemlistbystatus(1)。长度<that.getopts(){displaymax }){

that.getelem(),发现(。title.items div)。情商(数据{指数})。FadeIn(function(){)

,_saveorupdatestatus(数据,1 );

})

触发器(单击);

}

别的{

,_saveorupdatestatus(数据,2 );

}

that.getelem(),发现(称号。加法器)。Trigger(点击);

})

appendto(根);

}

别的{

Root.text(没有项目可以添加!;

}

};

更新时间2015 1 / 26 / / * 15:36

tabproto。_setcurrent =函数(指数){

可变项目= this.getelem(),发现(。title.items div)。RemoveClass(主动);

items.eq(指数),AddClass(主动);

var内容= this.getelem(),发现(。内容。C)藏();

contents.eq(指数)显示();

};

tabproto.getelem =函数(){

返回this.elem;

};

tabproto.getopts =函数(){

返回this.opts;

};

tabproto。_resetcontent =函数(){

This.getElem(),发现(内容),Html();

};

tabproto。_setcontent =功能(HTML){

This.getElem(),发现(内容),Html(HTML);

};

tabproto。_getcontent =功能(URL){

返回$ ajax({

网址:网址

});

};

tabproto。_deleteitem =功能(元){

var =;

This.getElem(),发现(。title.items div)

情商(elem.index())。

。淡出(功能(){()

这_resetcontent();

,_saveorupdatestatus(elem.data(项目),0 );

,_triggeritem(elem.index()+ 1);

});

};

tabproto。_triggeritem =函数(下){

无功nextstatus =这_getstatusbyindex(下);

可变项目= this.getelem(),发现(。title.items div);

未来= items.eq(下);

如果(下。大小)(1 = = nextstatus){ / / DOM后继节点

Next.trigger(点击);

}

别的{

items.eq(0),Trigger(点击);

}

};

tabproto。_resetconsolepanel =函数(){

This.getElem(),发现(。控制台面板)空();

};

tabproto.init =函数(){

如果(这。_isemptyresult()){

这_setcontent(没有模块!;

}

var =;

This.getElem(),发现(。标题。加法)

。文本(++ this.getopts(){ 按钮上显示的文本})

在(单击)

that.getelem(),发现(。控制台面板)。SlideToggle(function(){()

,_renderconsolepanel(0 );

});

});

美元。每个(this.getopts()(结果},功能(我的项目){ }

如果(,_isdisplaymax(i + 1)){

,_saveorupdatestatus(项目,1 );

}

别的{

,_saveorupdatestatus(项目,2 );

}

这_render(项目);

});

如果(!,_isdisplaymax(this.getopts(){结果}。长度)){

This.getElem(),发现(。标题。更多的模式)。FadeIn(function(){()

$(this)查找()。

var = $(this);

Root.empty();

美元。每个(,_getitemlistbystatus(2 ),功能(我的数据){

$()。文本(数据{文本))

在(单击)

如果(,_getitemlistbystatus(1)。长度<that.getopts(){displaymax }){

that.getelem(),发现(。title.items div)。情商(数据{指数})。FadeIn(function(){)

,_saveorupdatestatus(数据,1 );

});

}

别的{

警报()不能添加任何模块,现在它是最大的数!;

}

})

appendto(根);

});

Root.toggle();

});
});

}

This.getElem(),发现(。title.items div)

情商(0)

触发器();必须具有插件,否则没有多大意义!

};

tabproto。_render =功能(数据){

var =;

项目= $(var )。文本(数据{文本}),AppendTo(this.getelem(),发现(称号。项目)));

数据{指数} = item.index();

item.on(单击

,_setcurrent($(this)。指数());

,_getcontent(数据{URL}),做(功能(结果){)

这_setcontent(结果);

})

失败(函数(){())

抛出新错误(NET错误!;

});

})

数据()

如果(2=数据状态)

item.hide();

}

如果(1 = =数据{ } {showclose )

$(x )

在(单击)

如果(确认)()你删除这个项目吗{)

这_deleteitem(项目);

返回false;停止泡沫

}

})

appendto(项目);

}

};

ui.createtab =功能(元素、选择){

var标签=新标签(元素、选择);

Tab.init();

返回标签;

};

}(jQuery);

U3000 U3000

(四)最后摘要

(1)面向对象的思维方式是对功能需求的合理分析。

(2)以类的方式组织我们的插件逻辑。

(3)不断重构上述例子,如何进行合理的重构不要过分设计,要能轻松,推荐的方法是流程设计和面向对象设计的结合。

相关文章

介绍在纹理顶部制作ps的方法

介绍在纹理顶部制作ps的方法

方法,纹理,电脑软件,ps,本教程是介绍给朋友的ps高质感的制作方法,教程很不错,很简单,推荐喜欢的朋友一起学习一下。 巴迪是各种各样的地图设计中常见的各种材料,厌倦了它的网络,总是欣赏纹理贴图,这不是什么给人的方法,使PS高纹理共享,一看! 方法/步…

用javascript实现雪花飘落的效果

用javascript实现雪花飘落的效果

雪花,效果,电脑软件,javascript,查看javascript网页特效例子,在图片浮出效果的例子,觉得值得学习。 把图片换成雪花,完成雪花的效果。 有些已经过时了,所以把它们除掉。 包括 uff1a 1。左侧和顶部支持的操作只有IE浏览器,必须由Chrome支持。 2。…

画家绘画审美女性插画

画家绘画审美女性插画

插画,画家,女性,电脑软件,本教程将结束画家的使用来绘制审美女性插图。这个教程的题目是救赎,整个构图和画面都很美,画画的难度也很小。推荐一下,希望大家喜欢。 本教程将结束画家的使用来绘制审美女性插图。本教程的题目是救赎,整个构图和画面…

介绍对象的toString()和价值转换功能

介绍对象的toString()和价值转换功能

转换,价值,对象,功能,电脑软件,在Javascript中,对象转换为布尔的操作非常简单:在转换到布尔之后,所有对象都是真的;即使是新布尔(false)之类的对象,在转换为布尔之后仍然是一个对象。 复制代码代码如下所示: 新布尔(false); 如果(x){ console.log(X是真的); }…

画家画镜祈的过程

画家画镜祈的过程

画家,过程,电脑软件,画镜祈,在本教程中,画家学习绘画镜显示inori的用画家的全过程,其中一些是由插画家。然而,作者并没有详细介绍制作过程,要求学习者有画家基础,但本教程非常实用,建议对学画家的朋友有用。 在本教程中,画家学习绘画inorilsquo显…

CDR只产生闪烁和绘图效果(两种方法)

CDR只产生闪烁和绘图效果(两种方法)

闪烁,方法,绘图,两种,效果,本教程是一个简单的方法,使Flash和绘图效果的朋友CDR。教程比较简单。非常适合初学者学习和推荐。 本教程介绍朋友到CDR,制作一个简单的方法来创建Flash和拉丝效果。本教程是一个入门教程,非常适合初学者学习。介绍…

PS图象处理软件过滤器挑选透明的泡

PS图象处理软件过滤器挑选透明的泡

透明,过滤器,图象,处理软件,泡泡,本教程介绍朋友PS图象处理软件滤波器选择气泡的方法把透明的,非常好的教程,你可以通过本教程学习颜色抠图的方法,希望对大家有帮助 本教程主要是朋友介绍PS图象处理软件滤波器选择透明气泡的方法,本教程非常好,…

PHP数组排序中,uksort和排序功能的

PHP数组排序中,uksort和排序功能的

排序,数组排序,功能,电脑软件,PHP,本文阐述了PHP数组排序中的使用,uksort和排序功能,分享给你参考。具体使用情况分析如下: 为阵列中的()函数使用自定义函数对数组进行排序的用户,和示例代码如下: 复制代码如下:函数CMP($ A,$ B)用户定义回调函数 {…

excel2010不能进入湿地解决excel20

excel2010不能进入湿地解决excel20

教程,湿地,电脑软件,当你使用excel2010输入数据,当你要添加斜线,你发现它无法进入。怎么了 excel2010不能进入湿地解决步骤 通过实践,最终解决了该问题的解决方案,具体步骤如下: 1步,打开excel2010,单击菜单栏中的文件菜单栏,选择下面的选项设置,…

画家画了一对水彩画芭蕾舞者。

画家画了一对水彩画芭蕾舞者。

水彩画,画了,画家,舞者,电脑软件,本教程介绍你画一对水彩芭蕾舞者与画家。教程的图片很漂亮,而且教程很难。但它是一个经典场景描述教程的详细描述。 本教程介绍你画一对水彩芭蕾舞者与画家。教程的图片很漂亮,而且教程很难。但它是一个经典…

PS超现实蜘蛛侠3D特效特效屏合成教

PS超现实蜘蛛侠3D特效特效屏合成教

教程,3D,特效,蜘蛛侠,电脑软件,本教程介绍朋友PS合成超级Spiderman 3D效果屏幕的屏幕。教程产生的效果非常真实。作者详细地介绍了它,并推荐像它这样的朋友可以和教程一起学习。 星期一练习!今天的教程3D效果很好,视觉冲击力很强,朋友可以在社…

ajax参数详解详解附例

ajax参数详解详解附例

参数详解,详解,电脑软件,ajax,语境 类型:对象 这个对象用于设置与Ajax相关的回调函数的上下文,也就是说,让回调函数中的这个点指向这个对象。如果不设置此参数,则这将指向调用Ajax请求时传递的选项参数。 就像这样。 $ $ $(这)。AddClass(做); …