LayUI

目录

一、LayUI简介

A.LayUI是什么?

B. 主要模块&目录结构

C.layui、easyui与bootstrap的对比

 layui和bootstrap的比较

D.layui和easyui对比  

二、配置环境&案例

MySQL中所用表:⬇⬇⬇⬇⬇

先将下载的LayUI导入

 在创建一个Demo引入LayUI

案例:需求-->我输入一个就打出一个,将这个hello world变成活的🙌

 Demo1源码

三、自定义LayUI模块

 在静态目录下创建一个mymodule文件 (图中已标明😜)

 mymod.js源码

mymodule_config.js源码

 四、登录界面


这期咱们来了解一下LayUI并用它编码实现一个登陆页面

一、LayUI简介

LayUI官方网站:https://www.layui.com/(已下线,作者贤心)
参考地址:http://layui.org.cn/demo/index.html(非官网,现由众多开发者维护)

下载到你的非中文目录下,压缩包解压即可用啦!

A.LayUI是什么?

LayUI,是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用。其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代码到 API 的每一处细节都经过精心雕琢,非常适合界面的快速开发。layui 首个版本发布于2016年秋,它区别于那些基于 MVVM 底层的 UI 框架,却并非逆道而行,而是信奉返璞归真之道。准确地说,它更多是为服务端程序员量身定做,开发者无需涉足各种前端工具的复杂配置,只需面对浏览器本身,使得开发十分便捷
 

B. 主要模块&目录结构

主要模块

layui 提供了丰富的内置模块,他们皆可通过模块化的方式按需加载,其中包括:layer、layDate、layPage、laytpl、table、form、upload、element、tree、layeditor、rate、carousel、flow、util、code

 目录结构


├─css //css目录
│ │─modules //模块css目录(一般如果模块相对较大,会进行单独提取,比如下面三个)
│ │ ├─laydate
│ │ ├─layer
│ │ └─layim
│ └─layui.css //核心样式文件
├─font //字体图标目录
├─images //图片资源目录(目前只有layim和编辑器用到的GIF表情)
│─lay //模块核心目录
│ └─modules //各模块组件
│─layui.js //基础核心库
└─layui.all.js // 包含layui.js和所有模块的合并文件


C.layui、easyui与bootstrap的对比

比较有趣的对比方式:
  easyui=jquery+html4(用来做后台的管理界面) 半老徐娘
  bootstrap=jquery+html5 美女 拜金
  layui 清纯少女

 layui和bootstrap的比较

layui和bootstrap这两个都属于UI渲染框架

          layui是国人开发的一套框架,2016年出来的,现在已更新到2.X版本了。比较新,轻量级,样式简单好看(目前官网已下架,开源了)
          bootstrap 相对来说是比较成熟的一个框架,现在已经更新到4.X版本。是一个很成熟的框架,这个大部分人一般都用过

适用范围不同

layui 更偏向与后端开发人员使用,在服务端页面上有非常好的效果
      适合做后台框架

      layui是提供给后端开发人员最好的ui框架,基于DOM驱动,在实现前端交互上比较麻烦,页面的增删改查都需要查询DOM元素。所以在不需要交互的时候,用layui还是不错的(说这句话的人,只能说明你对layui不了解)

bootstrap 在前端响应式方面做得很好,PC端和移动端表现都不错
      适合做网站
      如果是类似官网,且需要同时满足PC端和移动端效果,bootstrap 表现很好,但是如果是要交互的网站,比如商城之类,layui显然更好,前后端分离
大小不一样

        1.layui 轻量级
        2.bootsrap 因为成熟,所以使用方便,但是同时也是因为成熟,就显得有些冗余

D.layui和easyui对比  

          1.easyui 是非开源的,有需要解决的问题的话,就只能等官方更新了
          2.layui是开源的,社区比较活跃,解决问题还是比较快的
          3.easyui诞生的早些,所以功能相对完善一些,很多功能都能是比较健全的
          4.layui就相对来说少一些了,不过,功能都是像官网说的,精雕细琢
          5.layui更符合现在的审美

二、配置环境&案例

将项目所需的模块导入,后期编码补充完整,在将完整代码补上

MySQL中所用表:⬇⬇⬇⬇⬇

 试一试是否能运行出效果⬇⬇⬇⬇(部分电脑需要联网才能有样式)

 网页上可以显示出来咱们就开始我们今天编码吧!!!

先将下载的LayUI导入

 

 在创建一个Demo引入LayUI

 

 LayUI.js同步该操作❗❗

后-我们拷贝一个script看看我们访问这个页面时它能不能传入hello world

 

 传了吧,那么到目前为止LayUI就导入成功了,现在我们做一个小功能,目的是告诉大家LayUI呢是要用哪个模块就导哪个模块

