layui知識

  剛入公司不久,就開始作項目了,最後仍是選擇用layui來作前端的頁面,一來是能夠自適應,二來是用框架比較方便,簡潔。css

先看下Layui的介紹:

layui 是一款採用自身模塊規範編寫的情懷級前端UI框架,遵循原生HTML/CSS/JS的書寫與組織形式,門檻極低,拿來即用。其外在極簡,卻又不失飽滿的內在,體積輕盈,組件豐盈,從核心代碼到API的每一處細節都通過精心雕琢,很是適合界面的快速開發。layui 首個版本發佈於2016年金秋,她區別於那些基於MVVM底層的UI框架,卻並不是逆道而行,而是信奉返璞歸真之道。準確地說,她更可能是爲服務端程序員量身定作,你無需涉足各類前端工具的複雜配置,只需面對瀏覽器自己,讓一切你所須要的元素與交互,從這裏信手拈來。layui 兼容人類正在使用的所有瀏覽器(IE6/7除外),可做爲PC端後臺系統與前臺界面的速成開發方案。html

獲取Layui

能夠在http://www.layui.com/ 下載到 layui 的最新版,它通過了自動化構建,更適合用於生產環境。前端

快速上手

得到 layui 後,將其完整地部署到你的項目目錄(或靜態資源服務器),你只須要引入下述兩個文件:程序員

./layui/css/layui.css
./layui/layui.js //提示:若是是採用非模塊化方式(最下面有講解),此處可換成:./layui/layui.all.js

這兩個文件是最基本的也是最重要的。由於他們(好比各模塊)都是在最終使用的時候纔會自動加載。這是一個基本的入門頁面web

模塊化方式

我的建議推薦使用遵循 layui 的模塊規範創建一個入口文件,並經過 layui.use() 方式來加載該入口文件,以下所示:數組

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <title>開始使用layui</title>
  <link rel="stylesheet" href="../layui/css/layui.css">
</head>
<body>
 
<!-- 你的HTML代碼 -->
 
<script src="../layui/layui.js"></script>
<script>
//通常直接寫在一個js文件中
layui.use(['layer', 'form'], function(){
  var layer = layui.layer
  ,form = layui.form;
  
  layer.msg('Hello World');
});
</script> 
</body>
</html>

非模塊化方式(即全部的模塊一次性所有加載)

若是你並不喜歡 layui 的模塊化組織方式,你徹底能夠毅然採用「一次性加載」的方式,咱們將 layui.js 及全部模塊單獨打包合併成了一個完整的js文件,用的時候直接引入這一個文件便可。當你採用這樣的方式時,你無需再經過 layui.use() 方法加載模塊,直接使用便可,
以下:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <title>非模塊化方式使用layui</title>
  <link rel="stylesheet" href="../layui/css/layui.css">
</head>
<body>
 
<!-- 你的HTML代碼 -->
 
<script src="../layui/layui.all.js"></script>
<script>
//因爲模塊都一次性加載,所以不用執行 layui.use() 來加載對應模塊,直接使用便可:
;!function(){
  var layer = layui.layer
  ,form = layui.form;
  
  layer.msg('Hello World');
}();
</script> 
</body>
</html>

模塊化與非模塊化

我的比較喜歡模塊化,由於模塊化是你須要的時候就加載,假如是非模塊化的話,一開始就所有加載了全部的js文件,但實際上,有些頁面用到的模塊可能不多,並不須要加載那麼大的js文件,因此仍是推薦使用模塊化的方式,非模塊化的方式雖然方便,但對用戶來講是不太好的。瀏覽器

模塊規範

layui的模塊是基於layui.js內部實現的異步模塊加載方式,並不遵循AMD,而是本身定義了一套更輕量的模塊規模。而且這種方式在通過了大量的實戰後,成爲layui最核心的模塊加載引擎。服務器

預先加載

Layui的模塊加載採用核心的layui.use(mods,callback)方法,當你JS須要用到layui模塊的時候,咱們推薦使用採用預先加載,由於這樣能夠避免處處寫layui.use,這樣很麻煩,應該在最外層定義:框架

/*
  Demo1.js
  使用Layui的form和upload模塊
*/
layui.use(['form', 'upload'], function(){  //若是隻加載一個模塊,能夠不填數組。如:layui.use('form')
  var form = layui.form //獲取form模塊
  ,upload = layui.upload; //獲取upload模塊
  
  //監聽提交按鈕
  form.on('submit(test)', function(data){
    console.log(data);
  });
  
  //實例化一個上傳控件
  upload({
    url: '上傳接口url'
    ,success: function(data){
      console.log(data);
    }
  })
});

按需加載(此方法不推薦使用)

