<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • JavaScript插件化開(kāi)發(fā)講解

    時(shí)間:2024-05-26 05:15:37 JavaScript 我要投稿
    • 相關(guān)推薦

    JavaScript插件化開(kāi)發(fā)講解

      (一),開(kāi)篇分析

      Hi,大家好!前兩篇文章我們主要講述了以“jQuery的方式如何開(kāi)發(fā)插件”,以及過(guò)程化設(shè)計(jì)與面向?qū)ο笏枷朐O(shè)計(jì)相結(jié)合的方式是如何設(shè)計(jì)一個(gè)插件的,兩種方式各有利弊取長(zhǎng)補(bǔ)短,嘿嘿嘿,廢話少說(shuō),進(jìn)入正題。直接上實(shí)際效果圖:

      大家看到了吧,這是一個(gè)下拉菜單插件,在我們?nèi)粘i_(kāi)發(fā)中,系統(tǒng)提供的可能有時(shí)讓我們覺(jué)得不是很美觀并且功能有限,造成用戶

      的體驗(yàn)形式以及用戶的可交互性不是很好,所以今天模擬一個(gè)嘿嘿嘿。下面就具體分析一下吧。

      (二),實(shí)例分析

      (1),首先確定這個(gè)插件做什么事。下面看一下插件的調(diào)用方式,以及配置參數(shù)說(shuō)明。如下代碼:

      復(fù)制代碼 代碼如下:

      $(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"時(shí)支持checkbox多選模式

      change : function(value){

      // put your code here

      }

      }) ;

      itemSelector.init() ;

      setTimeout(function(){

      console.log(itemSelector.getCurrentValue()) ; // 測(cè)試 獲取當(dāng)先選中項(xiàng)

      },2000) ;

      “var itemSelector = new ItemSelector()”里面包含兩個(gè)參數(shù),第一個(gè)是dom節(jié)點(diǎn)對(duì)象,第二個(gè)是插件參數(shù)選項(xiàng),"currentText"代表“ItemSelector“插件中,選中文本顯示區(qū)域的文字描述。

      ”items“是一個(gè)數(shù)組,里面包含的是“ItemSelector”項(xiàng)目的屬性,包括文字描述,選項(xiàng)值,”disabled“代表列表?xiàng)l目的可顯度,0代表顯示,1代表不可顯示。

      ”change“代表選中時(shí)的操作回調(diào)函數(shù),選項(xiàng)數(shù)據(jù)會(huì)以參數(shù)的形式進(jìn)行回傳。

      (2),所涉的功能有哪些

      可顯的效果圖如下:

      不可顯的效果圖如下:

      二者的區(qū)別是:不可現(xiàn)狀態(tài)數(shù)據(jù)不會(huì)回傳,懸浮上去不會(huì)有任何效果。

      (三),完整代碼以供學(xué)習(xí),本代碼已經(jīng)過(guò)測(cè)試,包括目錄結(jié)構(gòu)以及相關(guān)的文件。

      (1),html

      復(fù)制代碼 代碼如下:

      大熊君{{bb}} - DXJ UI ------ ItemSelector

      ↓

      (2),css

      復(fù)制代碼 代碼如下:

      /* item-selector */

      #item-selector {

      margin : 0 auto;

      width : 220px ;

      overflow:hidden;

      border:2px solid #ccc;

      }

      #item-selector .title {

      border-bottom:1px solid #ccc;

      overflow:hidden;

      }

      #item-selector .title div {

      width:190px;

      border:0px ;

      color:#999;

      font-family: arial ;

      font-size: 14px;

      height:28px;

      line-height:28px;

      float:left;

      cursor:pointer;

      }

      #item-selector .title span {

      display:block;

      height:30px;

      line-height:30px;

      width:29px;

      float:left;

      text-align:center;

      border-left:1px solid #ccc;

      cursor:pointer;

      }

      #item-selector .content {

      width : 220px ;

      overflow:hidden;

      }

      #item-selector .content .items {

      overflow:hidden;

      }

      #item-selector .content .items div {

      padding-left:20px;

      width : 200px ;

      height:32px;

      line-height:32px;

      font-family: "微軟雅黑" ;

      font-size: 14px;

      font-weight:bold;

      cursor:pointer;

      }

      .item-hover {

      background:#3385ff;

      color:#fff;

      }

      (3),"ItemSelector.js"

      復(fù)制代碼 代碼如下:

      function ItemSelector(elem,opts){

      this.elem = elem ;

      this.opts = opts ;

      } ;

      var ISProto = ItemSelector.prototype ;

      ISProto.getElem = function(){

      return this.elem ;

      } ;

      ISProto.getOpts = function(){

      return this.opts ;

      } ;

      /* data manip*/

      ISProto._setCurrent = function(current){

      this.getOpts()["current"] = current ;

      } ;

      ISProto.getCurrentValue = function(current){

      return this.getOpts()["current"] ;

      } ;

      /* data manip*/

      ISProto.init = function(){

      var that = this ;

      this.getOpts()["current"] = null ; // 數(shù)據(jù)游標(biāo)

      this._setItemValue(this.getOpts()["currentText"]) ;

      var itemsElem = that.getElem().find(".content .items") ;

      this.getElem().find(".title div").on("click",function(){

      itemsElem.toggle() ;

      }) ;

      this.getElem().find(".title span").on("click",function(){

      itemsElem.toggle() ;

      }) ;

      $.each(this.getOpts()["items"],function(i,item){

      item["id"] = (new Date().getTime()).toString() ;

      that._render(item) ;

      }) ;

      } ;

      ISProto._setItemValue = function(value){

      this.getElem().find(".title div").text(value)

      } ;

      ISProto._render = function(item){

      var that = this ;

      var itemElem = $("

      ")

      .text(item["text"])

      .attr("id",item["id"]) ;

      if("0" == item["disabled"]){

      itemElem.on("click",function(){

      var onChange = that.getOpts()["change"] ;

      that.getElem().find(".content .items").hide() ;

      that._setItemValue(item["text"]) ;

      that._setCurrent(item) ;

      onChange && onChange(item) ;

      })

      .mouseover(function(){

      $(this).addClass("item-hover") ;

      })

      .mouseout(function(){

      $(this).removeClass("item-hover") ;

      }) ;

      }

      else{

      itemElem.css("color","#ccc").on("click",function(){

      that.getElem().find(".content .items").hide() ;

      that._setItemValue(item["text"]) ;

      }) ;

      }

      itemElem.appendTo(this.getElem().find(".content .items")) ;

      } ;

      (四),最后總結(jié)

      (1),面向?qū)ο蟮乃伎挤绞胶侠矸治龉δ苄枨蟆?/p>

      (2),以類的方式來(lái)組織我們的插件邏輯。

      (3),不斷重構(gòu)上面的實(shí)例,如何進(jìn)行合理的重構(gòu)那?不要設(shè)計(jì)過(guò)度,要游刃有余,推薦的方式是過(guò)程化設(shè)計(jì)與面向?qū)ο笏枷朐O(shè)計(jì)相結(jié)合。

      (4),下篇文章中會(huì)擴(kuò)展相關(guān)功能,比如“mode”這個(gè)屬性,為"1"時(shí)支持checkbox多選模式,現(xiàn)在只是默認(rèn)下拉模式。

      本文先到這里了,后續(xù)我們?cè)倮^續(xù)討論,希望小伙伴們能夠喜歡本系列文章。

    【JavaScript插件化開(kāi)發(fā)講解】相關(guān)文章:

    JavaScript的課堂講解09-03

    JavaScript日期時(shí)間格式化函數(shù)08-29

    對(duì)javascript的理解08-08

    常用的JavaScript模式09-22

    Javascript的this用法簡(jiǎn)述08-15

    JavaScript學(xué)習(xí)筆記08-24

    JavaScript 基礎(chǔ)教學(xué)09-29

    辦公自動(dòng)化的應(yīng)用與開(kāi)發(fā)07-10

    AE影視常用插件FORM的應(yīng)用技巧09-03

    JavaScript常用方法匯總10-25

    主站蜘蛛池模板: 精品国产VA久久久久久久冰| 国产精品天天影视久久综合网| 黑人巨大精品欧美| 国产天天综合永久精品日| 97精品国产福利一区二区三区| 亚洲国产成人久久精品99 | 人人妻人人澡人人爽欧美精品| 国产午夜精品一本在线观看| 99re6在线视频精品免费| 亚洲色精品aⅴ一区区三区| 国产精品青草久久久久福利99| 国产精品v片在线观看不卡 | 女人高潮内射99精品| 国产精品美女久久久免费| 亚洲国产另类久久久精品黑人| 欧美精品亚洲精品日韩1818| 四虎影视永久在线精品| 国产成人精品一区二区三区免费| 欧美日韩精品乱国产538| 欧美国产精品久久高清| 国产成人精品免高潮在线观看| 四虎成人www国产精品| 国产欧美精品一区二区三区| 999在线视频精品免费播放观看| 亚洲精品一级无码鲁丝片| 国内精品久久久久影院网站| 91精品国产91久久久久久蜜臀 | 精品视频久久久久| 国产精品无码久久四虎| 911亚洲精品国产自产| 午夜精品美女写真福利| 免费91麻豆精品国产自产在线观看| 国产午夜精品免费一区二区三区| 欧美精品videosse精子| 精品免费久久久久久久| 精品乱码一区二区三区四区| 国产三级久久久精品麻豆三级| 久久er99热精品一区二区| 国产精品免费看久久久| jiucao在线观看精品| 国产香蕉精品视频在|