剛入公司不久,就開始作項目了,最後仍是選擇用layui來作前端的頁面,一來是能夠自適應,二來是用框架比較方便,簡潔。css
layui 是一款採用自身模塊規範編寫的情懷級前端UI框架,遵循原生HTML/CSS/JS的書寫與組織形式,門檻極低,拿來即用。其外在極簡,卻又不失飽滿的內在,體積輕盈,組件豐盈,從核心代碼到API的每一處細節都通過精心雕琢,很是適合界面的快速開發。layui 首個版本發佈於2016年金秋,她區別於那些基於MVVM底層的UI框架,卻並不是逆道而行,而是信奉返璞歸真之道。準確地說,她更可能是爲服務端程序員量身定作,你無需涉足各類前端工具的複雜配置,只需面對瀏覽器自己,讓一切你所須要的元素與交互,從這裏信手拈來。layui 兼容人類正在使用的所有瀏覽器(IE6/7除外),可做爲PC端後臺系統與前臺界面的速成開發方案。html
能夠在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>
<!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); }) })
第一步:確認模塊名,假設爲: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'); //加載入口
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來加載拓展模塊。
類型:Number,默認:0
layer提供了5種層類型。可傳入的值有:0(信息框,默認)1(頁面層)2(iframe)3(加載層)4(tips層)。若你caiyonglayer.open({type:1})方式調用,則type爲必填項(信息框除外)
類型:Number,默認:0
layer提供了5種層類型。可傳入的值有:0(信息框,默認)1(頁面層)2(iframe層)3(加載層)4(tips層)。 若你採用layer.open({type: 1})方式調用,則type爲必填項(信息框除外)
類型: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默認狀況下不用設置。但若是你不想垂直水平居中,你還能夠進行如下賦值:
//eg1 layer.alert('酷斃了', {icon: 1}); //eg2 layer.msg('不開心。。', {icon: 5}); //eg3 layer.load(1); //風格1的加載
類型: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 開啓該代碼可禁止點擊該按鈕關閉 } });
類型:String,默認:r
你能夠快捷定義按鈕的排列位置,btnAlign的默認值爲r,即右對齊。該參數可支持的賦值以下:
類型:String/Boolean,默認:1
layer提供了兩種風格的關閉按鈕,可經過配置1和2來展現,若是不顯示,則closeBtn: 0
類型:String/Array/Boolean,默認:0.3
即彈層外區域。默認是0.3透明度的黑色背景('#000')。若是你想定義別的顏色,能夠shade: [0.8, '#393D49'];若是你不想顯示遮罩,能夠shade: 0
類型:Boolean,默認:false
若是你的shade是存在的,那麼你能夠設定shadeClose來控制點擊彈層外區域關閉。
類型:Number,默認:0
默認不會自動關閉。當你想自動關閉時,能夠time: 5000,即表明5秒後自動關閉,注意單位是毫秒(1秒=1000毫秒)
類型:String,默認:空字符
設置該值後,不論是什麼類型的層,都只容許同時彈出一個。通常用於頁面層和iframe層模式
類型:Number,默認:0
咱們的出場動畫所有采用CSS3。這意味着除了ie6-9,其它全部瀏覽器都是支持的。目前anim可支持的動畫類型有0-6 若是不想顯示動畫,設置 anim: -1 便可。另外須要注意的是,3.0以前的版本用的是 shift 參數
類型:Boolean,默認:true
默認狀況下,關閉層時會有一個過分動畫。若是你不想開啓,設置 isOutAnim: false 便可
類型:Boolean,默認:false
該參數值對type:1和type:2有效。默認不顯示最大小化按鈕。須要顯示配置maxmin: true便可
類型:Boolean,默認:true
即鼠標滾動時,層是否固定在可視區域。若是不想,設置fixed: false便可
類型:Boolean,默認:true
默認狀況下,你能夠在彈層右下角拖動來拉伸尺寸。若是對指定的彈層屏蔽該功能,設置 false便可。該參數對loading、tips層無效
類型:Function,默認:null
當你拖拽彈層右下角對窗體進行尺寸調整時,若是你設定了該回調,則會執行。回調返回一個參數:當前層的DOM對象
resizing: function(layero){ console.log(layero); }
類型:Boolean,默認:true
默認容許瀏覽器滾動,若是設定scrollbar: false,則屏蔽
類型:Number,默認:360
請注意:只有當area: 'auto'時,maxWidth的設定纔有效。
類型:Number,默認:無
請注意:只有當高度自適應時,maxHeight的設定纔有效
類型:,默認:19891014(賢心生日 0.0)
通常用於解決和其它組件的層疊衝突。