頁面彈出層元件layer的用法
一:頁面引入和核心js檔案 layer.js
<
script src="layer.js的路徑"><
/script>
二:基礎引數:
型別:Number,預設:0
layer提供了5種層型別。可傳入的值有:0(資訊框,預設)1(頁面層)2(iframe層)3(載入層)4(tips層)。 若你採用layer.open({type: 1})方式呼叫,則type為必填項(資訊框除外)
型別:String/Array/Boolean,預設:'資訊'
title支援三種類型的值,若你傳入的是普通的字串,如title :'我是標題',那麼只會改變標題文字;若你還需要自定義標題區域樣式,那麼你可以title: ['文字', 'font-size:18px;']
型別:String/DOM/Array,預設:''
content可傳入的值是靈活多變的,不僅可以傳入普通的html內容,還可以指定DOM,更可以隨著type的不同而不同。譬如:
- /!*
- 如果是頁面層
- */
- layer.open({
- type: 1,
- content: '傳入任意的文字或html' //這裡content是一個普通的String
- });
- layer.open({
- type: 1,
- content: $('#id') //這裡content是一個DOM,注意:最好該元素要存放在body最外層,否則可能被其它的相對元素所影響
- });
- //Ajax獲取
- $.post('url', {}, function(str){
- layer.open({
- type: 1,
- content: str //注意,如果str是object,那麼需要字元拼接。
- });
- });
- /!*
- 如果是iframe層
- */
- layer.open({
- type: 2,
- content: 'http://sentsin.com' //這裡content是一個URL,如果你不想讓iframe出現滾動條,你還可以content: ['http://sentsin.com', 'no']
- });
- /!*
- 如果是用layer.open執行tips層
- */
- layer.open({
- type: 4,
- content: ['內容', '#id'] //陣列第二項即吸附元素選擇器或者DOM
- });
型別:String,預設:''
skin不僅允許你傳入layer內建的樣式class名,還可以傳入您自定義的class名。這是一個很好的切入點,意味著你可以藉助skin輕鬆完成不同的風格定製。目前layer內建的skin有:layui-layer-lanlayui-layer-molv,未來我們還會選擇性地內建更多,但更推薦您自己來定義。以下是一個自定義風格的簡單例子
- //單個使用
- layer.open({
- skin: 'demo-class'
- });
- //全域性使用。即所有彈出層都預設採用,但是單個配置skin的優先順序更高
- layer.config({
- skin: 'demo-class'
- })
- //CSS
- body .demo-class .layui-layer-title{background:#c00; color:#fff; border: none;}
- body .demo-class .layui-layer-btn{border-top:1px solid #E9E7E7}
- body .demo-class .layui-layer-btn a{background:#333;}
- body .demo-class .layui-layer-btn .layui-layer-btn1{background:#999;}
- …
- 加上body是為了保證優先順序。你可以藉助Chrome除錯工具,定義更多樣式控制層更多的區域。
型別:String/Array,預設:'auto'
在預設狀態下,layer是寬高都自適應的,但當你只想定義寬度時,你可以area: '500px',高度仍然是自適應的。當你寬高都要定義時,你可以area: ['500px', '300px']
型別:String/Array,預設:垂直水平居中
offset預設情況下不用設定。但如果你不想垂直水平居中,你還可以進行以下賦值:
值 | 備註 |
---|---|
offset: '100px' | 只定義top座標,水平保持居中 |
offset: ['100px', '50px'] | 同時定義top、left座標 |
offset: 't' | 快捷設定頂部座標 |
offset: 'r' | 快捷設定右邊緣座標 |
offset: 'b' | 快捷設定底部座標 |
offset: 'l' | 快捷設定左邊緣座標 |
offset: 'lt' | 快捷設定左上角 |
offset: 'lb' | 快捷設定左下角 |
offset: 'rt' | 快捷設定右上角 |
offset: 'rb' | 快捷設定右下角 |
型別:String/Boolean,預設:1
layer提供了兩種風格的關閉按鈕,可通過配置1和2來展示,如果不顯示,則closeBtn: 0
型別:Boolean,預設:false
如果你的shade是存在的,那麼你可以設定shadeClose來控制點選彈層外區域關閉。
型別:Number,預設:0
我們的出場動畫全部採用CSS3。這意味著除了ie6-9,其它所有瀏覽器都是支援的。目前anim可支援的動畫型別有0-6 如果不想顯示動畫,設定 anim: -1 即可。另外需要注意的是,3.0之前的版本用的是 shift 引數
型別:Boolean,預設:false
該引數值對type:1和type:2有效。預設不顯示最大小化按鈕。需要顯示配置maxmin: true即可
型別:Function,預設:null
當你需要在層建立完畢時即執行一些語句,可以通過該回調。success會攜帶兩個引數,分別是當前層DOM當前層索引。如:
- layer.open({
- content: '測試回撥',
- success: function(layero, index){
- console.log(layero, index);
- }
- });
型別:Function,預設:null
該回調攜帶兩個引數,分別為當前層索引、當前層DOM物件。如:
- layer.open({
- content: '測試回撥',
- yes: function(index, layero){
- //do something
- layer.close(index); //如果設定了yes回撥,需進行手工關閉
- }
- });
型別:Function,預設:null
該回調攜帶兩個引數,分別為:當前層索引引數(index)、當前層的DOM物件(layero),預設會自動觸發關閉。如果不想關閉,return false即可,如;
- cancel: function(index, layero){
- if(confirm('確定要關閉麼')){ //只有當點選confirm框的確定時,該層才會關閉
- layer.close(index)
- }
- return false;
- }
由於我們的layer內建了輕量級載入器,所以你根本不需要單獨引入css等檔案。但是載入總是需要過程的。當你在頁面一開啟就要執行彈層時,你最好是將彈層放入ready方法中,如:
- /頁面一開啟就執行彈層
- layer.ready(function(){
- layer.msg('很高興一開場就見到你');
- });
基本上是露臉率最高的方法,不管是使用哪種方式建立層,都是走layer.open(),建立任何型別的彈層都會返回一個當前層索引,上述的options即是基礎引數,另外,該文件統一採用options作為基礎引數的標識例子:
- var index = layer.open({
- content: 'test'
- });
- //拿到的index是一個重要的憑據,它是諸如layer.close(index)等方法的必傳引數。
type:3的深度定製。load並不需要你傳太多的引數,但如果你不喜歡預設的載入風格,你還有選擇空間。icon支援傳入0-2如果是0,無需傳。另外特別注意一點:load預設是不會自動關閉的,因為你一般會在ajax回撥體中關閉它。
- /eg1
- var index = layer.load();
- //eg2
- var index = layer.load(1); //換了種風格
- //eg3
- var index = layer.load(2, {time: 10*1000}); //又換了種風格,並且設定最長等待10秒
- //關閉
- layer.close(index);
當你試圖在當前頁獲取iframe頁的DOM元素時,你可以用此方法。selector即iframe頁的選擇器
- layer.open({
- type: 2,
- content: 'test/iframe.html',
- success: function(layero, index){
- var body = layer.getChildFrame('body', index);
- var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe頁的視窗物件,執行iframe頁的方法:iframeWin.method();
- console.log(body.html()) //得到iframe頁的body內容
- body.find('input').val('Hi,我是從父頁來的')
- }
- });
此方法一般用於在iframe頁關閉自身時用到。
- //假設這是iframe頁
- var index = parent.layer.getFrameIndex(window.name); //先得到當前iframe層的索引
- parent.layer.close(index); //再執行關閉
tab層只單獨定製了一個成員,即tab: [],這個好像沒有什麼可介紹的,簡單粗暴看例子
- layer.tab({
- area: ['600px', '300px'],
- tab: [{
- title: 'TAB1',
- content: '內容1'
- }, {
- title: 'TAB2',
- content: '內容2'
- }, {
- title: 'TAB3',
- content: '內容3'
- }]
- });