最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生Javascript插件開(kāi)發(fā)實(shí)踐

 更新時(shí)間:2017年01月18日 11:02:41   作者:追夢(mèng)子  
本文主要介紹了原生Javascript插件開(kāi)發(fā)的思路分析以及使用示例。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧

前言

之前公司設(shè)計(jì)的網(wǎng)站比較混亂,很多地方不統(tǒng)一,其中一個(gè)就是彈出層,導(dǎo)致這個(gè)原因是因?yàn)椋镜腢I換了好幾個(gè)人,而他們每個(gè)人做出來(lái)的都不太一樣。最近公司開(kāi)始整頓這個(gè)問(wèn)題,對(duì)于統(tǒng)一的這種東西當(dāng)然是做成一個(gè)模塊,或者插件,而我打算做成插件。之所以寫(xiě)這篇文章是因?yàn)?,?dāng)寫(xiě)完這個(gè)插件以后,發(fā)現(xiàn)其中有不少的理念,而這些理念我想把它總結(jié)一下,雖然這個(gè)插件并不復(fù)雜。

該怎樣架構(gòu)?

對(duì)于架構(gòu)這個(gè)概念,接觸的比較少,我的理解,架構(gòu)就是解決未來(lái)可能會(huì)發(fā)生的事。

之前也封裝過(guò)一些插件,但后端嫌我封裝的太難用,于是分析其原因,發(fā)現(xiàn)之前寫(xiě)的插件,該暴露的接口沒(méi)有,有些不需要傳的參數(shù)反而要傳。該暴露的接口沒(méi)有,這是因?yàn)槲覜](méi)有按照未來(lái)的思想來(lái)寫(xiě)插件,而往往這樣寫(xiě)出來(lái)的插件就成了一次性用品。

所以這段時(shí)間,在寫(xiě)插件之前都會(huì)事先思考清楚,這個(gè)插件都需要哪些參數(shù),而哪些又是必須傳的,哪些是可選的,哪些功能以后可能會(huì)用到,哪些是可以會(huì)更改的,這些都是必須考慮的,不然寫(xiě)出來(lái)的插件肯定會(huì)有很多的問(wèn)題。

基本雛形

;(function(window,document){
 var MaskShare = function(){
 };
 MaskShare.prototype = {};
 window.MaskShare = MaskShare;
}(window,document));

把要寫(xiě)的代碼,封閉到一個(gè)自執(zhí)行函數(shù)里面,防止變量沖突,然后將這個(gè)構(gòu)造函數(shù)暴露給window對(duì)象,方便我們?cè)谕獠咳ピL問(wèn)這個(gè)構(gòu)造函數(shù)。

效果需要做成如下的:

思考需要哪些參數(shù)

這個(gè)功能就是點(diǎn)擊某個(gè)元素,彈出一個(gè)遮罩層,點(diǎn)擊遮罩層將遮罩層去掉。

因此可以分析出,至少需要一個(gè)參數(shù),也就是我們需要知道點(diǎn)擊誰(shuí)彈出彈出層,另外我們還需要配置一些默認(rèn)參數(shù)。

;(function(window,document){
 var MaskShare = function(targetDom,options){
  // 判斷是用函數(shù)創(chuàng)建的還是用new創(chuàng)建的。這樣我們就可以通過(guò)MaskShare("dom") 或 new MaskShare("dom")來(lái)使用這個(gè)插件了
  if(!(this instanceof MaskShare))return new MaskShare(targetDom,options);
  // 參數(shù)合并
  this.options = this.extend({
      // 這個(gè)參數(shù)以后可能會(huì)更改所以暴露出去
   imgSrc:"../static/img/coupon-mask_1.png"
  },options);
  // 判斷傳進(jìn)來(lái)的是DOM還是字符串
  if((typeof targetDom)==="string"){
   this.targetDom = document.querySelector(targetDom);
  }else{
   this.targetDom = targetDom;
  }
  var boxDom = document.createElement("div");
  var imgDom = document.createElement("img");
  // 設(shè)置默認(rèn)樣式 注意將z-index值設(shè)置大一些,防止其他元素層級(jí)比遮罩層高
  boxDom.style.cssText = "display: none;position: absolute;left: 0;top: 0;width: 100%;height:100%;background-color: rgba(0,0,0,0.8);z-index:9999;";
  imgDom.style.cssText = "margin-top:20px;width: 100%;";
  // 追加或重設(shè)其樣式
  if(this.options.boxDomStyle){
   this.setStyle(boxDom,this.options.boxDomStyle);
  }
  if(this.options.imgDomStyle){
   this.setStyle(imgDom,this.options.imgDomStyle);
  }
  imgDom.src = this.options.imgSrc;
  boxDom.appendChild(imgDom);
  this.boxDom = boxDom;
  // 初始化
  this.init();
 };
 MaskShare.prototype = {
  init:function(){
   this.event();
  },
  extend:function(obj,obj2){
   for(var k in obj2){
    obj[k] = obj2[k];
   }
   return obj;
  },
  setStyle:function(dom,objStyle){
   for(var k in objStyle){
    dom.style[k] = objStyle[k];
   }
  },
  event:function(){
   var _this = this;
   this.targetDom.addEventListener("click",function(){
    document.body.appendChild(_this.boxDom);
    _this.boxDom.style.display = "block";
        // 打開(kāi)遮罩層的回調(diào)
    _this.options.open&&_this.options.open();
   },false);
   this.boxDom.addEventListener("click",function(){
    this.style.display = "none";
        // 關(guān)閉遮罩層的回調(diào)
    _this.options.close&&_this.options.close();
   },false);
  }
 };
 // 暴露方法
 window.MaskShare = MaskShare;
}(window,document));

