layer至今仍作為layui的代表作,她的受眾廣泛并非偶然,而是這五年多的堅(jiān)持,不斷完善和維護(hù)、不斷建設(shè)和提升社區(qū)服務(wù),使得猿們紛紛自發(fā)傳播,乃至于成為今天的Layui最強(qiáng)勁的源動(dòng)力。目前,layer已成為國內(nèi)最多人使用的web彈層組件,GitHub自然Stars
3000+,官網(wǎng)累計(jì)下載量達(dá)20w+,大概有15萬Web平臺(tái)正在使用layer。
之所以列舉上面這些數(shù)字,并非是在炫耀(也沒什么好炫耀的),而是懂layer和賢心的人都知道,這是一種怎樣不易的堅(jiān)持。由于layer在Layui體系中的位置比較特殊,甚至讓很多人都誤以為 Layui === Layer ui,所以再次強(qiáng)調(diào)layer只是作為L(zhǎng)ayui的一個(gè)彈層模塊,由于其用戶基數(shù)較大,所以至今仍把她作為獨(dú)立組件來維護(hù)。不過請(qǐng)注意:無論是獨(dú)立的layer,還是作為內(nèi)置模塊的layer,文檔都以本頁為準(zhǔn)。
模塊加載名稱:layer,layer獨(dú)立組件官網(wǎng):layer.layui.com
由于layer可以獨(dú)立使用,也可以通過Layui模塊化使用。所以請(qǐng)按照你的實(shí)際需求來選擇。
不同點(diǎn) | 作為獨(dú)立組件使用 | Layui模塊化使用 |
---|---|---|
用前準(zhǔn)備 | 如果你不想使用Layui,而只是想使用layer,你可以去layer獨(dú)立組件官網(wǎng)下載組件包。你需要在你的頁面引入jQuery1.8以上的任意版本,并引入layer.js。 | 如果你使用的是Layui,那么你直接在官網(wǎng)下載layui框架即可,無需引入jQuery和layer.js,但需要引入layui.css和layui.js |
調(diào)用方式 | 通過script引入layer.js后,直接用即可。
參考:快速上手 |
需要通過layui.use('layer', callback)加載模塊
如下代碼所示 |
// 作為獨(dú)立組件使用layer
<script src="layer.js"> 方式引入好layer.js后,直接用即可
layer.msg('hello');
我們提到的基礎(chǔ)參數(shù)主要指調(diào)用方法時(shí)用到的配置項(xiàng),如:layer.open({content: ''})
layer.msg('', {time: 3})
等,其中的content和time即是基礎(chǔ)參數(shù),以鍵值形式存在,基礎(chǔ)參數(shù)
可合理應(yīng)用于任何層類型中,您不需要所有都去配置,大多數(shù)都是可選的。而其中的layer.open、layer.msg就是內(nèi)置方法。注意,從2.3開始,無需通過layer.config來加載拓展模塊
類型:Number,默認(rèn):0
layer提供了5種層類型??蓚魅氲闹涤校?code style="padding: 3px 10px; border: 1px solid rgb(226, 226, 226); color: rgb(102, 102, 102); border-radius: 2px; background-color: rgb(251, 251, 251);">0(信息框,默認(rèn))1
(頁面層)
2
(iframe層)3
(加載層)4
(tips層)。
若你采用layer.open({type: 1})
方式調(diào)用,則type為必填項(xiàng)(信息框除外)
類型:String/Array/Boolean,默認(rèn):'信息'
title支持三種類型的值,若你傳入的是普通的字符串,如title :'我是標(biāo)題'
,那么只會(huì)改變標(biāo)題文本;若你還需要自定義標(biāo)題區(qū)域樣式,那么你可以title: ['文本', 'font-size:18px;']
,數(shù)組第二項(xiàng)可以寫任意css樣式;如果你不想顯示標(biāo)題欄,你可以
title: false
類型:String/DOM/Array,默認(rèn):''
content可傳入的值是靈活多變的,不僅可以傳入普通的html內(nèi)容,還可以指定DOM,更可以隨著type的不同而不同。譬如:
/!*
如果是頁面層
*/
layer.open({
type: 1,
content: '傳入任意的文本或html' //這里content是一個(gè)普通的String
});
layer.open({
type: 1,
content: $('#id') //這里content是一個(gè)DOM
});
//Ajax獲取
$.post('url', {}, function(str){
layer.open({
type: 1,
content: str //注意,如果str是object,那么需要字符拼接。
});
});
/!*
如果是iframe層
*/
layer.open({
type: 2,
content: 'http://sentsin.com' //這里content是一個(gè)URL,如果你不想讓iframe出現(xiàn)滾動(dòng)條,你還可以
content: ['http://sentsin.com', 'no']
});
/!*
如果是用layer.open執(zhí)行tips層
*/
layer.open({
type: 4,
content: ['內(nèi)容', '#id'] //數(shù)組第二項(xiàng)即吸附元素選擇器或者DOM
});
類型:String,默認(rèn):''
skin不僅允許你傳入layer內(nèi)置的樣式class名,還可以傳入您自定義的class名。這是一個(gè)很好的切入點(diǎn),意味著你可以借助skin輕松完成不同的風(fēng)格定制。目前l(fā)ayer內(nèi)置的skin有:layui-layer-lan
layui-layer-molv
,未來我們還會(huì)選擇性地內(nèi)置更多,但更推薦您自己來定義。以下是一個(gè)自定義風(fēng)格的簡(jiǎn)單例子。
你也可以去查看layer皮膚制作說明
//單個(gè)使用
layer.open({
skin: 'demo-class'
});
//全局使用。即所有彈出層都默認(rèn)采用,但是單個(gè)配置skin的優(yōu)先級(jí)更高
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是為了保證優(yōu)先級(jí)。你可以借助Chrome調(diào)試工具,定義更多樣式控制層更多的區(qū)域。
類型:String/Array,默認(rèn):'auto'
在默認(rèn)狀態(tài)下,layer是寬高都自適應(yīng)的,但當(dāng)你只想定義寬度時(shí),你可以area: '500px'
,高度仍然是自適應(yīng)的。當(dāng)你寬高都要定義時(shí),你可以area: ['500px', '300px']
類型:String/Array,默認(rèn):'auto'
默認(rèn)垂直水平居中。但當(dāng)你只想定義top時(shí),你可以offset: '100px'
。當(dāng)您top、left都要定義時(shí),你可以offset: ['100px', '200px']
。除此之外,你還可以定義
offset: 'rb'
,表示右下角。其它的特殊坐標(biāo),你可以自己計(jì)算賦值。
類型:Number,默認(rèn):-1(信息框)/0(加載層)
信息框默認(rèn)不顯示圖標(biāo)。當(dāng)你想顯示圖標(biāo)時(shí),默認(rèn)皮膚可以傳入0-6
如果是加載層,可以傳入0-2
。如:
//eg1
layer.alert('酷斃了', {icon: 1});
//eg2
layer.msg('不開心。。', {icon: 5});
//eg3
layer.load(1); //風(fēng)格1的加載
類型:String/Array,默認(rèn):'確認(rèn)'
信息框模式時(shí),btn默認(rèn)是一個(gè)確認(rèn)按鈕,其它層類型則默認(rèn)不顯示,加載層和tips層則無效。當(dāng)您只想自定義一個(gè)按鈕時(shí),你可以btn: '我知道了'
,當(dāng)你要定義兩個(gè)按鈕時(shí),你可以
btn: ['yes', 'no']
。當(dāng)然,你也可以定義更多按鈕,比如:btn: ['按鈕1', '按鈕2', '按鈕3', …]
,按鈕1和按鈕2的回調(diào)分別是yes和cancel,而從按鈕3開始,則回調(diào)為btn3:
function(){},以此類推。如:
//eg1
layer.confirm('納尼?', {
btn: ['按鈕一', '按鈕二', '按鈕三'] //可以無限個(gè)按鈕
,btn3: function(index, layero){
//按鈕【按鈕三】的回調(diào)
}
}, function(index, layero){
//按鈕【按鈕一】的回調(diào)
}, function(index){
//按鈕【按鈕二】的回調(diào)
});
//eg2
layer.open({
content: 'test'
,btn: ['按鈕一', '按鈕二', '按鈕三']
,yes: function(index, layero){
//按鈕【按鈕一】的回調(diào)
},btn2: function(index, layero){
//按鈕【按鈕二】的回調(diào)
},btn3: function(index, layero){
//按鈕【按鈕三】的回調(diào)
}
,cancel: function(){
//右上角關(guān)閉回調(diào)
}
});
類型:String/Boolean,默認(rèn):1
layer提供了兩種風(fēng)格的關(guān)閉按鈕,可通過配置1
和2
來展示,如果不顯示,則
closeBtn: 0
類型:String/Array/Boolean,默認(rèn):0.3
即彈層外區(qū)域。默認(rèn)是0.3透明度的黑色背景('#000')。如果你想定義別的顏色,可以shade: [0.8, '#393D49']
;如果你不想顯示遮罩,可以shade: 0
類型:Boolean,默認(rèn):false
如果你的shade是存在的,那么你可以設(shè)定shadeClose來控制點(diǎn)擊彈層外區(qū)域關(guān)閉。
類型:Number,默認(rèn):0
默認(rèn)不會(huì)自動(dòng)關(guān)閉。當(dāng)你想自動(dòng)關(guān)閉時(shí),可以time: 5000
,即代表5秒后自動(dòng)關(guān)閉,注意單位是毫秒(1秒=1000毫秒)
類型:String,默認(rèn):空字符
設(shè)置該值后,不管是什么類型的層,都只允許同時(shí)彈出一個(gè)。一般用于頁面層和iframe層模式
類型:Number,默認(rèn):0
從1.9開始,我們的出場(chǎng)動(dòng)畫全部采用CSS3。這意味著除了ie6-9,其它所有瀏覽器都是支持的。目前shift可支持的動(dòng)畫類型有0-6
類型:Boolean,默認(rèn):false
該參數(shù)值對(duì)type:1
和type:2
有效。默認(rèn)不顯示最大小化按鈕。需要顯示配置
maxmin: true
即可
類型:Boolean,默認(rèn):true
即鼠標(biāo)滾動(dòng)時(shí),層是否固定在可視區(qū)域。如果不想,設(shè)置fix: false
即可
類型:Boolean,默認(rèn):true
默認(rèn)允許瀏覽器滾動(dòng),如果設(shè)定scrollbar: false
,則屏蔽
類型:,默認(rèn):360
當(dāng)area: 'auto'
時(shí),maxWidth的設(shè)定才有效。
類型:,默認(rèn):19891014(賢心生日 0.0)
一般用于解決和其它組件的層疊沖突。
類型:String/DOM/Boolean,默認(rèn):'.layui-layer-title'
默認(rèn)是觸發(fā)標(biāo)題區(qū)域拖拽。如果你想單獨(dú)定義,指向元素的選擇器或者DOM即可。如move: '.mine-move'
。你還配置設(shè)定move: false
來禁止拖拽
類型:Number,默認(rèn):0
默認(rèn)的拖拽風(fēng)格正如你所見到的,會(huì)有個(gè)過度的透明框。但是如果你不喜歡,你可以設(shè)定moveType: 1
切換到傳統(tǒng)的拖拽模式
類型:Boolean,默認(rèn):false
默認(rèn)只能在窗口內(nèi)拖拽,如果你想讓拖到窗外,那么設(shè)定moveOut: true
即可
類型:Function,默認(rèn):null
默認(rèn)不會(huì)觸發(fā)moveEnd,如果你需要,設(shè)定moveEnd: function(){}
即可。
類型:Number/Array,默認(rèn):2
tips層的私有參數(shù)。支持上
右
下
左
四個(gè)方向,通過1-4
進(jìn)行方向設(shè)定。如
tips: 3
則表示在元素的下面出現(xiàn)。有時(shí)你還可能會(huì)定義一些顏色,可以設(shè)定tips: [1, '#c00']
類型:Boolean,默認(rèn):false
允許多個(gè)意味著不會(huì)銷毀之前的tips層。通過tipsMore: true
開啟
類型:Function,默認(rèn):null
當(dāng)你需要在層創(chuàng)建完畢時(shí)即執(zhí)行一些語句,可以通過該回調(diào)。success會(huì)攜帶兩個(gè)參數(shù),分別是當(dāng)前層DOM
當(dāng)前層索引
。如:
layer.open({
content: '測(cè)試回調(diào)',
success: function(layero, index){
console.log(layero, index);
}
});
類型:Function,默認(rèn):null
該回調(diào)攜帶兩個(gè)參數(shù),分別為當(dāng)前層索引、當(dāng)前層DOM對(duì)象。如:
layer.open({
content: '測(cè)試回調(diào)',
yes: function(index, layero){
//do something
layer.close(index); //如果設(shè)定了yes回調(diào),需進(jìn)行手工關(guān)閉
}
});
類型:Function,默認(rèn):null
該回調(diào)同樣只攜帶當(dāng)前層索引一個(gè)參數(shù),無需進(jìn)行手工關(guān)閉。如果不想關(guān)閉,return false
即可,如 cancel: function(index){ return false;
} 則不會(huì)關(guān)閉;
類型:Function,默認(rèn):null
無論是確認(rèn)還是取消,只要層被銷毀了,end都會(huì)執(zhí)行,不攜帶任何參數(shù)。
類型:Function,默認(rèn):null
攜帶一個(gè)參數(shù),即當(dāng)前層DOM
這是一個(gè)可以重要也可以不重要的方法,重要的是,它的權(quán)利真的很大,尤其是在模塊化加載layer時(shí),你會(huì)發(fā)現(xiàn)你必須要用到它。它不僅可以配置一些諸如路徑、加載的模塊,甚至還可以決定整個(gè)彈層的默認(rèn)參數(shù)。而說它不重要,是因?yàn)槎鄶?shù)情況下,你會(huì)發(fā)現(xiàn),你似乎不是那么十分需要它。但你真的需要認(rèn)識(shí)一下這位伙計(jì)。
如果您是采用seajs
或者requirejs
加載layer,你需要執(zhí)行該方法來完成初始化的配置。比如:
layer.config({
path: '/res/layer/' //layer.js所在的目錄,可以是絕對(duì)目錄,也可以是相對(duì)目錄
});
//這樣的話,layer就會(huì)去加載一些它所需要的配件,比如css等。
//當(dāng)然,你即便不用seajs或者requirejs,也可以通過上述方式設(shè)定路徑
如果你是采用<script src="?a.js&layer.js">這種合并的方式引入layer,那么您需要在script標(biāo)簽上加一個(gè)自定義屬性merge="true"。如:
<script src="?a.js&layer.js" merge="true">
這樣的話,layer就不會(huì)去自動(dòng)去獲取路徑,但你需要通過以下方式來完成初始化的配置
layer.config({
path: '/res/layer/' //layer.js所在的目錄,可以是絕對(duì)目錄,也可以是相對(duì)目錄
});
注意:如果采用 layui 加載 layer,無需設(shè)置 path。所以前置工作都是自動(dòng)完成。
但layer.config的作用遠(yuǎn)不止上述這樣。它還可以配置層默認(rèn)的基礎(chǔ)參數(shù)
,如:
codelayui.code
layer.config({
shift: 1, //默認(rèn)動(dòng)畫風(fēng)格
skin: 'layui-layer-molv' //默認(rèn)皮膚
…
});
//除此之外,extend還允許你加載css。這對(duì)于layer的第三方皮膚有極大的幫助,如:
layer.config({
extend: [
'skin/layer-ext-myskin/style.css' //layer-ext-myskin即是你拓展的皮膚文件
]
});
//擴(kuò)展css的規(guī)范:您必須在你擴(kuò)展中的css文件加上這段
html #layui_layer_skinlayer-ext-myskinstylecss{display:none; position: absolute; width:1989px;}
規(guī)則就是:html #layui_layer_skin{文件夾名}{文件名}css
skin名以文件夾名為標(biāo)準(zhǔn)。
由于我們的layer內(nèi)置了輕量級(jí)加載器,所以你根本不需要單獨(dú)引入css等文件。但是加載總是需要過程的。當(dāng)你在頁面一打開就要執(zhí)行彈層時(shí),layer.ready()會(huì)是一個(gè)不錯(cuò)的幫手。它也可以做一些layer.config可以做的事,比如指向layer.js所在目錄。但是如果你已經(jīng)通過layer.config配置了path,你在使用layer.ready時(shí),是不需要path的,如:
//頁面一打開就執(zhí)行彈層
layer.ready(function(){
layer.msg('很高興一開場(chǎng)就見到你');
});
我是華麗的醬油:介紹完上面兩位引導(dǎo)者,接下來我們真正的主角閃亮登場(chǎng)了。此處應(yīng)有掌聲 ^,^
基本上是露臉率最高的方法,不管是使用哪種方式創(chuàng)建層,都是走layer.open()
,創(chuàng)建任何類型的彈層都會(huì)返回一個(gè)當(dāng)前層索引,上述的options即是基礎(chǔ)參數(shù)
,另外,該文檔
統(tǒng)一采用options作為基礎(chǔ)參數(shù)的標(biāo)識(shí)
例子:
var index = layer.open({
content: 'test'
});
//拿到的index是一個(gè)重要的憑據(jù),它是諸如layer.close(index)等方法的必傳參數(shù)。
噢,請(qǐng)等等,上面這位主角的介紹篇幅怎么看怎么都覺得跟它的地位不符,作者在文檔中只給了它如此可憐的一塊地??這是因?yàn)?,它真的已?jīng)大眾得不能再大眾了,你真正需要了解的,是它的內(nèi)部器官,即上面一大篇幅介紹的各種基礎(chǔ)參數(shù)。 ←_←
它的彈出似乎顯得有些高調(diào),一般用于對(duì)用戶造成比較強(qiáng)烈的關(guān)注,類似系統(tǒng)alert,但卻比alert更靈便。它的參數(shù)是自動(dòng)向左補(bǔ)齊的。通過第二個(gè)參數(shù),可以設(shè)定各種你所需要的基礎(chǔ)參數(shù),但如果你不需要的話,直接寫回調(diào)即可。如:
//eg1
layer.alert('只想簡(jiǎn)單的提示');
//eg2
layer.alert('加了個(gè)圖標(biāo)', {icon: 1}); //這時(shí)如果你也還想執(zhí)行yes回調(diào),可以放在第三個(gè)參數(shù)中。
//eg3
layer.alert('有了回調(diào)', function(index){
//do something
layer.close(index);
});
類似系統(tǒng)confirm,但卻遠(yuǎn)勝confirm,另外它不是和系統(tǒng)的confirm一樣阻塞
你需要把交互的語句放在回調(diào)體中。同樣的,它的參數(shù)也是自動(dòng)補(bǔ)齊的。
//eg1
layer.confirm('is not?', {icon: 3, title:'提示'}, function(index){
//do something
layer.close(index);
});
//eg2
layer.confirm('is not?', function(index){
//do something
layer.close(index);
});
我在源碼中有了相對(duì)較大的篇幅來定制了這個(gè)msg,目的是想將其打造成露臉率最高的提示框。而事實(shí)上我的確也在大量地使用它。因?yàn)樗?jiǎn)單,而且足夠得自覺,它不僅占據(jù)很少的面積,而且默認(rèn)還會(huì)3秒后自動(dòng)消失
所有這一切都決定了我對(duì)msg的愛。因此
我賦予了她許多可能
在外形方面,它堅(jiān)持簡(jiǎn)陋的變化,在作用方面,他堅(jiān)持零用戶操作。而且它的參數(shù)也是機(jī)會(huì)自動(dòng)補(bǔ)齊的。
//eg1
layer.msg('只想弱弱提示');
//eg2
layer.msg('有表情地提示', {icon: 6});
//eg3
layer.msg('關(guān)閉后想做些什么', function(){
//do something
});
//eg
layer.msg('同上', {
icon: 1,
time: 2000 //2秒關(guān)閉(如果不配置,默認(rèn)是3秒)
}, function(){
//do something
});
type:3的深度定制。load并不需要你傳太多的參數(shù),但如果你不喜歡默認(rèn)的加載風(fēng)格,你還有選擇空間。icon支持傳入0-2
如果是0,無需傳。另外特別注意一點(diǎn):load默認(rèn)是不會(huì)自動(dòng)關(guān)閉的
,因?yàn)槟阋话銜?huì)在ajax回調(diào)體中關(guān)閉它。
//eg1
var index = layer.load();
//eg2
var index = layer.load(1); //換了種風(fēng)格
//eg3
var index = layer.load(2, {time: 10*1000}); //又換了種風(fēng)格,并且設(shè)定最長(zhǎng)等待10秒
//關(guān)閉
layer.close(index);
type:4的深度定制。也是我本人比較喜歡的一個(gè)層類型,因?yàn)樗鼡碛泻蚼sg一樣的低調(diào)和自覺,而且會(huì)智能定位
,即靈活地判斷它應(yīng)該出現(xiàn)在哪邊。默認(rèn)是在元素右邊彈出。
//eg1
layer.tips('只想提示地精準(zhǔn)些', '#id');
//eg 2
$('#id').on('click', function(){
var that = this;
layer.tips('只想提示地精準(zhǔn)些', that); //在元素的事件回調(diào)體中,follow直接賦予this即可
});
//eg 3
layer.tips('在上面', '#id', {
tips: 1
});
上面主要是一些彈層的調(diào)用方式,而下面介紹的是一些輔助性的方法
關(guān)于它似乎沒有太多介紹的必要,唯一讓你疑惑的,可能就是這個(gè)index
了吧
//當(dāng)你想關(guān)閉當(dāng)前頁的某個(gè)層時(shí)
var index = layer.open();
var index = layer.alert();
var index = layer.load();
var index = layer.tips();
//正如你看到的,每一種彈層調(diào)用方式,都會(huì)返回一個(gè)index
layer.close(index); //此時(shí)你只需要把獲得的index,輕輕地賦予layer.close即可
//當(dāng)你在iframe頁面關(guān)閉自身時(shí)
var index = parent.layer.getFrameIndex(window.name); //先得到當(dāng)前iframe層的索引
parent.layer.close(index); //再執(zhí)行關(guān)閉
如果你很懶,你不想去獲取index
你只想關(guān)閉。那么closeAll真的可以幫上你。如果你不指向?qū)宇愋偷脑?,它?huì)銷毀掉當(dāng)前頁所有的layer層。當(dāng)然,如果你只想關(guān)閉某個(gè)類型的層,那么你可以:
layer.closeAll(); //瘋狂模式,關(guān)閉所有層
layer.closeAll('dialog'); //關(guān)閉信息框
layer.closeAll('page'); //關(guān)閉所有頁面層
layer.closeAll('iframe'); //關(guān)閉所有的iframe層
layer.closeAll('loading'); //關(guān)閉加載層
layer.closeAll('tips'); //關(guān)閉所有的tips層
cssStyle允許你傳入任意的css屬性
//重新給指定層設(shè)定width、top等
layer.style(index, {
width: '1000px',
top: '10px'
});
使用方式:layer.title('標(biāo)題變了', index)
當(dāng)你試圖在當(dāng)前頁獲取iframe頁的DOM元素時(shí),你可以用此方法。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頁的窗口對(duì)象,執(zhí)行iframe頁的方法:iframeWin.method();
console.log(body.html()) //得到iframe頁的body內(nèi)容
body.find('input').val('Hi,我是從父頁來的')
}
});
此方法一般用于在iframe頁關(guān)閉自身時(shí)用到。
//假設(shè)這是iframe頁
var index = parent.layer.getFrameIndex(window.name); //先得到當(dāng)前iframe層的索引
parent.layer.close(index); //再執(zhí)行關(guān)閉
調(diào)用該方法時(shí),iframe層的高度會(huì)重新進(jìn)行適應(yīng)
似乎不怎么常用的樣子。使用方式:layer.iframeSrc(index, 'http://sentsin.com')
非常強(qiáng)大的一個(gè)方法,雖然一般很少用。但是當(dāng)你的頁面有很多很多l(xiāng)ayer窗口,你需要像Window窗體那樣,點(diǎn)擊某個(gè)窗口,該窗體就置頂在上面,那么setTop可以來輕松實(shí)現(xiàn)。它采用巧妙的邏輯,以使這種置頂?shù)男阅苓_(dá)到最優(yōu)。
//通過這種方式彈出的層,每當(dāng)它被選擇,就會(huì)置頂。
layer.open({
type: 2,
shade: false,
area: '500px',
maxmin: true,
content: 'http://www.layui.com',
zIndex: layer.zIndex, //重點(diǎn)1
success: function(layero){
layer.setTop(layero); //重點(diǎn)2
}
});
(這三個(gè)醬油又一次被并列 ==。)一般用于在自定義元素上觸發(fā)最大化、最小化和全屏。
請(qǐng)注意,從2.3開始,無需通過layer.config來加載拓展模塊。如果您是之前版本,則需通過下述方式來加載。
layer.config({
extend: 'extend/layer.ext.js'
});
prompt的參數(shù)也是向前補(bǔ)齊的。options不僅可支持傳入基礎(chǔ)參數(shù),還可以傳入prompt專用的屬性。當(dāng)然,也可以不傳。yes攜帶value 表單值
index 索引
elem 表單元素
//prompt層新定制的成員如下
{
formType: 1, //輸入框類型,支持
0(文本)默認(rèn)
1(密碼)
2(多行文本)
value: '', //初始時(shí)的值,默認(rèn)空字符
maxlength: 140, //可輸入文本的最大長(zhǎng)度,默認(rèn)500
}
//例子1
layer.prompt(function(value, index, elem){
alert(value); //得到value
layer.close(index);
});
//例子2
layer.prompt({
formType: 2,
value: '初始值',
title: '請(qǐng)輸入值'
}, function(value, index, elem){
alert(value); //得到value
layer.close(index);
});
tab層只單獨(dú)定制了一個(gè)成員,即tab: []
,這個(gè)好像沒有什么可介紹的,簡(jiǎn)單粗暴看例子:
layer.tab({
area: ['600px', '300px'],
tab: [{
title: 'TAB1',
content: '內(nèi)容1'
}, {
title: 'TAB2',
content: '內(nèi)容2'
}, {
title: 'TAB3',
content: '內(nèi)容3'
}]
});
相冊(cè)層,也可以稱之為圖片查看器。它的出場(chǎng)動(dòng)畫從layer內(nèi)置的動(dòng)畫類型中隨機(jī)展現(xiàn)。photos支持傳入json和直接讀取頁面圖片兩種方式。如果是json傳入,如下:
$.getJSON('/jquery/layer/test/photos.json', function(json){
layer.photos({
photos: json
,shift: 5 //0-6的選擇,指定彈出圖片動(dòng)畫類型,默認(rèn)隨機(jī)
});
});
//而返回的json需嚴(yán)格按照如下格式:
{
"title": "", //相冊(cè)標(biāo)題
"id": 123, //相冊(cè)id
"start": 0, //初始顯示的圖片序號(hào),默認(rèn)0
"data": [ //相冊(cè)包含的圖片,數(shù)組格式
{
"alt": "圖片名",
"pid": 666, //圖片id
"src": "", //原圖地址
"thumb": "" //縮略圖地址
}
]
}
如果是直接從頁面中獲取圖片,那么需要指向圖片的父容器,并且你的img可以設(shè)定一些規(guī)定的屬性(但不是必須的)。
//HTML示例
<div id="layer-photos-demo" class="layer-photos-demo">
<img layer-pid="圖片id,可以不寫" layer-src="大圖地址" src="縮略圖" alt="圖片名">
<img layer-pid="圖片id,可以不寫" layer-src="大圖地址" src="縮略圖" alt="圖片名">
</div>
//調(diào)用示例
layer.ready(function(){ //為了layer.ext.js加載完畢再執(zhí)行
layer.photos({
photos: '#layer-photos-demo'
,shift: 5 //0-6的選擇,指定彈出圖片動(dòng)畫類型,默認(rèn)隨機(jī)
});
});
看看一個(gè)實(shí)例唄:
第二種方式的圖片查看器顯然更加簡(jiǎn)單,因?yàn)闊o需像第一種那樣返回規(guī)定的json,但是他們還是有各自的應(yīng)用場(chǎng)景的,你可以按照你的需求進(jìn)行選擇。另外,photos還有個(gè)tab回調(diào),切換圖片時(shí)觸發(fā)。
layer.photos({
photos: json/選擇器,
tab: function(pic, layero){
console.log(pic) //當(dāng)前圖片的一些信息
}
});
合理地設(shè)定基礎(chǔ)參數(shù),合理地選擇內(nèi)置方法,合理地運(yùn)用拓展方法,合理的心態(tài),合理地閱讀,只要一切都在合理的前提下,你才會(huì)感知到layer許許多多令人愉悅的地方,她真的是否如你所愿,取決于你對(duì)她了解的深遠(yuǎn)。愿layer能給你的web開發(fā)帶來一段美妙的旅程。相信這一版的API文檔,也會(huì)給你帶來全新的便捷。別忘了在線調(diào)試。
layer文檔請(qǐng)以本頁為準(zhǔn),之前的頁面(http://layer.layui.com/api.html)不再維護(hù)。
Layui - 用心與你溝通
更多建議: