前端框架layui之彈出層

1.導入插件css

layui使用須要導入layui的js和css:html

<link rel="stylesheet" href="layui/css/layui.css" />
<script src="layui/layui.js"></script>

2.layui彈出層jquery

引入layer,如下的其餘代碼均在...的位置實現:ajax

<script>
     layui.use('layer',function(){
       var layer=layui.layer;
       .....//代碼
  });
</script>

2.1最基本的消息框:json

type : 基本層類型,類型:Number,默認:0。可傳入的值有:0(信息框),1(頁面層),2(iframe層),3(加載層),4(tips層)。若是想點擊一個框而不影響其餘的彈出框,在頁面通常讓type爲1。瀏覽器

layer.open({
    type:1,
    title:['提示信息']
})


 

 2.2消息提示框測試

括號裏面的第一個是顯示的信息,後面的要顯示的圖標,數字不一樣表明的圖標不一樣。想顯示圖標時,默認皮膚能夠傳入0-6,若是是加載層,能夠傳入0-2。動畫

layer.alert('酷斃了', {icon: 1});//顯示圖標
layer.alert('酷斃了');//不顯示圖標


 

這個消息框顯示3秒鐘後會消失,默認是3秒。ui

layer.msg("我是消息彈框,我3秒後消失");

 


 

能夠自定義標題和內容的消息提示框:this

layer.open({
    skin:'demo-class',//設置彈框樣式
    area:['260px','160px'],//彈框的大小(寬,高),默認:'auto'
    title:['信息提示框','15px'],//彈框的標題
    content: '恭喜你經過了英語四級考試'//顯示的消息內容
})

skin是設置彈框的標題的樣式,若不自定義樣式就採用默認的樣式,也能夠本身定義樣式,添加css樣式,都是能夠設置成本身須要的顏色:

