bootstrap中的模態框(modal,彈出層)

風靈使發表於2018-12-31

bootstrap中的模態框(modal),不同於Tooltips,模態框以彈出對話方塊的形式出現,具有最小和最實用的功能集。
務必將模態框的 HTML 程式碼放在文件的最高層級內(也就是說,儘量作為 body 標籤的直接子元素),以避免其他元件影響模態框的展現或功能。

預設的modal示例:

<!DOCTYPE html>  
<html lang="zh-CN">  
<head>  
    <meta charset="utf-8">  
    <meta http-equiv="X-UA-Compatible" content="IE=edge">  
    <meta name="viewport" content="width=device-width, initial-scale=1">  
    <title>Bootstrap Modal</title>  
    <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css">  
</head>  
<body>  
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">  
    Launch demo modal  
</button>  
  
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">  
    <div class="modal-dialog" role="document">  
        <div class="modal-content">  
            <div class="modal-header">  
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">  
                    <span aria-hidden="true">×</span>  
                </button>  
                <h4 class="modal-title" id="myModalLabel">Modal title</h4>  
            </div>  
            <div class="modal-body">  
                <p>One fine body…</p>  
            </div>  
            <div class="modal-footer">  
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>  
                <button type="button" class="btn btn-primary">Save</button>  
            </div>  
        </div>  
    </div>  
</div>  
  
<script src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>  
<script src="http://cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>  
</body>  
</html>  

.modal 新增 role="dialog",用於指定模態框為對話方塊。
.modal-dialog 新增 aria-hidden="true" 屬性。
通過 aria-describedby 屬性為模態框 .modal 新增描述性資訊。

關閉動畫

如果你不需要模態框彈出時的動畫效果(淡入淡出效果),刪掉 .fade 類即可。

通過按鈕屬性顯示不同內容

當有一堆按鈕,都要觸發相同的模態框(如:向好友列表中某個人發訊息),只是有使用者ID不同,那麼可以使用data-whatever配合event.relatedtarget來實現:

<!DOCTYPE html>  
<html lang="zh-CN">  
<head>  
    <meta charset="utf-8">  
    <meta http-equiv="X-UA-Compatible" content="IE=edge">  
    <meta name="viewport" content="width=device-width, initial-scale=1">  
    <title>Bootstrap Modal</title>  
    <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css">  
</head>  
<body>  
  
  
<div class="panel panel-default">  
    <div class="panel-heading">好友列表</div>  
    <div class="panel-body">  
        <div class="list-group" role="group" aria-label="好友列表">  
            <button type="button" class="list-group-item" data-toggle="modal" data-target="#exampleModal"  
                    data-whatever="張三">張三  
            </button>  
            <button type="button" class="list-group-item" data-toggle="modal" data-target="#exampleModal"  
                    data-whatever="李四">李四  
            </button>  
            <button type="button" class="list-group-item" data-toggle="modal" data-target="#exampleModal"  
                    data-whatever="王二">王二  
            </button>  
        </div>  
    </div>  
</div>  
  
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">  
    <div class="modal-dialog" role="document">  
        <div class="modal-content">  
            <div class="modal-header">  
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span  
                        aria-hidden="true">×</span></button>  
                <h4 class="modal-title" id="exampleModalLabel">New message</h4>  
            </div>  
            <div class="modal-body">  
                <form>  
                    <div class="form-group">  
                        <label for="recipient-name" class="control-label">Recipient:</label>  
                        <input type="text" class="form-control" id="recipient-name">  
                    </div>  
                    <div class="form-group">  
                        <label for="message-text" class="control-label">Message:</label>  
                        <textarea class="form-control" id="message-text"></textarea>  
                    </div>  
                </form>  
            </div>  
            <div class="modal-footer">  
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>  
                <button type="button" class="btn btn-primary">Send message</button>  
            </div>  
        </div>  
    </div>  
</div>  
<script src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>  
<script src="http://cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>  
<script>  
    $('#exampleModal').on('show.bs.modal', function (event) {  
        var button = $(event.relatedTarget) // 觸發事件的按鈕  
        var recipient = button.data('whatever') // 解析出data-whatever內容  
        var modal = $(this)  
        modal.find('.modal-title').text('Message To ' + recipient)  
        modal.find('.modal-body input').val(recipient)  
    })  
</script>  
</body>  
</html>  

通常不需寫 JavaScript 程式碼也可啟用模態框。通過在一個起控制器作用的元素(例如:按鈕)上新增 data-toggle="modal" 屬性,或者 data-target="#foo" 屬性,再或者 href="#foo" 屬性,用於指向被控制的模態框。

通過JavaScript呼叫modal

通常只需一行 JavaScript 程式碼,即可通過元素的 id myModal 呼叫模態框:

$('#myModal').modal(options)  

JavaScript引數:

可以將選項通過 data 屬性或 JavaScript 程式碼傳遞。對於 data 屬性,需要將引數名稱放到 data- 之後,例如 data-backdrop=""

名稱 型別 預設值 描述
backdrop boolean或’static’ True 預設情況下,點選其它位置,模態框自動關閉,你可以設定此屬性為false或者"static"防止模態框自動關閉
keyboard boolean True 鍵盤上的 esc 鍵被按下時關閉模態框。
show path True 模態框初始化之後就立即顯示出來。
remote path False 這個引數在v4裡會去掉(可以自己寫ajax請求來實現)如果提供的是 URL,將利用 jQuery 的 load 方法從此 URL 地址載入要展示的內容(只載入一次)並插入 .modal-content 內。如果使用的是 data 屬性 API,還可以利用 href 屬性指定內容來源地址。下面是一個例項:
<a data-toggle="modal" href="remote.html" data-target="#modal">Click me</a>

呼叫示例

1.將頁面中的某塊內容作為模態框啟用。接受可選引數 object

$('#myModal').modal({  
  keyboard: false  
})  

2.手動開啟或關閉模態框。在模態框顯示或隱藏之前返回到主調函式中(也就是,在觸發 shown.bs.modalhidden.bs.modal 事件之前)。

$('#myModal').modal('toggle')  

3.手動開啟模態框。在模態框顯示之前返回到主調函式中 (也就是,在觸發 shown.bs.modal 事件之前)。

$('#myModal').modal('show')  

4.手動隱藏模態框。在模態框隱藏之前返回到主調函式中 (也就是,在觸發 hidden.bs.modal 事件之前)。

$('#myModal').modal('hide')  

5.更新模態框,在模態框動態新增或刪除內容時:

$('#myModal').modal('handleUpdate')  

繫結事件

Bootstrap 的模態框類提供了一些事件用於監聽並執行你自己的程式碼。

事件型別 描述
show.bs.modal show 方法呼叫之後立即觸發該事件。如果是通過點選某個作為觸發器的元素,則此元素可以通過事件的 relatedTarget 屬性進行訪問。
shown.bs.modal 此事件在模態框已經顯示出來(並且同時在 CSS 過渡效果完成)之後被觸發。如果是通過點選某個作為觸發器的元素,則此元素可以通過事件的 relatedTarget 屬性進行訪問。
hide.bs.modal hide 方法呼叫之後立即觸發該事件。
hidden.bs.modal 此事件在模態框被隱藏(並且同時在 CSS 過渡效果完成)之後被觸發。
loaded.bs.modal 從遠端的資料來源載入完資料之後觸發該事件。

如:

$('#myModal').on('hidden.bs.modal', function (e) {  
  // do something...  
})  

相關文章