Bootstrap警告框


前面的話

  在網站中,網頁總是需要和用戶一起做溝通與交流。特別是當用戶操作上下文為用戶提供一些有效的警示框,比如說告訴用戶操作成功、操作錯誤、提示或者警告等。在Bootstrap框架有一個獨立的組件,實現類似的效果,這個組件被稱為警示框。本文將詳細介紹Bootstrap警告框

 

默認用法

  警告框組件通過提供一些靈活的預定義消息,為常見的用戶動作提供反饋消息

  將任意文本和一個可選的關閉按鈕組合在一起就能組成一個警告框,.alert 類是必須要設置的,另外還提供了有特殊意義的4個類(例如,.alert-success),代表不同的警告信息

.alert {
  padding: 15px;
  margin-bottom: 20px;
  border: 1px solid transparent;
  border-radius: 4px;
}
.alert h4 {
  margin-top: 0;
  color: inherit;
}
.alert .alert-link {
  font-weight: bold;
}
.alert > p,
.alert > ul {
  margin-bottom: 0;
}
.alert > p + p {
  margin-top: 5px;
}

  警告框沒有默認類,只有基類和修飾類。默認的灰色警告框並沒有多少意義。所以您使用一種有意義的警告類。目前提供了成功、消息、警告和危險

  1、成功警示框:告訴用戶操作成功,在“alert”樣式基礎上追加“alert-success”樣式,具體呈現的是背景、邊框和文本都是綠色;

  2、信息警示框:給用戶提供提示信息,在“alert”樣式基礎上追加“alert-info”樣式,具體呈現的是背景、邊框和文本都是淺藍色;

  3、警告警示框:提示用戶小心操作(提供警告信息),在“alert”樣式基礎上追加“alert-warning”樣式,具體呈現的是背景、邊框、文本都是淺黃色;

  4、錯誤警示框:提示用戶操作錯誤,在“alert”樣式基礎上追加“alert-danger”樣式,具體呈現的是背景、邊框和文本都是淺紅色

<div class="alert" role="alert">基類</div>
<div class="alert alert-success" role="alert">成功</div>
<div class="alert alert-info" role="alert">信息提示</div>
<div class="alert alert-warning" role="alert">警告</div>
<div class="alert alert-danger" role="alert">錯誤</div> 

 

可關閉

  在平時瀏覽網頁的時候,會發現一些警示框帶有關閉按鈕,用戶一點擊關閉按鈕就能自動關閉顯示的警示框(也就是讓警示框隱藏不顯示)。在Bootstrap框架中的警示框也具有這樣的功能

  只需要在默認的警示框里面添加一個關閉按鈕。然后進行三個步驟:

  1、需要在基本警示框“alert”的基礎上添加“alert-dismissable”樣式。

  2、在button標簽中加入class="close"類,實現警示框關閉按鈕的樣式。

  3、要確保關閉按鈕元素上設置了自定義屬性:data-dismiss="alert"(因為可關閉警示框需要借助於Javascript來檢測該屬性,從而控制警示框的關閉)

.alert-dismissable {
  padding-right: 35px;
}
.alert-dismissable .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
<div class="alert alert-success alert-dismissable" role="alert">
    <button class="close" type="button" data-dismiss="alert">×</button>
    恭喜您操作成功!
</div>

【外部關閉】

  如果把關閉按鈕放置在警告框的外部,則需要設置data-target為'# + 警告框的id'

  這個用法的弊端是按鈕本身無法關閉,因為它已經不在警告框內了

<button type="button" class="btn" data-dismiss="alert" data-target="#test">關閉</button>
<div id="test" class="alert alert-success alert-dismissable" role="alert">操作成功</div>

  如果想關閉警告框的同時,把按鈕也從DOM中刪除,如果按鈕的class是'btn',則設置data-target=".btn'則可以把按鈕也刪除

<button type="button" class="btn" data-dismiss="alert" data-target="#test,.btn">關閉</button>
<div id="test" class="alert alert-success alert-dismissable" role="alert">操作成功</div>

 

鏈接

  有時可能想在警示框中加入鏈接地址,用來告訴用戶跳到某一個地方或新的頁面。而這個時候又想讓用戶能明顯的看出來這是鏈接地址。在Bootstrap框架中對警示框里的鏈接樣式做了一個高亮顯示處理。為不同類型的警示框內的鏈接進行了加粗處理,並且顏色相應加深

  Bootstrap框架是通過給警示框加的鏈接添加一個名為“alert-link”的類名,通過“alert-link”樣式給鏈接提供高亮顯示 