body .demo-class .layui-layer-title{background:#63B8FF;  border: none;}


 

 2.2多個按鈕的消息確認框

確認與取消框:btn最後的按鈕默認是取消按鈕,默認會關閉彈框。準確的介紹見下文!

layer.confirm("肯定刪除嗎?",{
    btn2: function(index, layero){
        //按鈕【按鈕二】的回調
        alert("點擊了取消按鈕")
    }
},
function(index, layero){
  //按鈕【按鈕一】的回調
  alert("點擊了肯定按鈕")
}
);


 

 自定義可禁止關閉按鈕的多按鈕彈框:

layer.open({
     content: '你知道牛頓定律嗎?'
    ,btn: ['熟悉', '瞭解', '不清楚'],
    //默認最後一個按鈕是關閉窗口的按鈕
    yes: function(index, layero){
      alert("熟悉");
      return false; //開啓該代碼可禁止點擊該按鈕來關閉窗口
    }
    ,btn2: function(index, layero){
      //按鈕【按鈕二】的回調
      alert("瞭解");
      return false;
    }
    ,btn3: function(index, layero){
         //按鈕【按鈕三】的回調
        alert("不清楚");
        return false;
     }
     ,cancel: function(){ 
        //右上角關閉回調
        alert("關閉啦");
    }
});            


 

2.3 按鈕排列

btnAlign,類型:String,默認:'r'。'l'居左對齊,'c'居中對齊。

layer.open({
    btnAlign:'l',//設置靠左對齊
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'
})


 

2.4關閉按鈕樣式

closeBtn,類型:String/Boolean,默認:1 。layer提供了兩種風格的關閉按鈕,可經過配置12來展現,若是不顯示,則closeBtn: 0。三種樣式以下:

layer.open({
 closeBtn:'2',//設置爲第二種樣式
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'
})

 


 

2.5 遮罩

shade,類型:String/Array/Boolean,遮罩即彈層外區域,默認是0.3透明度的黑色背景('#000')。不想顯示遮罩,能夠shade: 0。

layer.open({
    shade:[0.8,'#00ff00'],//彈框外層是透明度爲0.8的#00ff00顏色
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'
})

 

2.6是否點擊遮罩關閉

shadeClose,類型:Boolean,默認:false,即點擊遮罩不關閉。若是你的shade是存在的,那麼你能夠設定shadeClose來控制點擊彈框外區域關閉。

layer.open({
    shadeClose: true,//點擊彈框之外的區域關閉彈框
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'
})

 

2.7設置自動關閉的時間

time,類型:Number,默認:0,自動關閉所需毫秒。想自動關閉時,使用time: 5000,即表明5秒後自動關閉,單位是毫秒(1秒=1000毫秒)。

layer.open({
    time: 5000,//5s後自動關閉
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'
})

 

2.8彈層惟一標識

id,類型:String,默認:空字符。設置該值後,不論是什麼類型的層,都只容許同時彈出一個(通常看到的是彈出位置最後的一個)。通常用於頁面層和iframe層模式。

layer.open({
    id:'open1',//設置id
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'
})

 

2.9彈出動畫

anim,類型:Number,默認:0。目前anim可支持的動畫類型有0-6 若是不想顯示動畫,設置 anim: -1 便可。

0:平滑放大  1:從上掉落  2:從最底部往上滑入  3:從左滑入

4:從左翻滾  5:漸顯    6:抖動

layer.open({
    anim:1,//設置出現的動畫效果
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'
})

 

2.10關閉動畫

isOutAnim,類型:Boolean,默認:true。默認狀況下,關閉層時會有一個過分動畫。若是不想開啓,設置  false 便可。

layer.open({
    isOutAnim:false,//關閉過分動畫
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'
})

 

2.11最大最小化

maxmin,類型:Boolean,默認:false。該參數值對type:1type:2有效。默認不顯示最大小化按鈕。須要顯示配置maxmin: true便可。

layer.open({
    type: 1,
    maxmin: true,//可調整大小化
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'
})

 

2.12固定

fixed,類型:Boolean,默認:true,即鼠標滾動時,彈出層是否固定在可視區域。若是不想,設置fixed: false便可。

 

2.13是否容許拉伸

resize,類型:Boolean,默認:true。默認狀況下,你能夠在彈層右下角拖動來拉伸尺寸。若是對指定的彈層屏蔽該功能,設置 false便可。該參數對loading、tips層無效。

layer.open({
    resize: false,//不容許窗口拉伸
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'
})

 

2.14監聽窗口拉伸動做

resizing,

類型:Function,默認:null。當拖拽彈層右下角對窗體進行尺寸調整時,若是設定了該回調,則會執行。回調返回一個參數:當前層的DOM對象。

layer.open({
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試'//當窗口拉伸時自動調用
     resizing:function(layor){
        console.log(layor);//這裏會打印不少次,應該是改變必定的尺寸就會調用一次
 }
})

 

2.15是否容許瀏覽器出現滾動條

scrollbar,類型:Boolean,默認:true。默認容許瀏覽器滾動,若是設定scrollbar: false,則屏蔽。

layer.open({
    scrollbar:false,//禁止瀏覽器出現滾動條
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試',
    }
})

 

2.16設置彈框的位置座標  

offset,類型:String/Array,默認'auto':垂直水平居中。也能夠設置如下的參數:

offset: '100px' 只定義top座標,水平保持居中 offset: ['100px', '50px'] 同時定義top、left座標
offset: 't' 設置頂部座標(水平居中靠頂) offset: 'r' 設置右邊緣座標(垂直居中靠右)
offset: 'b' 設置底部座標(水平居中靠低) offset: 'l' 設置左邊緣座標(垂直居中靠左)
offset: 'lt' 設置左上角(處於左上角) offset: 'lb' 設置左下角(處於左下角)
offset: 'rt' 設置右上角(處於右上角) offset: 'rb' 設置右下角(處於右下角)
layer.open({
    offset: '100px',//會水平居中顯示,距離頂部100px
    skin:'demo-class',
    area:['260px','160px'],
    title:['信息提示框','15px'],
    content: '恭喜你經過了英語四級考試',
    }
})

 

2.17最大寬度、最大高度

maxWidth,類型:Number,默認:360。只有當area: 'auto',maxWidth的設定纔有效。

layer.open({
    skin:'demo-class',
    content: '恭喜你經過了英語四級考試' maxWidth: 1000,//當內容寬度超過1000時纔會換行
}) 

maxHeight,類型:Number,默認:無。只有當高度自適應時,maxHeight的設定纔有效。

