JavaScript插件化开发讲解
来源:才华咖 本文已影响2.62W人
来源:才华咖 本文已影响2.62W人
(一),开篇分析
Hi,大家好!前两篇文章我们主要讲述了以“jQuery的方式如何开发插件”,以及过程化设计与面向对象思想设计相结合的方式是如何设计一个插件的,两种方式各有利弊取长补短,嘿嘿嘿,废话少说,进入正题。直接上实际效果图:
大家看到了吧,这是一个下拉菜单插件,在我们日常开发中,系统提供的可能有时让我们觉得不是很美观并且功能有限,造成用户
的体验形式以及用户的.可交互性不是很好,所以今天模拟一个嘿嘿嘿。下面就具体分析一下吧。
(二),实例分析
(1),首先确定这个插件做什么事。下面看一下插件的调用方式,以及配置参数说明。如下代码:
复制代码 代码如下:
$(function(){
var itemSelector = new ItemSelector($("#item-selector"),{
currentText : "Please Choose Item" ,
items : [
{
text : "JavaScript" ,
value : "js" ,
disabled : "1"
} ,
{
text : "Css" ,
value : "css" ,
disabled : "0"
} ,
{
text : "Html" ,
value : "html" ,
disabled : "0"
}
] ,
mode : "0" , // 为"1"时支持checkbox多选模式
change : function(value){
// put your code here
}
}) ;
() ;
setTimeout(function(){
(urrentValue()) ; // 测试 获取当先选中项
},2000) ;
“var itemSelector = new ItemSelector()”里面包含两个参数,第一个是dom节点对象,第二个是插件参数选项,"currentText"代表“ItemSelector“插件中,选中文本显示区域的文字描述。
”items“是一个数组,里面包含的是“ItemSelector”项目的属性,包括文字描述,选项值,”disabled“代表列表条目的可显度,0代表显示,1代表不可显示。
”change“代表选中时的操作回调函数,选项数据会以参数的形式进行回传。
(2),所涉的功能有哪些
可显的效果图如下:
不可显的效果图如下:
二者的区别是:不可现状态数据不会回传,悬浮上去不会有任何效果。
(三),完整代码以供学习,本代码已经过测试,包括目录结构以及相关的文件。
(1),html
复制代码 代码如下:
大熊君{{bb}} - DXJ UI ------ ItemSelector
↓
(2),css
复制代码 代码如下:
/* item-selector */
#item-selector {
margin : 0 auto;
width : 220px ;
overflow:hidden;
border:2px solid #ccc;
}
#item-selector e {
border-bottom:1px solid #ccc;
overflow:hidden;
}
#item-selector e div {
width:190px;
border:0px ;
color:#999;
font-family: arial ;
font-size: 14px;
height:28px;
line-height:28px;
float:left;
cursor:pointer;
}
#item-selector e span {
display:block;
height:30px;
line-height:30px;
width:29px;
float:left;
text-align:center;
border-left:1px solid #ccc;
cursor:pointer;
}
#item-selector ent {
width : 220px ;
overflow:hidden;
}
#item-selector ent s {
overflow:hidden;
}
#item-selector ent s div {
padding-left:20px;
width : 200px ;
height:32px;
line-height:32px;
font-family: "微软雅黑" ;
font-size: 14px;
font-weight:bold;
cursor:pointer;
}
-hover {
background:#3385ff;
color:#fff;
}
(3),""
复制代码 代码如下:
function ItemSelector(elem,opts){
= elem ;
= opts ;
} ;
var ISProto = otype ;
lem = function(){
return ;
} ;
pts = function(){
return ;
} ;
/* data manip*/
ISProto._setCurrent = function(current){
pts()["current"] = current ;
} ;
urrentValue = function(current){
return pts()["current"] ;
} ;
/* data manip*/
= function(){
var that = this ;
pts()["current"] = null ; // 数据游标
this._setItemValue(pts()["currentText"]) ;
var itemsElem = lem()("ent s") ;
lem()("e div")("click",function(){
le() ;
}) ;
lem()("e span")("click",function(){
le() ;
}) ;
$(pts()["items"],function(i,item){
item["id"] = (new Date()ime())ring() ;
that._render(item) ;
}) ;
} ;
ISProto._setItemValue = function(value){
lem()("e div")(value)
} ;
ISProto._render = function(item){
var that = this ;
var itemElem = $("
")
(item["text"])
("id",item["id"]) ;
if("0" == item["disabled"]){
("click",function(){
var onChange = pts()["change"] ;
lem()("ent s")() ;
that._setItemValue(item["text"]) ;
that._setCurrent(item) ;
onChange && onChange(item) ;
})
eover(function(){
$(this)lass("item-hover") ;
})
eout(function(){
$(this)veClass("item-hover") ;
}) ;
}
else{
("color","#ccc")("click",function(){
lem()("ent s")() ;
that._setItemValue(item["text"]) ;
}) ;
}
ndTo(lem()("ent s")) ;
} ;
(四),最后总结
(1),面向对象的思考方式合理分析功能需求。
(2),以类的方式来组织我们的插件逻辑。
(3),不断重构上面的实例,如何进行合理的重构那?不要设计过度,要游刃有余,推荐的方式是过程化设计与面向对象思想设计相结合。
(4),下篇文章中会扩展相关功能,比如“mode”这个属性,为"1"时支持checkbox多选模式,现在只是默认下拉模式。
本文先到这里了,后续我们再继续讨论,希望小伙伴们能够喜欢本系列文章。
深入理解javaScript中事件驱动
详细解说JavaScript事件
Java与JavaScript的区别
Javascript和Java语言间的异同比较
详解JavaScript中的splice()使用方法
JavaScript与java语言有何区别
JavaScript监听textarea中按键事件
Javascript中arguments对象的详解和使用方法
JavaScript与java语言的区别
在Java中执行JavaScript代码
java与JavaScript语言有何不同
JavaScript的课堂讲解
JavaScript中push(),join() 函数实例详解
JavaScript与Java的区别
JavaScript与java语言有何不同
JavaScript中的style.cssText使用教程分解
2017最新javascript中AJAX用法
JavaScript插件化开发讲解
如何理解Javascript的caller,callee,call,apply区别
对javascript的理解
如何理解Javascript的caller,callee,call,apply区别
javascript中String对象的slice()方法
QT理解JavaScript原型
JavaScript中的原型链prototype详解
javascript函数详解
“我是小小讲解员”讲解稿,革命烈士陵园讲解稿件
如何理解Javascript的caller,callee,call,apply区别
创造性地化解突发事件
如何在Javascript中为String对象添加trim,ltrim,rtrim方法
详解javascript中void0的具体含义
如何理解Javascript的caller,callee,call,apply区别
如何理解Javascript的caller,callee,call,apply区别
理解Javascript对象
电子软件开发
如何理解Javascript的caller,callee,call,apply区别
使用ajax操作JavaScript对象的方法
javascript中setInterval的用法总结
网页开发中JavaScript传递参数方法比较
Javascript基础教程之数组array
Java中基于Aspectwerkz的AOP开发