案例:需求-->我输入一个就打出一个,将这个hello world变成活的🙌

 Demo1源码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<!-- 引入 layui.css -->
<link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/layui/css/layui.css">
 
<!-- 引入 layui.js -->
<script src="${pageContext.request.contextPath }/static/js/layui/layui.js"></script>
</head>
<body>
请输入:<input type="text" value="默认值" id="layui_demo1_input">
<button id="layui_demo1_btn">点我有惊喜</button>

<script>
//导入js相对应的模块jQuery.js
	layui.use(['layer', 'form','jquery'], function(){
	  var layer = layui.layer
	  ,form = layui.form
	  //将模块赋值给变量
	  ,$ = layui.jquery;
	  //给button添加点击事件
	  $("#layui_demo1_btn").click(function(){
		  var layui_demo1_input=$("#layui_demo1_input").val();
		  layer.msg(layui_demo1_input);
	  });
	  
	  layer.msg('Hello World');
	});
</script> 
</body>
</html>

三、自定义LayUI模块

我们先看看官网⬇⬇⬇⬇

 在静态目录下创建一个mymodule文件 (图中已标明😜)

 mymod.js源码

layui.define(function(exports){ //提示:模块也可以依赖其它模块,如:layui.define('mod1', callback);
  var obj = {
    hello: function(str){
      alert('Hello '+ (str||'mymod'));
    },say: function(str){
      alert('say '+ (str||'mymod'));
    }
  };
  
  //输出 mymod 接口 导出的模块名要与该js一致
  exports('mymod', obj);
});    

mymodule_config.js源码

//config的设置是全局的
layui.config({
  base: 'static/js/layui/mymodule/js/' //假设这是你存放拓展模块的根目录
}).extend({ //设定模块别名
  mymod: 'mymod' //如果 mymod.js 是在根目录,也可以不用设定别名
});

 我们创建一个Demo2测试自定义模块成功了不:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<!-- 引入 layui.css -->
<link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/layui/css/layui.css">
 
<!-- 引入 layui.js -->
<script src="${pageContext.request.contextPath }/static/js/layui/layui.js"></script>

<!-- 将我刚刚写的两个js导入 -->
<script src="${pageContext.request.contextPath }/static/js/layui/mymodule/js/mymod.js"></script>
<script src="${pageContext.request.contextPath }/static/js/layui/mymodule/mymodule_config.js"></script>
</head>
<body>
请输入:<input type="text" value="默认值" id="layui_demo1_input">
<button id="layui_demo1_btn">点我有惊喜</button>
请输入相关文字:<input type="text" value="默认值" id="layui_demo1_input">
<button id="layui_demo2_btn">自定义模块</button>

<script>
//导入js相对应的模块jQuery.js
	layui.use(['layer', 'form','jquery','mymod'], function(){
	  var layer = layui.layer
	  ,form = layui.form
	  ,mymod = layui.mymod
	  //将模块赋值给变量
	  ,$ = layui.jquery;
	  //给button添加点击事件
	  $("#layui_demo1_btn").click(function(){
		  var layui_demo1_input=$("#layui_demo1_input").val();
		  layer.msg(layui_demo1_input);
	  });
	  //给自定义模块按钮添加点击事件
	  $("#layui_demo2_btn").click(function(){
		  var layui_demo2_input=$("#layui_demo2_input").val();
		  mymod.say(layui_demo2_input);
		  mymod.hello(layui_demo2_input);
	  });
	  
	  layer.msg('Hello World');
	});
</script> 
</body>
</html>

 四、登录界面

进入主题啦!前面的也得仔细看那都是精华

想使用LayUI布局前端代码时,我们可以再示例中找所需的 

 创建一个公共页面,在登录界面引入LayUI样式

 上面拷贝的前端代码运行效果⬇⬇⬇⬇⬇

使用LayUI的前端代码大概就是这样操作,看看以下编辑的前端代码

login:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- 导入公共界面 -->
    <%@ include file="common/header.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" rev="stylesheet" href="${pageContext.request.contextPath }/static/css/iconfont.css" type="text/css" media="all">