若是你是一位有強迫症的人,你對網站的性能有極致的要求,你並不想預先加載所需的模塊,而是觸發一個指令或動做的時候,才氣加載模塊,那麼,這是能夠的。你不用在你的JS最外層區包裹這一個那麼大的layui.use,你只須要:異步

button.addEvent('click',function(){
   layui.use('laytp1',function(laytp1){//注意:屢次調用use並不會重複加載laytpl.js,Layui內部有作模塊cache處理。
        var html=laytp1('').render({});
        console.log(html);
    }) 
})

注意:若是你的JS中須要大量用到模塊,我的建議不推薦您採用這種加載方式,由於這意味着你要寫不少layui.use(),代碼可維護性不高。

建議仍是採用:預先加載。即一個JS文件中,寫一個use便可。

擴展一個Layui的三個步驟:

第一步:確認模塊名,假設爲:test.js文件放入項目任意目錄下(注意:不用放入layui目錄)

第二步:編寫test.js以下:

layui.define(function(exports){ //提示:模塊也能夠依賴其它模塊,如:layui.define('layer', callback);
  var obj = {
    hello: function(str){
      alert('Hello '+ (str||'test'));
    }
  };
  
  //輸出test接口
  exports('test', obj);
});   

第三步:設定擴展模塊所在的目錄,而後就能夠在別的JS文件中使用

layui.config({
  base: '/res/js/' //假設這是test.js所在的目錄
}).extend({ //設定模塊別名
  test: 'test' //若是test.js是在根目錄,也能夠不用設定別名
  ,test1: 'admin/test1' //相對於上述base目錄的子目錄
});
 
//使用test
layui.use('test', function(){
  var test = layui.test;
  
  test.hello('World!'); //彈出Hello World!
});
//使用test1
layui.use('test1', function(){
  var test = layui.test1;
  
  //……
});

全局配置

方法:layui.config(options)

layui.config({
  base: 'js/' //你存放新模塊的目錄,注意,不是layui的模塊目錄
}).use('index'); //加載入口

 layui彈出層

layer至今仍做爲layui的表明做,它的愛衆普遍並不是偶然,而是這數年來的堅持、不棄的執念,講那些不屑的眼光轉化爲應得的尊重,不斷完善和維護、不斷建設和提高社區服務,在web開發者的圈子裏口口相傳,乃至於成爲今天的layui最強勁的源動力。目前,Layui已成爲國內最多人使用的Web彈層組件,GitHub天然Start 5000+,官網累計下載量達50W+,大概有30萬不一樣規模的Web平臺使用過layer。

之因此列舉上面這些數字,並不是是在誇誇其談,而是懂layer的人都知道,這是一種怎樣不易的沉澱。而因爲layer在layui體系中的位置比較特殊,甚至讓不少人都是誤覺得layui=layer ui,因此再次強調layer只是做爲layui的一個彈層模塊,因爲其用戶基量數較大,因此至今把它做爲獨立組件來維護,不過要注意的是:不管是獨立的layer,仍是做爲內置模塊的layer,文檔都以本頁爲準。

模塊加載名稱:layer,獨立版本:http://layer.layui.com/

使用場景

因爲layer能夠獨立使用,也能夠經過Layui模塊化使用。因此請按照您的實際需求來選擇。

做爲獨立組件使用layer

<script src="layer.js"></script>
<script>
layer.msg('hello'); 
</script>

 在layui中使用layer

layui.use('layer', function(){
  var layer = layui.layer;
  
  layer.msg('hello');
});  

除了上面有所不一樣,其它都徹底一致。

基礎參數

咱們提到的基礎參數主要指調用方法時用到的配置項,如:layer.open({content:"}) layer.msg(",{time:3})等,其中的content和time便是基礎參數,以鍵值形式存在,基礎參數可合理應用於任何層類型中,您不須要全部都要去配置,大多數都是可選的。而其中的layer.open、layer.msg就是內置方法。須要注意的是:從2.3開始,無需經過layer.config來加載拓展模塊。

type-基本層類型

類型:Number,默認:0

layer提供了5種層類型。可傳入的值有:0(信息框,默認)1(頁面層)2(iframe)3(加載層)4(tips層)。若你caiyonglayer.open({type:1})方式調用,則type爲必填項(信息框除外)

title - 標題

類型:Number,默認:0

layer提供了5種層類型。可傳入的值有:0(信息框,默認)1(頁面層)2(iframe層)3(加載層)4(tips層)。 若你採用layer.open({type: 1})方式調用,則type爲必填項(信息框除外)

content - 內容

類型: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
});       

skin - 樣式類名

類型: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調試工具,定義更多樣式控制層更多的區域。    

area - 寬高

類型:String/Array,默認:'auto'