layer.open({
    skin:'demo-class', content: '恭喜你經過了英語四級考試' maxHeighr: 100,//當內容高度超過100時會出現滾動條,若是設置了固定的高度也會出現這種狀況 })

 

2.18層疊順序*

zIndex,類型:,默認:19891014(賢心生日 0.0),通常用於解決和其它組件的層疊衝突。

 

2.19彈框拖拽 

1)設置觸發拖動的元素

move,類型:String/DOM/Boolean,默認:'.layui-layer-title'。默認是觸發標題區域拖拽來移動彈框。若是想單獨定義,指向元素的選擇器或者DOM便可。如move: '.mine-move'。設定move: false來禁止拖。

layer.open({
    skin:'demo-class',
    content: '恭喜你經過了英語四級考試' move:false,//禁止拖拽彈框
})

 2)是否容許拖拽到窗口外

moveOut,類型:Boolean,默認:false。默認只能在窗口內拖拽,若是你想讓拖到窗外,那麼設定moveOut: true便可。

3)拖動完畢後的回調方法

moveEnd,類型:Function,默認:null。默認不會觸發moveEnd,若是你須要,設定moveEnd: function(layero){}便可,其中layero爲當前層的DOM對象。

layer.open({
    btn:['肯定','取消'],
    type:1,
    skin:'demo-class',
    content: '恭喜你經過了英語四級考試',
    moveEnd:function(index,layero){//拖拽後執行的方法
        layer.open({
        skin:'demo-class',
        content: '你拖拽了彈框', }); }
})

 

2.20tips

1)tips方向和顏色

tips,類型:Number/Array,默認:2。是tips層的私有參數。支持上右下左四個方向,經過1-4進行方向設定。如tips: 3則表示在元素的下面出現。有時你還可能會定義一些顏色,能夠設定tips: [1, '#c00']。

<body>
    <input type="text" id="id" />
</body>
<script>
layui.use(['layer'],function(){
    var layer=layui.layer;
    layer.tips('從下面顯示', '#id', {tips: [1,'#f0f']});
});
</script>

2)是否容許多個tips

tipsMore,類型:Boolean,默認:false。容許多個意味着不會銷燬以前的tips層。經過tipsMore: true開啓。

layer.tips('從下面顯示', '#id', {
    tips: [1,'#f0f'],
    tipsMore:true,
 }
); layer.tips(
'從右面顯示', '#id',{tipsMore:true,});

 

2.21方法回調

1)彈框彈出成功的回調

success,類型:Function,默認:null。當你須要在層建立完畢時即執行一些語句,能夠經過該回調。success會攜帶兩個參數,分別是當前層DOM、當前層索引。

layer.open({
    content: '測試回調',
    success: function(layero, index){ console.log(layero, index); }
});  

2)肯定按鈕回調

yes,類型:Function,默認:null。該回調攜帶兩個參數,分別爲當前層索引、當前層DOM對象。

layer.open({
    content: '測試回調',
    yes: function(layero, index){ alert("你點擊了肯定按鈕") }
});  

3)右上角關閉按鈕觸發的回調

cancel,類型:Function,默認:null。該回調攜帶兩個參數,分別爲:當前層索引參數(index)、當前層的DOM對象(layero),默認會自動觸發關閉。若是不想關閉,return false便可。

layer.open({
    content: '測試回調',
   cancel: function(index, layero){ if(confirm('肯定要關閉麼')){ //只有當點擊confirm框的肯定時,該層纔會關閉
             layer.close(index);//關閉彈框的方式
         }
         return false; }  
});     

4)彈框銷燬後觸發的回調

layer.open({
    content: '測試回調',
    btn:['肯定','取消'],
    yes:function(index,layero){
        return false;//肯定按鈕禁止關閉彈框
    },
    end:function(){//彈框銷燬(關閉)後執行
        alert("彈框被銷燬啦") }
});  

5)最大化、最小化、還原後觸發的回調

full/min/restore,類型:Function,默認:null。攜帶一個參數,即當前層DOM。

layer.open({
    content: '測試回調',
    btn:['肯定','取消'],
    type:1,
    maxmin:true,
    full:function(layero){
        alert("點擊最大化時執行")
    },
    min:function(layero){
        alert("點擊最小化時執行")
    },
    restore:function(layero){
        alert("點擊還原時執行") }
});

 

2.22深刻理解layer的方法

1)初始化全局配置 layer.config(options)

它不只能夠配置一些諸如路徑、加載的模塊,甚至還能夠決定整個彈層的默認參數。

layer.config({
  anim: 1, //默認動畫風格
  skin: 'layui-layer-molv' //默認皮膚
  …
});

除此以外,extend還容許你加載拓展的css皮膚,以下:

