成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Bootstrap JS插件Alert源碼分析

dreamans / 836人閱讀

摘要:調(diào)用當(dāng)我們調(diào)用的時(shí)候,就會(huì)調(diào)用源碼中函數(shù),遍歷所有的警告框,并關(guān)閉。解除警告框點(diǎn)擊關(guān)閉事件,傳入對(duì)應(yīng)的事件命名空間即可

1、先附上alert的源代碼
將Alert放在自執(zhí)行函數(shù)中,避免變量污染

/* ====================================================================
 * Bootstrap: alert.js v3.3.7
 * http://getbootstrap.com/javascript/#alerts
 * ====================================================================
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * ======================================================================== */
+function ($) {
  "use strict"; //使用嚴(yán)格模式 執(zhí)行js代碼

  var dismiss = "[data-dismiss="alert"]" //alert警告框事件選擇器
  var Alert   = function (el) {  //alert警告框構(gòu)造函數(shù)
    $(el).on("click", dismiss, this.close)//選擇器綁定點(diǎn)擊關(guān)閉alert警告框的事件
  }

  Alert.VERSION = "3.3.7"http://版本
  Alert.TRANSITION_DURATION = 150//過渡時(shí)間  為了讓警告框在關(guān)閉時(shí)表現(xiàn)出動(dòng)畫效果

  Alert.prototype.close = function (e) {//在alert原型上添加close方法
    var $this    = $(this)//當(dāng)前對(duì)象包裝成jquery對(duì)象
    var selector = $this.attr("data-target") //獲取jquery對(duì)象的date-target屬性值

    if (!selector) {//如果沒有獲取到
      selector = $this.attr("href")//獲取href屬性值
      selector = selector && selector.replace(/.*(?=#[^s]*$)/, "") // strip for ie7
    }

    var $parent = $(selector === "#" ? [] : selector)//如果selector是#則返回空數(shù)組,返回自身

    if (e) e.preventDefault()//取消事件的默認(rèn)動(dòng)作 a標(biāo)簽的鏈接不會(huì)打開

    if (!$parent.length) {
      $parent = $this.closest(".alert")//找到祖先中類名為alert的元素
    }

    $parent.trigger(e = $.Event("close.bs.alert"))//觸發(fā)自定義的close.bs.alert事件 
    //并將e重新復(fù)制

    if (e.isDefaultPrevented()) return //e被重新賦值為jquery事件對(duì)象 e.isDefaultPrevented()值為false  不會(huì)走return語句

    $parent.removeClass("in")//刪除具有動(dòng)畫效果的 類 

    function removeElement() {
      // detach from parent, fire event then clean up data
      //detach刪除匹配元素,但是不從jquery對(duì)象上刪除
      //remove刪除元素,元素對(duì)應(yīng)的事件,數(shù)據(jù),全部移除
      //元素動(dòng)畫效果結(jié)束后觸發(fā)closed.bs.alert事件,并移除
      $parent.detach().trigger("closed.bs.alert").remove()
    }
    //探測(cè)瀏覽器是否支持transition,以及祖先元素是否包含fade類,如果都支持,
    //在關(guān)閉alert警告框時(shí),會(huì)有動(dòng)畫效果,如果不支持則直接刪除

    $.support.transition && $parent.hasClass("fade") ?
      $parent
        .one("bsTransitionEnd", removeElement)
        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
      removeElement()
  }
  //對(duì)外暴露的函數(shù)
  function Plugin(option) {
    return this.each(function () {
      var $this = $(this)
      //獲取元素上設(shè)置的數(shù)據(jù)
      var data  = $this.data("bs.alert")
    //如果沒有對(duì)應(yīng)的設(shè)置數(shù)據(jù),則重新設(shè)置
      if (!data) $this.data("bs.alert", (data = new Alert(this)))
      //判斷傳入的option是否為String類型,是則調(diào)用Alert實(shí)例的對(duì)應(yīng)方法
      if (typeof option == "string") data[option].call($this)
    })
  } 
 //保存一份alert引用
  var old = $.fn.alert
 //jquery實(shí)例上的alert方法,當(dāng)調(diào)用該方法是遍歷所有的選中的元素,設(shè)置對(duì)應(yīng)的data,并調(diào)用其原型的close方法,
  $.fn.alert             = Plugin
  $.fn.alert.Constructor = Alert

  //當(dāng)alert方法沖突時(shí),調(diào)用次方法避免沖突
  $.fn.alert.noConflict = function () {
    $.fn.alert = old
    return this
  }
  //在document上綁定事件 ,通過jquery的off方法,可以解除該事件
  $(document).on("click.bs.alert.data-api", dismiss, Alert.prototype.close)
}(jQuery);

2、使用

警告!請(qǐng)不要提交。
× 錯(cuò)誤!請(qǐng)進(jìn)行一些更改。

3、調(diào)用
當(dāng)我們調(diào)用

$(".alert").alert("close")

的時(shí)候,就會(huì)調(diào)用源碼中Plugin函數(shù),遍歷所有的警告框,并關(guān)閉。

4、解除警告框點(diǎn)擊關(guān)閉事件,傳入對(duì)應(yīng)的事件命名空間(namespace)即可

$(document).off(".bs.alert.data-api") 

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90034.html

相關(guān)文章

  • 推送近期三波關(guān)于Vue.js的資訊

    摘要:原文來自集前端最近很火的框架資源定時(shí)更新,歡迎一下。推送自己整理近期三波關(guān)于的資訊這里就拋磚引玉了,望有更屌的資源送助攻。 原文來自:集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎Star一下。 推送自己整理近期三波關(guān)于Vue.js的資訊; 這里就拋磚引玉了,望有更屌的資源送助攻。 showImg(https://segmentfault.com/img/bVVeiZ); 第...

    Anonymous1 評(píng)論0 收藏0
  • 實(shí)現(xiàn)element-ui的按需引入,按需打包加載

    摘要:簡(jiǎn)單說明原理使用實(shí)現(xiàn)按需引入打包。這里采用多入口配置,實(shí)現(xiàn)各個(gè)功能模塊分別打包成一個(gè)文件,并使用將樣式進(jìn)行抽離后,按入口進(jìn)行打包為對(duì)應(yīng)的文件。只要在指定入口名為。這個(gè)相關(guān)配置已經(jīng)發(fā)布了包。 簡(jiǎn)單說明原理: 使用babel-plugin-component實(shí)現(xiàn)按需引入、打包。將webpack配置成多入口,保證最終打包的目錄結(jié)構(gòu)符合babel-plugin-component插件的要求,實(shí)...

    TesterHome 評(píng)論0 收藏0
  • 列表——表頭自定義顯示字段

    摘要:今天我就來講講插件的使用,它是如何實(shí)現(xiàn)列表表頭自定義顯示字段的,我把我的經(jīng)驗(yàn)分享出來,滿足一下不懂英語的人,給你們搭個(gè)快車。需求分析實(shí)現(xiàn)列表表頭自定義顯示字段,自定義表頭排序。 序言 Yii2框架的擴(kuò)展性能真的很不錯(cuò),很多效果都可以通過插件去實(shí)現(xiàn),你想不到的老外都幫你想好了,于是,人群中就流傳了這么一句話:效果不會(huì)寫不要緊,會(huì)用插件也不錯(cuò)。GitHub是一個(gè)龐大而且開放的資源庫,平時(shí)有...

    Yangyang 評(píng)論0 收藏0
  • JavaWEB開發(fā)05_Bootstrap

    摘要:類用于寬度,占據(jù)全部視口的容器。通過行在水平方向創(chuàng)建一組列。通過為列設(shè)置屬性,從而創(chuàng)建列與列之間的間隔。 上次課內(nèi)容:什么JQ : write less do more 寫更少的代碼,做更多的事情 javascript函數(shù)庫 基本選擇器: ? ID選擇器: #ID名稱 ? 類選擇器: .類名 ? 元素選擇器: 元素的名稱 ? 通配符選擇器: * 找出頁面上...

    _Dreams 評(píng)論0 收藏0
  • JavaWEB開發(fā)05_Bootstrap

    摘要:類用于寬度,占據(jù)全部視口的容器。通過行在水平方向創(chuàng)建一組列。通過為列設(shè)置屬性,從而創(chuàng)建列與列之間的間隔。 上次課內(nèi)容:什么JQ : write less do more 寫更少的代碼,做更多的事情 javascript函數(shù)庫 基本選擇器: ? ID選擇器: #ID名稱 ? 類選擇器: .類名 ? 元素選擇器: 元素的名稱 ? 通配符選擇器: * 找出頁面上...

    coolpail 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<