在默認狀態下,layer是寬高都自適應的,但當你只想定義寬度時,你能夠area: '500px',高度仍然是自適應的。當你寬高都要定義時,你能夠area: ['500px', '300px']

offset - 座標

類型:String/Array,默認:垂直水平居中

offset默認狀況下不用設置。但若是你不想垂直水平居中,你還能夠進行如下賦值:

icon - 圖標。信息框和加載層的私有參數

//eg1
layer.alert('酷斃了', {icon: 1});
//eg2
layer.msg('不開心。。', {icon: 5});
//eg3
layer.load(1); //風格1的加載

btn - 按鈕

類型:String/Array,默認:'確認'

信息框模式時,btn默認是一個確認按鈕,其它層類型則默認不顯示,加載層和tips層則無效。當您只想自定義一個按鈕時,你能夠btn: '我知道了',當你要定義兩個按鈕時,你能夠btn: ['yes', 'no']。固然,你也能夠定義更多按鈕,好比:btn: ['按鈕1', '按鈕2', '按鈕3', …],按鈕1的回調是yes,而從按鈕2開始,則回調爲btn2: function(){},以此類推。如:

//eg1       
layer.confirm('納尼?', {
  btn: ['按鈕一', '按鈕二', '按鈕三'] //能夠無限個按鈕
  ,btn3: function(index, layero){
    //按鈕【按鈕三】的回調
  }
}, function(index, layero){
  //按鈕【按鈕一】的回調
}, function(index){
  //按鈕【按鈕二】的回調
});
 
//eg2
layer.open({
  content: 'test'
  ,btn: ['按鈕一', '按鈕二', '按鈕三']
  ,yes: function(index, layero){
    //按鈕【按鈕一】的回調
  }
  ,btn2: function(index, layero){
    //按鈕【按鈕二】的回調
    
    //return false 開啓該代碼可禁止點擊該按鈕關閉
  }
  ,btn3: function(index, layero){
    //按鈕【按鈕三】的回調
    
    //return false 開啓該代碼可禁止點擊該按鈕關閉
  }
  ,cancel: function(){ 
    //右上角關閉回調
    
    //return false 開啓該代碼可禁止點擊該按鈕關閉
  }
});

btnAlign - 按鈕排列

類型:String,默認:r

你能夠快捷定義按鈕的排列位置,btnAlign的默認值爲r,即右對齊。該參數可支持的賦值以下:

closeBtn - 關閉按鈕

類型:String/Boolean,默認:1

layer提供了兩種風格的關閉按鈕,可經過配置12來展現,若是不顯示,則closeBtn: 0

shade - 遮罩

類型:String/Array/Boolean,默認:0.3

即彈層外區域。默認是0.3透明度的黑色背景('#000')。若是你想定義別的顏色,能夠shade: [0.8, '#393D49'];若是你不想顯示遮罩,能夠shade: 0

shadeClose - 是否點擊遮罩關閉

類型:Boolean,默認:false

若是你的shade是存在的,那麼你能夠設定shadeClose來控制點擊彈層外區域關閉。

time - 自動關閉所需毫秒

類型:Number,默認:0

默認不會自動關閉。當你想自動關閉時,能夠time: 5000,即表明5秒後自動關閉,注意單位是毫秒(1秒=1000毫秒)

id - 用於控制彈層惟一標識

類型:String,默認:空字符

設置該值後,不論是什麼類型的層,都只容許同時彈出一個。通常用於頁面層和iframe層模式

anim - 彈出動畫

類型:Number,默認:0

咱們的出場動畫所有采用CSS3。這意味着除了ie6-9,其它全部瀏覽器都是支持的。目前anim可支持的動畫類型有0-6 若是不想顯示動畫,設置 anim: -1 便可。另外須要注意的是,3.0以前的版本用的是 shift 參數

isOutAnim - 關閉動畫 (layer 3.0.3新增)

類型:Boolean,默認:true

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

maxmin - 最大最小化

類型:Boolean,默認:false

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

fixed - 固定

類型:Boolean,默認:true

即鼠標滾動時,層是否固定在可視區域。若是不想,設置fixed: false便可

resize - 是否容許拉伸

類型:Boolean,默認:true

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

resizing - 監聽窗口拉伸動做

類型:Function,默認:null

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

resizing: function(layero){
  console.log(layero);
}   

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

類型:Boolean,默認:true

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

maxWidth - 最大寬度

類型:Number,默認:360

請注意:只有當area: 'auto'時,maxWidth的設定纔有效。

maxHeight - 最大高度

類型:Number,默認:無

請注意:只有當高度自適應時,maxHeight的設定纔有效

zIndex - 層疊順序

類型:,默認:19891014(賢心生日 0.0)

通常用於解決和其它組件的層疊衝突。

相關文章
相關標籤/搜索