layer.config({
   //若是是獨立版的layer,則將myskin存放在./skin目錄下
   //若是是layui中使用layer,則將myskin存放在./css/modules/layer目錄下
   extend: 'myskin/style.css'
});

2)初始化就緒 layer.ready(callback)

因爲layer內置了輕量級加載器,因此你根本不須要單獨引入css等文件。可是加載老是須要過程的。當你在頁面一打開就要執行彈框時,你最好是將彈框放入ready方法中,如:

//頁面一打開就執行彈層
layer.ready(function(){
   layer.alert('很高興一開場就見到你');
});  

3)原始核心方法 layer.open(options)

基本上是露臉率最高的方法,不論是使用哪一種方式建立層,都是走layer.open(),建立任何類型的彈層都會返回一個當前層索引。

var index=layer.open({
    content: '核心方法',
});
//能夠經過layer.close(index)來關閉這個彈框

4)普通訊息框 layer.alert(content, options, yes)

相似系統alert,但卻比alert更靈便。它的參數是自動向左補齊的。經過第二個參數,能夠設定各類你所須要的基礎參數,但若是你不須要的話,直接寫回調便可。

layer.alert("只顯示提示的內容");
layer.alert("有圖標的顯示內容",{icon:3})
layer.alert("我有回調,需點擊肯定時執行",{icon:1},function(){
    console.log("點擊了肯定,執行了回調")
})

 5)確認框 layer.confirm(content, options, yes, cancel) 

相似系統confirm,但卻遠勝confirm,另外它不是和系統的confirm同樣阻塞你須要把交互的語句放在回調體中。一樣的,它的參數也是自動補齊的。

//最完整的寫法,不過通常取消是不用的,能夠省略
layer.confirm("肯定刪除嗎?",{ icon:3, }, function(index){ alert("點擊了確認"); }, function(index){ alert("點擊了取消") } );

也能夠這樣寫,把取消按鈕放在optionsh中,也能夠在options中btn,換成本身的文字:

layer.confirm("肯定刪除嗎?",{
        icon:3,
//btn:['是','否'], btn2:function(index){ alert(
"點擊了取消") } }, function(index){ alert("點擊了確認"); }, );

最經常使用也是最簡單的方式以下:

layer.confirm("肯定刪除嗎?",
    function(index){
        alert("點擊了確認");//do something
    },
);

6)提示框 layer.msg(content, options, end) 

它佔據不多的面積,默認會3秒後自動消失,堅持零用戶操做,參數也是自動補齊的。

layer.msg("只顯示簡單的內容");
layer.msg("我有圖標啦",{icon:3})
layer.msg("我還有回調方法",{
        icon:3,
        time:5000,//5秒後自動關閉,默認是3秒
    },
    function(){
    //添加關閉後執行的操做
    alert("關閉啦")
})

7)加載層 layer.load(icon, options) 

type:3的深度定製。load並不須要傳太多的參數,若是不喜歡默認的加載風格,還有選擇空間。icon支持傳入0-2。若是是0,無需傳,是默認的。load默認是不會自動關閉的,通常會在ajax回調體中關閉它。關閉使用layer.close(index);

var index = layer.load();//默認是0
var index = layer.load(1); //換成1的風格
var index = layer.load(2, {time: 10*1000}); //換2的方格,而且設定最長等待10秒,而後會自動關閉

8)tips層 layer.tips(content, follow, options)

type:4的深度定製。它擁有和msg同樣的低調和自覺,並且會智能定位,即靈活地判斷它應該出如今哪邊,默認是在元素右邊彈出。

定義一個輸入框,方便提示:

<input type="text" id="id" />

輸入提示:

layer.tips('簡單版:這裏輸入用戶信息', '#id');

在元素的事件回調體中執行,若是這樣使用,須要引入jquery:

$('#id').on('click', function(){
  var that = this;
  layer.tips('只想提示地精準些', that);
});

完整的方式:

layer.tips('從下面顯示', '#id', {tips: 1;time:5000});

9)關閉彈框

a.關閉單個 layer.close(index)

關閉特定的彈框:根據須要,指定索引來關閉

var index = layer.open();
layer.close(index); 

關閉最新彈出的層:

layer.close(layer.index); //它獲取的始終是最新彈出的某個層,值是由layer內部動態遞增計算的

在iframe頁面關閉自身*:

var index = parent.layer.getFrameIndex(window.name); //先獲得當前iframe層的索引
parent.layer.close(index); //再執行關閉   