.alert .alert-link {
  font-weight: bold;
}
.alert-success .alert-link {
  color: #2b542c;
}
.alert-info .alert-link {
  color: #245269;
}
.alert-warning .alert-link {
  color: #66512c;
}
.alert-danger .alert-link {
  color: #843534;
}
<div class="alert alert-success" role="alert">成功 <a href="#" class="alert-link">詳情查看</a></div>
<div class="alert alert-info" role="alert">信息提示 <a href="#" class="alert-link">詳情查看</a></div>
<div class="alert alert-warning" role="alert">警告 <a href="#" class="alert-link">詳情查看</a></div>
<div class="alert alert-danger" role="alert">錯誤 <a href="#" class="alert-link">詳情查看</a></div> 

 

JS觸發

【方法】

$().alert('close')

  關閉警告框並從 DOM 中將其刪除

<div class="alert alert-success alert-dismissable" role="alert">
    <button class="close" type="button">×</button>
    恭喜您操作成功!
</div>
<script>
 $('.close').click(function(){
     $('.alert').alert('close');
 }); 
</script>

【事件】

close.bs.alert    當 close 方法被調用后立即觸發此事件。
closed.bs.alert    當警告框被關閉后(也即 CSS 過渡效果完畢之后)立即觸發此事件。
<div class="alert alert-success alert-dismissable fade in" data-dismiss="alert" role="alert">
    <button class="close" type="button">×</button>
    恭喜您操作成功!
</div>
<div id="intro">警告框處於打開狀態</div>
<script>
$('.alert').on('closed.bs.alert', function () {
    $('#intro').html('警告框被關閉了')
})
</script>

   

JS源碼

【1】IIFE

  使用立即調用函數,防止插件內代碼外泄,從而形成一個閉環,並且只能從jQuery的fn里進行擴展

+function ($) {
    //使用es5嚴格模式
    'use strict';
    //
}(window.jQuery);

【2】初始設置

  //定義選擇器,所有符合該自定義屬性的元素都可以觸發下面的事件
  var dismiss = '[data-dismiss="alert"]'
  var Alert   = function (el) {
    //傳入元素,如果元素內部有dismiss設置的自定義屬性,則click事件會觸發原型上的close方法
    $(el).on('click', dismiss, this.close)
  }
  //版本號為3.3.7
  Alert.VERSION = '3.3.7'
  //動畫持續時間為150ms
  Alert.TRANSITION_DURATION = 150

【3】插件核心代碼

  Alert.prototype.close = function (e) {
    //被單擊元素的jQuery對象,臨時賦值,防止this污染
    var $this    = $(this)
    //獲取自定義屬性data-target的值
    var selector = $this.attr('data-target')
    //獲取沒有data-target屬性
    if (!selector) {
      //則獲取href屬性的值
      selector = $this.attr('href')
      //IE7瀏覽器特殊處理
      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') 
    }
    //獲取jQuery對象
    var $parent = $(selector === '#' ? [] : selector)
    //阻止默認行為
    if (e) e.preventDefault()
    //如果該元素不存在
    if (!$parent.length) {
      //存在最近的樣式為'.alert'的祖先元素
      $parent = $this.closest('.alert')
    }
    //刪除元素前,執行close事件,可以通過自定義綁定來執行定義代碼
    $parent.trigger(e = $.Event('close.bs.alert'))
    //如果回調函數中已經包含阻止默認行為的代碼,則直接返回
    if (e.isDefaultPrevented()) return
    //刪除元素上的in樣式
    $parent.removeClass('in')

    function removeElement() {
      //觸發closed事件后,刪除該元素
      $parent.detach().trigger('closed.bs.alert').remove()
    }
    //如果支持動畫,並且設置為fade樣式
    $.support.transition && $parent.hasClass('fade') ?
      //在執行動畫過渡效果后,再刪除元素
      $parent
        .one('bsTransitionEnd', removeElement)
        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
      //否則直接刪除元素
      removeElement()
  }

【4】jQuery插件定義

  function Plugin(option) {
    //根據選擇器,遍歷所有符合規則的元素
    return this.each(function () {
      var $this = $(this)
      //獲取自定義屬性bs.alert的值
      var data  = $this.data('bs.alert')
      //如果值不存在,則將Alert實例設置為bs.alert值
      if (!data) $this.data('bs.alert', (data = new Alert(this)))
      //如果option傳遞了string,則表示要執行某個方法 
      if (typeof option == 'string') data[option].call($this)
    })
  }

  var old = $.fn.alert
  //保留其他庫的$.fn.alert代碼(如果定義的話),以便在noConflict之后可以繼續使用該老代碼
  $.fn.alert             = Plugin
  //重設插件構造器,可以通過該屬性獲取插件的真實類函數
  $.fn.alert.Constructor = Alert

【5】防沖突處理

  $.fn.alert.noConflict = function () {
    //恢復以前的舊代碼
    $.fn.alert = old
    //將$.fn.alert.noConflict()設置為Bootstrap的Tab插件
    return this
  }

【6】綁定觸發事件

  //為聲明式的HTML綁定單擊事件
  //在整個document對象上,檢測是否有自定義屬性data-dismiss="alert"
  //如果有,則設置單擊的時候,關閉指定的警告框元素
  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM