一、介紹
在使用layui之前,我們先要了解一下layui是什麼? 我覺得用作者賢心的一句話來概括就好了:為後端程式設計師設計的前端框架。 更加詳細的描述是:這是一個封裝了各種css和js、Ajax等等的前端框架,其封裝程度之高,有時甚至對程式設計師來說不大友好。但對於前端技術一般的人來說,layui不失為一個好的工具。
二、開始使用layui
官網地址:layui 使用方式:下載後匯入專案,然後引用即可
<script th:src="@{/jquery-3.3.1.min.js}"></script>
<script th:src="@{/layui/layui.js}"></script>
<link rel="stylesheet" th:href="@{/layui/css/layui.css}" />
複製程式碼
先要引用jquery,然後再引用layui.js和layui.css。 為什麼一定要本地呢?沒有CDN? 上面說了,layui封裝得太“好”了,程式設計師的自主性受到限制,這個時候需要修改layui的原始碼,比如css的樣式——這也是layui的正確用法,而不只是簡單地使用。
layui的模組:layui是模組化的,包括form,layer,laydate,laypage等等模組,正是這些模組組成了完整的layui。使用layui的時候,需要指明自己使用的模組。
開始使用layui:
<script>
layui.use(['mod1', 'mod2'],function(args){
var mo1 = layui.mod1
,mo2 = layui.mod2;
});
</script>
複製程式碼
三、layui表單
下面以HTML中最常見的form表單來演示layui的使用。 html部分:
<fieldset class="layui-elem-field layui-field-title" style="margin-top:30px;">
<legend style="text-align:center;">註冊新賬戶</legend>
</fieldset>
<form id="reform" class="layui-form layui-form-pane" th:action="@{/user/register.html}" method="POST">
<div class="layui-form-item">
<label class="layui-form-label">郵箱</label>
<div class="layui-input-block">
<input type="text" name="email" lay-verify="email" placeholder="請輸入" autocomplete="off" class="layui-input" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">使用者名稱</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="required" placeholder="請輸入" autocomplete="off" class="layui-input" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密碼</label>
<div class="layui-input-block">
<input type="password" name="password" lay-verify="pass" placeholder="請輸入密碼" autocomplete="off" class="layui-input" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">重複密碼</label>
<div class="layui-input-block">
<input type="password" name="repassword" lay-verify="repass" placeholder="請輸入密碼" autocomplete="off" class="layui-input" />
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid" lay-submit="" lay-filter="demo1">註冊</button>
</div>
<div style="text-align:center;margin-top:15px;">
<input type="checkbox" name="agree" lay-skin="primary" checked=""/>
我已閱讀並同意
<a href="#" id="agreementLink">《隱私條款》</a>
</div>
</form>
複製程式碼
javscript部分:
<!-- js for form input and submit -->
<script>
layui.use(['form'], function(){
var form = layui.form;
//自定義驗證規則
form.verify({
pass: [/(.+){6,12}$/, '密碼必須6到12位']
,repass:function(value){
var pvalue = $("input[name='password']").val();
if(pvalue!=value){
return "兩次輸入的密碼不一致";
}
}
});
//監聽提交
form.on('submit(demo1)', function(data){
var agreeChecked = data.field.agree;
if(agreeChecked!="on"){
msg("未同意隱私條款");
return false;//阻止表單提交
}
});
});
</script>
複製程式碼
效果圖:
四、layui彈出層
下面講述一下彈出層,彈出可以說是一個很常見的東西了,但基礎的HTML/JS只有醜陋的alert("")方法,layui包含了一個叫做layer的彈出層模組。 使用layer的兩種方式:一、像上面使用form模組一樣,layui.use宣告,然後在use後面的function裡使用; 二、匯入獨立的layer模組檔案,然後就可以直接使用; 關於第一種方式不予討論,這裡介紹一下第二種方式。
首先,從layer官網下載layer的檔案,解壓並放入自己的專案下,然後
<script th:src="@{/layer/layer.js}"></script>
類似這樣的形式引入layer.js檔案。
Example:
function msg(msg){
//墨綠深藍風
layer.alert(msg, {
title:'訊息'
,skin: 'layui-layer-molv' //樣式類名
,closeBtn: 0
},function(index){
layer.close(index);//關閉
});
}
複製程式碼
效果圖:
layer不僅僅可以彈出提示框,還可以做到一些有趣且實用的動態效果,甚至可以載入一個彈出的HTML介面出來。更多的東西請參考layer官網。
五、layui檔案上傳
下面介紹一下layui的檔案上傳,即upload模組
<!-- 上傳圖片-->
<div class="layui-tab-item">
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-normal" id="headButton">
<i class="layui-icon"></i>選擇圖片
</button>
<button type="button" class="layui-btn" id="headAddButton">開始上傳</button>
</div>
<div class="layui-inline layui-word-aux" style="margin-top:20px;">
<label>注意:支援jpg,png和gif格式,檔案大小應小於10MB</label>
</div>
</div>
複製程式碼
<!-- 檔案上傳 -->
<script>
layui.use('upload',function(){
var $ = layui.jquery
,upload = layui.upload;
//選完檔案後不自動上傳
upload.render({
elem: '#headButton'
,url: getRootPath()+'/user/uploadPicture'
,size: 10*1024 //10*1024KB = 10MB
,accept: 'images'
,acceptMime: 'image/jpg,image/png,image/gif'
,auto: false
,bindAction: '#headAddButton'
,done: function(res){
msg(res.msg);
//重新整理頭像地址
var resUrl = res.url;
if(resUrl!=""){
document.getElementById("userImg").src=getRootPath()+ resUrl;
}
}
});
});
</script>
複製程式碼
後端(java-spring-controller類中):
@Autowired
FileService fileService;
@RequestMapping(path="/uploadPicture",method= {RequestMethod.POST})
@ResponseBody
public Map<String,Object> uploadFile(@RequestParam("file")MultipartFile file,HttpServletRequest request){
Map<String,Object> map = new HashMap<String,Object>();
String path = fileService.uploadImg(file, "head");//service層儲存檔案
//返回值,必須按照這樣寫——要符合upload模組的回撥介面才行
map.put("code", 0); //0表示成功
map.put("msg","上傳成功");
map.put("data", "");
map.put("url", path);
return map;
}
複製程式碼
upload上傳介面和返回值:
//上傳介面
upload.render({
elem: '#id'
,url: '/api/upload/' //必填項
,method: '' //可選項。HTTP型別,預設post
,data: {} //可選項。額外的引數,如:{id: 123, abc: 'xxx'}
});
//返回值
{
"code": 0
,"msg": ""
,"data": {
"src": "http://cdn.layui.com/123.jpg"
}
}
複製程式碼
有關Javaweb檔案上傳可以參照我的另一篇部落格:輕鬆實現Javaweb檔案上傳
效果圖:
layui的upload模組能夠在前端進行配置檔案大小、格式、預覽,還可以做到批量上傳、重傳功能。更多的內容請參照layui的upload模組。
六、layui分頁
在網站中也經常會用到分頁,後端的分頁是容易實現的,但對於前端來說就不是那麼理想了。layui提供了自己的分頁模組——laypage。
<div id="allNewsDiv"></div>
<div id="demo"></div>
複製程式碼
layui.use(['element','laypage'], function(){
var element = layui.element
,laypage = layui.laypage;
$.ajax({
url:getRootPath()+'/news/count'
,type:'GET'
,async:true //false表示非非同步,即同步,即請求處理完畢後才能返回;
,data:{"page":1, "limit":10}
,dataType:'json'
,success:function(alldata){
var numbers = alldata.count;
//總頁數大於頁碼總數
laypage.render({
elem: 'demo'
,count: numbers//資料總數
,first: '首頁'
,last: '尾頁'
,jump: function(obj){
$.ajax({
url:getRootPath()+'/news/list'
,type:'GET'
,async:true
,data:{"page":obj.curr, "limit":obj.limit}
,dataType:'json'
,success:function(data){
var shtml = getNewsContentHTML(data);//js處理資料並填充div
document.getElementById("allNewsDiv").innerHTML=shtml;
}
});
}
});
}
});
});
複製程式碼
如上,分頁跳轉的事件是在jump中進行的,在裡面編寫AJAX請求,通過jump的obj引數獲得page和limit引數,然後在請求執行完畢並返回資料後進行處理即可
七、layui資料表格
表格時常見的功能,但js拼接HTML表格算是一件比較繁瑣且容易出錯的事情。
<!-- team分頁table -->
<table class="layui-hide" id="teamTable" lay-filter="teamTool">
</table>
複製程式碼
<script>
layui.use('table',function(){
var table = layui.table;//模組宣告
table.render({
elem:'#teamTable'
,method:'get'
,url:getRootPath()+'/team/admin/list' //返回一個List<TeamMember>的list
,cellMinWidth:80
,cols:[[
{field:'id', title:'ID', sort:true}
,{field:'name', title:'姓名'}
,{field:'birth', title:'出生日期'} //這裡的templet值時模板元素的選擇器
,{field:'position', title:'身份'}
,{field:'information', title:'個人資訊'}
,{field:'right', title:'操作', toolbar:'#barDemo'}
]]
,page:true //開啟分頁
});
//監聽工具條
table.on('tool(teamTool)', function(obj){ //注:tool是工具條事件名,test是table原始容器的屬性 lay-filter="對應的值"
var data = obj.data; //獲得當前行資料
var layEvent = obj.event; //獲得 lay-event 對應的值(也可以是表頭的 event 引數對應的值)
var tr = obj.tr; //獲得當前行 tr 的DOM物件
console.log("id:"+data.id);
if(layEvent === 'detail'){ //檢視
//do something
layer.msg('ID:'+ data.id + ' 的檢視操
} else if(layEvent === 'del'){ //刪除
layer.confirm('確認刪除人員資訊?', function(index){
//do something
layer.close(index);
});
} else if(layEvent === 'edit'){ //編輯
//do something
}
});
});
</script>
<!-- tools -->
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">檢視</a>
<a class="layui-btn layui-btn-xs" lay-event="edit">編輯</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">刪除</a>
</script>
複製程式碼
效果圖:
好了,有關layui的介紹就到此為止,更加詳細和深入的瞭解請移步layui官網。