b.關閉全部的彈框 layerAll(type)

layer.closeAll(); //瘋狂模式,關閉全部層
layer.closeAll('dialog'); //關閉信息框
layer.closeAll('page'); //關閉全部頁面層
layer.closeAll('iframe'); //關閉全部的iframe層
layer.closeAll('loading'); //關閉加載層
layer.closeAll('tips'); //關閉全部的tips層   

10)從新定義層的樣式 layer.style(index, cssStyle)

該方法對loading層和tips層無效。參數index爲層的索引,cssStyle容許你傳入任意的css屬性。

var index = layer.open();
//從新給指定層設定width、top等
layer.style(index, {
  width: '400px',
  top: '10px'
});

11)改變層的標題 layer.title(title, index) 

var index = layer.open();
layer.title("輸入信息",index)

12) 獲取iframe頁的DOM layer.getChildFrame(selector, index)*

當你試圖在當前頁獲取iframe頁的DOM元素時,你能夠用此方法。

js代碼:

layer.open({
  type: 2,
  content: 'iframe.html',//這裏須要自定義頁面
  success: function(layero, index){
    var body = layer.getChildFrame('body', index);
    //獲得iframe頁的窗口對象,執行iframe頁的方法:iframeWin.method();
    var iframeWin = window[layero.find('iframe')[0]['name']]; 
    console.log(bodt.html()) //獲得iframe頁的body內容
    body.find('#id').val('Hi,我是從父頁來的')
  }
}); 

iframe.html頁面:

<body>
    輸入信息:<input type="text" class="layui-input" id="id" name='name' />
    <br>
    輸入信息:<input type="text" class="layui-input" id="id2" name='name2' />
</body>

13)獲取特定iframe層的索引  layer.getFrameIndex(windowName) *

此方法通常用於在iframe頁關閉自身時用到。

//假設這是iframe頁
var index = parent.layer.getFrameIndex(window.name); //先獲得當前iframe層的索引
parent.layer.close(index); //再執行關閉 

14)指定iframe層自適應 layer.iframeAuto(index) *

調用該方法時,iframe層的高度會從新進行適應

15)重置特定iframe url。layer.iframeSrc(index, url)*

16)置頂當前窗口 layer.setTop(layero)

當你的頁面有不少不少layer窗口,你須要像Window窗體那樣,點擊某個窗口,該窗體就置頂在上面,那麼setTop能夠來輕鬆實現。

17) 手工執行最大小化 layer.full()、layer.min()、layer.restore() *

layer.open({
    btn:['最大化','最小化','還原'],
    context:'點擊按鈕呀',
    yes:function(index,layero){
          layer.full();
          return false;
    },btn2:function(index,layero){
          layer.min();
           return false;
    },btn3:function(index,layero){
          layer.restore();
           return false;
    }
});

18)輸入層  layer.prompt(options, yes)

prompt的參數也是向前補齊的。options不只可支持傳入基礎參數,還能夠傳入prompt專用的屬性。固然,也能夠不傳。yes攜帶value:表單值  index:索引  elem:表單元素。

prompt層新定製的成員以下:

{
  formType: 1, //輸入框類型,支持0(文本)默認1(密碼)2(多行文本)
  value: '', //初始時的值,默認空字符
  maxlength: 140, //可輸入文本的最大長度,默認500
}

最簡單的輸入層:

layer.prompt(function(value,index,elem){
    alert(value);
    layer.close(index);
})  

加入屬性的輸入層:

layer.prompt({
  formType: 2,
  value: '',
  title: '請輸入內容',
  area: ['800px', '350px'] //自定義文本域寬高
}, function(value, index, elem){
      alert(value); //獲得value
      layer.close(index);
}); 
    

19) tab層 layer.tab(options)

tab層只單獨定製了一個成員,即tab: []

layer.tab({
  area: ['600px', '300px'],
  tab: [{
    title: '基本信息', 
    content: '張三'
  }, {
    title: '身體情況', 
    content: '身體很是的健康'
  }, {
    title: '經濟情況', 
    content: '貧困潦倒'
  }]
}); 

 20)相冊層 layer.photos(options) *

相冊層,也能夠稱之爲圖片查看器。它的出場動畫從layer內置的動畫類型中隨機展示。photos支持傳入json和直接讀取頁面圖片兩種方式。

相關文章
相關標籤/搜索