<link rel="stylesheet" rev="stylesheet" href="${pageContext.request.contextPath }/static/css/login.css" type="text/css" media="all">
<style> body{color:#;}a{color:#;}a:hover{color:#;}.bg-black{background-color:#;}.tx-login-bg{background:url(images/bg.jpg) no-repeat 0 0;}</style>
</head>
<body class="tx-login-bg">
     <div class="tx-login-box">
          <div class="login-avatar bg-black">
          		<i class="iconfont icon-wode"></i>
          </div>
				<ul class="tx-form-li row">
					<li class="col-24 col-m-24"><p>
							<input type="text" id="username" placeholder="登录账号" class="tx-input">
						</p></li>
					<li class="col-24 col-m-24"><p>
							<input type="password" id="password" placeholder="登录密码" class="tx-input">
						</p></li>
					<li class="col-24 col-m-24">
						<p class="tx-input-full">
							<button id="login" class="tx-btn tx-btn-big bg-black">登录</button>
						</p></li>
					<li class="col-12 col-m-12"><p>
							<a href="#" class="f-12 f-gray">新用户注册</a>
						</p></li>
					<li class="col-12 col-m-12"><p class="ta-r">
							<a href="#" class="f-12 f-gray">忘记密码</a>
						</p></li>
				</ul>
       </div>
</body>
</html>

 这是目前代码的运行效果⬇⬇⬇⬇

 

咱们建立一个User UserAction

package com.zking.entity;

public class User {

	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}
	public User() {
		super();
	}
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + "]";
	}
}
package com.zking.web;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zking.entity.User;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.R;
import com.zking.util.ResponseUtil;

/**
 * 处理前台的请求
 * 实现子控制器
 * @author Administrator
 *
 */
public class UserAction extends ActionSupport implements ModelDriver<User>{

	private User user=new User();//接收前台所有参数值
	
	/*//写一个方法,处理前台的请求
	public String login(HttpServletRequest req, HttpServletResponse resp) {
		//定义一个map集合
		Map<String, Object> map=new HashMap<String, Object>();
		//假设在页面输入用户/密码为张三、123456;则登录成功反之不成功
		if("zhangsan".equals(user.getUsername()) && "123456".equals(user.getPassword())) {
			//向前台响应数据 登录成功
			map.put("code", 200);
			map.put("msg", "成功");
		}
		else {
			//登录失败
			map.put("code", 0);
			map.put("msg", "账户密码错误");
		}
		try {
			ResponseUtil.writeJson(resp, map);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}*/

	//简化改造版
	//写一个方法,处理前台的请求
	public String login(HttpServletRequest req, HttpServletResponse resp) {
		try {
			//假设在页面输入用户/密码为张三、123456;则登录成功反之不成功
			if("zhangsan".equals(user.getUsername()) && "123456".equals(user.getPassword())) {
				ResponseUtil.writeJson(resp, new R().data("code", 200).data("msg", "成功"));
			}
			else {
				ResponseUtil.writeJson(resp, new R().data("code", 0).data("msg", "失败"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	@Override
	public User getModel() {
		return user;
	}

}

两个工具类

ResponseUtil 

package com.zking.util;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import com.fasterxml.jackson.databind.ObjectMapper;
/**
 * 响应工具类
 * @author Administrator
 *
 */
public class ResponseUtil {

	public static void write(HttpServletResponse response,Object o)throws Exception{
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		out.println(o.toString());
		out.flush();
		out.close();
	}
	
	public static void writeJson(HttpServletResponse response,Object o)throws Exception{
		ObjectMapper om = new ObjectMapper();
//		om.writeValueAsString(o)浠h〃浜唈son涓�
		write(response, om.writeValueAsString(o));
	}
}
package com.zking.util;

import java.util.HashMap;

public class R extends HashMap{
	public R data(String key, Object value) {
		this.put(key, value);
		return this;
	}
}

Ajax;编辑login页面中

<!-- 向后台发送请求 -->
       <script type="text/javascript">
       		layui.use(['jquery','layer'],function(){
       			let $=layui.jquery
       				,layer=layui.layer;
       			$("#login").click(function(){
       				$.ajax({
       					url:"${pageContext.request.contextPath }/user.action?methodName=login"
						,dataType:'json'
						,data:{
							username:${"#username"}.val(),
							password:${"#password"}.val()
						}
						,success:function(data){
							//console.log(data);
							if(data.code==200){
								layer.alert(data.msg,{icon:1});
								//登录成功,跳到主页
								location.href='main.jsp';
							}
							else{
								layer.alert(data.msg,{icon:2});
							}
						}
       				});
       			});
       		});
       
       </script>

记得要在配置文件MVC.xml中配置

<?xml version="1.0" encoding="UTF-8"?>
<config>

	<action path="/blog" type="com.zking.web.BlogAction">
		<forward name="list" path="/blogList.jsp" redirect="false" />
		<forward name="toList" path="/blog.action?methodName=list"
			redirect="true" />
		<forward name="toEdit" path="/blogEdit.jsp" redirect="false" />
	</action>
	
	<action path="/user" type="com.zking.web.UserAction">
		
	</action>

</config>

 

到这里内容也差不多了,拜拜

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值