使用示例:

MaskShare(".immediately",{
 imgSrc:"../static/img/loading_icon.gif",
 boxDomStyle:{
  opacity:".9"
 },
 imgDomStyle:{
  opacity:".8"
 },
 open:function(){
  console.log("show");
 },
 close:function(){
  console.log("close");
 }
});

本次總結(jié)

此時(shí)再分析一遍,發(fā)現(xiàn)其還是有很多局限性,比如,如果不使用圖片用到的是一段文字呢,又該怎么辦?這些都是很大的問(wèn)題,要寫(xiě)出一個(gè)實(shí)用的插件,不僅僅技術(shù)需要過(guò)關(guān),思考還得全面性。所以這篇文章還只是剛剛開(kāi)始,路還遠(yuǎn)著呢。

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • javascript?實(shí)現(xiàn)純前端將數(shù)據(jù)導(dǎo)出excel兩種方式

    javascript?實(shí)現(xiàn)純前端將數(shù)據(jù)導(dǎo)出excel兩種方式

    這篇文章主要介紹了javascript?實(shí)現(xiàn)純前端將數(shù)據(jù)導(dǎo)出excel兩種方式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參一下
    2022-07-07
  • 淺談TypeScript的類型保護(hù)機(jī)制

    淺談TypeScript的類型保護(hù)機(jī)制

    這篇文章主要介紹了淺談TypeScript的類型保護(hù)機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 用簡(jiǎn)單的腳本實(shí)現(xiàn)一款漂亮的下拉菜單

    用簡(jiǎn)單的腳本實(shí)現(xiàn)一款漂亮的下拉菜單

    用簡(jiǎn)單的腳本實(shí)現(xiàn)一款漂亮的下拉菜單...
    2006-12-12
  • JavaScript使用localStorage存儲(chǔ)數(shù)據(jù)

    JavaScript使用localStorage存儲(chǔ)數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了JavaScript使用localStorage存儲(chǔ)數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • JavaScript最完整的深淺拷貝實(shí)現(xiàn)方式詳解

    JavaScript最完整的深淺拷貝實(shí)現(xiàn)方式詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript最完整的深淺拷貝實(shí)現(xiàn)方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 完全深入學(xué)習(xí)Bootstrap表單

    完全深入學(xué)習(xí)Bootstrap表單

    Bootstrap表單用來(lái)與用戶做交流的一個(gè)網(wǎng)頁(yè)控件,實(shí)現(xiàn)網(wǎng)頁(yè)與用戶更好的溝通,這篇文章主要就為大家介紹了Bootstrap表單中常見(jiàn)的元素,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • js的繼承方法小結(jié)(prototype、call、apply)(推薦)

    js的繼承方法小結(jié)(prototype、call、apply)(推薦)

    這篇文章主要介紹了js的繼承方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JavaScript作用域深度剖析之動(dòng)態(tài)作用域

    JavaScript作用域深度剖析之動(dòng)態(tài)作用域

    這篇文章主要為大家介紹了?JavaScript作用域?qū)W習(xí)之動(dòng)態(tài)作用域深度剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 如何用js獲取當(dāng)前域名、Url、相對(duì)路徑和參數(shù)

    如何用js獲取當(dāng)前域名、Url、相對(duì)路徑和參數(shù)

    這篇文章主要給大家介紹了關(guān)于如何用js獲取當(dāng)前域名、Url、相對(duì)路徑和參數(shù)的相關(guān)資料,用Javascript可以單獨(dú)獲取當(dāng)前域名、Url相對(duì)路徑和參數(shù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 基于javascript實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)系統(tǒng)

    基于javascript實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于javascript實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評(píng)論

利川市| 如东县| 元朗区| 拜泉县| 揭西县| 新津县| 湘阴县| 枣阳市| 明光市| 牡丹江市| 章丘市| 德清县| 丹阳市| 沙田区| 洛扎县| 井陉县| 崇左市| 吕梁市| 鹿泉市| 桃园市| 张家界市| 醴陵市| 酒泉市| 牡丹江市| 乐安县| 萝北县| 东乡| 金门县| 吐鲁番市| 宜兴市| 新昌县| 万全县| 惠来县| 谢通门县| 澜沧| 本溪| 水城县| 左云县| 田东县| 新巴尔虎右旗| 安多县|