技术标签: 框架学习
目录
2、定义模块:layui.define([mods],callback)
3、加载所需模块:layui.use([mods],callback)
参考网站:http://www.layui.com/doc/
这篇文章由于自己的快速学习,所以主要是复制参考网页的重点来帮助自己记忆。
作用:在使用layui模块之前可以全局化配置一些参数。
使用:(未使用,mark)
layui.config({
dir: '/res/layui/' //layui.js 所在路径(注意,如果是script单独引入layui.js,无需设定该参数。),一般情况下可以无视
,version: false //一般用于更新模块缓存,默认不开启。设为true即让浏览器不缓存。也可以设为一个固定的值,如:201610
,debug: false //用于开启调试模式,默认false,如果设为true,则JS模块的节点会保留在页面
,base: '' //设定扩展的Layui模块的所在目录,一般用于外部模块扩展
});
作用:可定义一个模块。mods:定义的模块所依赖的模块,callback:会调用函数,返回一个exports参数,输出该模块的接口(也就是定义模块)。
使用:
//1.不使用mods参数,直接使用回调方法定义一个模块
//define:定义模块的方法
layui.define(function(exports){
/*
* exports参数:可定义一个模块
*
* demo:模块名字
* function():回调方法
*/
exports('demo', function(){
alert('Hello World!');
});
});
layui.demo();//调用定义的模块
//2.使用mods参数,设置该模块所依赖的模块来使用回调方法定义一个模块
layui.define("layer",function(exports){ //可使用数组来依赖多个模块:["layer","laypage"]
exports('demo', function(){
alert('Hello World!');
});
});
//需要通过use()来加载layer模块,之后在该回调方法中调用定义的demo方法
layui.use("layer",function(){
layui.demo();
})
作用:layui的内置模块,不是一开始就加载的,需要通过该方法来加载内置模块。
扩展:(目前只做了解)如果mods中需要包含目录,需使用extends定义别名。
使用:
/*
* 3.使用模块
*/
layui.use(['layer','laypage'],function(){ //指定加载的模块
//通过对象赋值的方式来获取模块接口(当然,不使用对象赋值也可以直接使用,但是为了规范吧)
var layer = layui.layer
,laypage = layui.laypage;
//使用layer模块的msg()
layer.msg("你好");
});
//强烈不推荐下面的做法,如果你的业务代码实在模块加载完成之前执行的,则会存在报错风险
var laypage, laydate;
layui.use(['laypage', 'laydate'], function(){
laypage = layui.laypage;
laydate = layui.laydate;
});
方法/属性 | 描述 |
---|---|
layui.link(href) | 动态下载css,href即为css路径。注意:该方法并非是你使用Layui所必须的,它一般只是用于动态加载你的外部CSS文件。 |
layui.data(table, settings) | localStorage 持久化存储、数据会永久存在,除非物理删除。其中参数 table 为表名,settings是一个对象,用于设置key、value。(未理解) |
layui.sessionData(table, settings) | sessionStorage 会话性存储、页面关闭后即失效。注:layui 2.2.5 新增。(未理解) |
layui.device(key) | 获取设备信息,参数key是可选的,在layui mobile模块中的作用可谓举足轻重。该方法返回了丰富的设备信息。(详情见官网) |
layui.cache | 静态属性。获得一些配置及临时的缓存信息 |
layui.extend(options) | 拓展一个模块别名,如:layui.extend({test: '/res/js/test'}) |
layui.each(obj, fn) | 对象(Array、Object、DOM对象等)遍历,可用于取代for语句 |
layui.getStyle(node, name) | 获得一个原始DOM节点的style属性值,如:layui.getStyle(document.body, 'font-size') |
layui.img(url, callback, error) | 图片预加载 |
layui.sort(obj, key, desc) | 将数组中的对象按某个成员重新对该数组排序,如:layui.sort([{a: 3},{a: 1},{a: 5}], 'a') |
layui.router() | 获得location.hash路由,目前在Layui中没发挥作用。对做单页应用会派上用场。 |
layui.hint() | 向控制台打印一些异常信息,目前只返回了error方法:layui.hint().error('出错啦') |
layui.stope(e) | 阻止事件冒泡 |
layui.onevent(modName, events, callback) | 自定义模块事件,属于比较高级的应用。有兴趣的同学可以阅读layui.js源码以及form模块 |
layui.event(modName, events, params) | 执行自定义模块事件,搭配onevent使用 |
layui.factory(modName) | 用于获取模块对应的 define 回调函数 |
需要的页面元素,可直接去官网搜索,目前还没有什么无法理解的地方。(持续更新)
1、layui的模块是基于layui.js内部实现的模块异步加载方式。
2、预先加载,也就是先在最外层定义一个layui.use(),将所有的js代码都包括在里面,这样可以防止多次重复的定义layui.use()
3、按需加载(不推荐),在需要使用某个模块的时候再去定义layui.use()来加载模块,可满足对网站的性能有极致的要求的人。
注意:如果你的 JS 中需要大量用到模块,我们并不推荐你采用这种加载方式(按需加载),因为这意味着你要写很多 layui.use(),代码可维护性不高。 建议还是采用:预先加载。即一个JS文件中,写一个use即可。
4.使用扩展模块:
/*
* 1、test.js代码
*/
//使用define()定义模块
layui.define(function(exports){
//声明一个对象
var obj= {
//hello属性指定一个方法
hello:function(str){
alert("hello "+(str||"mymod"));
}
}
//输出借口(输出定义的模块,模块名为mymod)
exports("mymod",obj);
});
/*
* 2、html页面代码
*/
//配置test.js的路径
layui.config({
base:"js/" //test.js的根目录
}).extend({
mymod:"test" //test.js所在的目录,且指定模块
});
//使用拓展模块
layui.use(['mymod'], function(){
var mymod = layui.mymod;
mymod.hello('World!'); //弹出 Hello World!
});
对不同尺寸的屏幕进行适配处理:
超小屏幕 (手机<768px) |
小屏幕 (平板≥768px) |
中等屏幕 (桌面≥992px) |
大型屏幕 (桌面≥1200px) |
|
---|---|---|---|---|
.layui-container的值 | auto | 750px | 970px | 1170px |
标记 | xs | sm | md | lg |
列对应类 * 为1-12的等分数值 |
layui-col-xs* | layui-col-sm* | layui-col-md* | layui-col-lg* |
总列数 | 12 | |||
响应行为 | 始终按设定的比例水平排列 | 在当前屏幕下水平排列,如果屏幕大小低于临界值则堆叠排列 |
将栅格放入一个带有 class="layui-container" 的特定的容器中:以便在小屏幕以上的设备中固定宽度,让列可控。
将栅格或其它元素放入一个带有 class="layui-fluid" 的容器中:那么宽度将不会固定,而是 100% 适应。
layui的其他常用颜色:常用主色(象征包容的墨绿色为主色调)、场景色(比较亮丽的颜色)、极简中性色(灰色、用于背景边框)。
<i class="layui-icon layui-icon-face-smile" style="font-size: 30px; color: #1E9FFF;"><i/>
//laui-icon:使用图标就需要该类
//layui-icon-face-smile:一个笑脸的图标,如果需要其他图标就去官网查询
//style:使用了layui的图标也可以通过style来设置颜色、大小等属性
<div class="layui-anim layui-anim-up layui-anim-loop"></div>
//layui-anim:这个是必须的
//layui-anim-up:向上弹出的动画,可替换
//layui-anim-loop:循环,重复动画
提示:多种不同样式可以根据正常逻辑随意搭配
<button class="layui-btn">一个标准的按钮</button>
<a href="http://www.layui.com" class="layui-btn">一个可跳转的按钮</a>
//一个带图标的按钮
<button class="layui-btn layui-btn-sm layui-btn-primary">
<i class="layui-icon">ဂ</i>
</button>
原始 | class="layui-btn layui-btn-primary" |
默认 | class="layui-btn" |
百搭 | class="layui-btn layui-btn-normal" |
暖色 | class="layui-btn layui-btn-warm" |
警告 | class="layui-btn layui-btn-danger" |
禁用 | class="layui-btn layui-btn-disabled" |
尺寸 | 组合 |
---|---|
大型 | class="layui-btn layui-btn-lg" |
默认 | class="layui-btn" |
小型 | class="layui-btn layui-btn-sm" |
迷你 | class="layui-btn layui-btn-xs" |
//按钮组:将多个按钮按组分在一起
<div class="layui-btn-group">
<button class="layui-btn">增加</button>
<button class="layui-btn">编辑</button>
<button class="layui-btn">删除</button>
</div>
//按钮容器(...)
//尽管按钮在同节点并排时会自动拉开间距,但在按钮太多的情况,效果并不是很美好。因为你需要用到按钮容器
<div class="layui-btn-container">
<button class="layui-btn">按钮一</button>
<button class="layui-btn">按钮二</button>
<button class="layui-btn">按钮三</button>
</div>
在一个容器中设定 class="layui-form" 来标识一个表单元素块,通过规范好的HTML结构及CSS类,来组装成各式各样的表单元素,并通过内置的 form模块 来完成各种交互。
(请注意:如果不加载form模块,select、checkbox、radio等将无法显示,并且无法使用form相关功能)
//基本格式
<div class="layui-form-item">
<label class="layui-form-label">标签区域</label>
<div class="layui-input-block">
原始表单元素区域
</div>
</div>
//输入框:
<input type="text" name="title" required lay-verify="required" placeholder="请输入标题" autocomplete="off" class="layui-input">
//required:注册浏览器所规定的必填字段
//lay-verify:注册form模块需要验证的类型
//class="layui-input":layui.css提供的通用CSS类
//如果需要页面的效果,则必须加载form模块
<script>
//Demo
layui.use('form', function(){
var form = layui.form;
//监听提交
form.on('submit(formDemo)', function(data){
layer.msg(JSON.stringify(data.field));
return false;
});
});
</script>
导航一般指页面引导性频道集合,多以菜单的形式呈现,可应用于头部和侧边。
<ul class="layui-nav" lay-filter="">
<li class="layui-nav-item"><a href="">最新活动</a></li>
<li class="layui-nav-item layui-this"><a href="">产品</a></li><!-- layui-this:指定当前页面分类 -->
<li class="layui-nav-item"><a href="">大数据</a></li>
<li class="layui-nav-item">
<a href="javascript:;">解决方案</a>
<dl class="layui-nav-child"> <!-- 二级菜单 -->
<dd><a href="">移动模块</a></dd>
<dd><a href="">后台模版</a></dd>
<dd><a href="">电商平台</a></dd>
</dl>
</li>
<li class="layui-nav-item"><a href="">社区</a></li>
</ul>
<script>
//注意:导航 依赖 element 模块,否则无法进行功能性操作
layui.use('element', function(){
var element = layui.element;
//…
});
</script>
垂直导航在ul中需要追加class:layui-nav-tree
侧边导航需要追加class:layui-nav-tree layui-nav-side
类似于简便行型的导航条,与导航条同样依赖于element模块
进度条可应用于许多业务场景,如任务完成进度、loading等等,是一种较为直观的表达元素。依赖element模块。
一般的面板通常是指一个独立的容器,而折叠面板则能有效地节省页面的可视面积,非常适合应用于:QA说明、帮助文档等
分为:卡片面板、折叠面板。依赖于element模块
<table class="layui-table" lay-skin="line">
<!-- 设置列的宽度 -->
<colgroup>
<col width="150">
<col width="200">
<col>
</colgroup>
行边框表格(内部结构参见右侧目录“常规用法”)
</table>
<table class="layui-table" lay-skin="row">
列边框表格(内部结构参见右侧目录“常规用法”)
</table>
<table class="layui-table" lay-even lay-skin="nob">
无边框表格(内部结构参见右侧目录“常规用法”)
</table>
<table class="layui-table" lay-size="sm">
小尺寸表格(内部结构参见右侧目录“常规用法”)
</table>
<table class="layui-table" lay-size="lg">
大尺寸表格(内部结构参见右侧目录“常规用法”)
</table>
由于 layer 在 layui 体系中的位置比较特殊,甚至让很多人都误以为 layui = layer ui,所以再次强调 layer 只是作为 layui 的一个弹层模块,由于其用户基数较大,所以至今仍把她作为独立组件来维护。
扩展:
layer.open({
type: 2,
content: 'test/iframe.html',
success: function(layero, index){//成功时执行的回调。layero代表该层的DOM
var body = layer.getChildFrame('body', index);//获取body中的页面元素
//可以通过这样来调用子页面(层)的方法
var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:
iframeWin.method();//执行子页面方法
console.log(body.html()) //得到iframe页的body内容
body.find('input').val('Hi,我是从父页来的')
}
});
//假设这是iframe页。window.name:获得当前iframe的名字
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
parent.layer.close(index); //再执行关闭
layer.iframAuto(index) - 指定ifram自适应:调用该方法时,iframe层的高度会重新进行适应
layer.iframeUrl(index,url) - 重置特定iframe的url:使用方式:layer.iframeSrc(index, 'http://sentsin.com')
layer.setTop(layero) - 置顶当前窗口
layer.full()、layer.min()、layer.restore() - 手工执行最大、小、全屏化
layer.prompt(options,yes) - 输入层:yes携带value 表单值 index 索引 elem 表单元素
layer.tab(options) - tab层:弹出tab层,可以有多个选项卡
layer.photos(options) - 相册层:photos支持传入json和直接读取页面图片两种方式。
全面重写的 layDate 包含了大量的更新,其中主要以:年选择器、年月选择器、日期选择器、时间选择器、日期时间选择器 五种类型的选择方式为基本核心,并且均支持范围选择(即双控件)。
核心方法:laydate.render(options)设置基础参数,也可通过laydate.set(options)来设置全局基础参数
laydate.path = '/static/xxx/'; //laydate.js 所在目录
//配置好路径后,再调用
laydate.render(options);
其他方法
方法名 | 备注 |
---|---|
laydate.getEndDate(month, year) | 获取指定年月的最后一天,month默认为当前月,year默认为当前年。如: var endDate1 = laydate.getEndDate(10); //得到31 var endDate2 = laydate.getEndDate(2, 2080); //得到29 |
LayIM正试图重新为网页带来一些社交想象。作为一款Web即时通讯前端解决方案(服务端需自写),LayIM提供了全方位的前端接口支撑,不仅能让您更高效地接入到自己的通讯服务中,更能让你轻松地与 环信、融云、野狗 等第三方通讯服务平台对接。
指向一个分页的容器,通过服务器得到初始,即可完成分页渲染。
<div id="test1"></div>
<script src="/static/build/layui.js"></script>
<script>
layui.use('laypage', function(){
var laypage = layui.laypage;
//执行一个laypage实例
laypage.render({
elem: 'test1' //注意,这里的 test1 是 ID,不用加 # 号
,count: 50 //数据总数,从服务端得到
});
});
参数选项 | 说明 | 类型 | 默认值 |
---|---|---|---|
elem | 指向存放分页的容器,值可以是容器ID、DOM对象。如: 1. elem: 'id' 注意:这里不能加 # 号 2. elem: document.getElementById('id') |
String/Object | - |
count | 数据总数。一般通过服务端得到 | Number | - |
limit | 每页显示的条数。laypage将会借助 count 和 limit 计算出分页数。 | Number | 10 |
limits | 每页条数的选择项。如果 layout 参数开启了 limit,则会出现每页条数的select选择框 | Array | [10, 20, 30, 40, 50] |
curr | 起始页。一般用于刷新类型的跳页以及HASH跳页。如: |
Number | 1 |
groups | 连续出现的页码个数 | Number | 5 |
prev | 自定义“上一页”的内容,支持传入普通文本和HTML | String | 上一页 |
next | 自定义“下一页”的内容,同上 | String | 下一页 |
first | 自定义“首页”的内容,同上 | String | 1 |
last | 自定义“尾页”的内容,同上 | String | 总页数值 |
layout | 自定义排版。可选值有:count(总条目输区域)、prev(上一页区域)、page(分页区域)、next(下一页区域)、limit(条目选项区域)、refresh(页面刷新区域。注意:layui 2.3.0 新增) 、skip(快捷跳页区域) | Array | ['prev', 'page', 'next'] |
theme | 自定义主题。支持传入:颜色值,或任意普通字符。如: 1. theme: '#c00' 2. theme: 'xxx' //将会生成 class="layui-laypage-xxx" 的CSS类,以便自定义主题 |
String | - |
hash | 开启location.hash,并自定义 hash 值。如果开启,在触发分页时,会自动对url追加:#!hash值={curr} 利用这个,可以在页面载入时就定位到指定页 | String/Boolean | false |
当分页被切换时触发,第一个参数(obj):该页的所有选项,第二个参数(first):是否首次,一般由于初始值加载的判断。
laypage.render({
elem: 'test1'
,count: 70 //数据总数,从服务端得到
,jump: function(obj, first){
//obj包含了当前分页的所有参数,比如:
console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
console.log(obj.limit); //得到每页显示的条数
//首次不执行
if(!first){//第一次进入页面为true,之后每一次跳转页面都为undefined
//do something
}
}
});
可以与数据分离(有点类似于java的el表达式,不过语法不同)
语法:
语法 | 说明 | 示例 |
---|---|---|
{ { d.field }} | 输出一个普通字段,不转义html | |
{ {= d.field }} | 输出一个普通字段,并转义html | |
{ {# JavaScript表达式 }} | JS 语句。一般用于逻辑处理。用分隔符加 # 号开头。 注意:如果你是想输出一个函数,正确的写法是:{ { fn() }},而不是:{ {# fn() }} |
|
{ {! template !}} | 对一段指定的模板区域进行过滤,即不解析该区域的模板。注:layui 2.1.6 新增 | |
也可重新定义分割符。(不要急躁,去官网找一下吧。)
以下模块由于官网讲解比较详细,同时内容比较多也不好记录所以暂留。
layui最核心的组成之一,对表格进行一系列功能和动态化数据操作。
元素功能的开启只需要加载element模块即会自动完成,所以不用跟其它模块一样为某一个功能而调用一个方法。
文章浏览阅读3k次,点赞3次,收藏13次。root@server ~]# vim /etc/named.rfc1912.zones #添加如下内容,也可直接更改模板。[root@server ~]# vim /etc/named.conf #打开主配置文件,将如下两处地方修改为。注意:ip地址必须反向书写,这里文件名需要和反向解析数据文件名相同。新建或者拷贝一份进行修改。nslookup命令。_dns反向解析
文章浏览阅读2.5w次,点赞16次,收藏103次。这个函数TIM_SetCompare1,这个函数有四个,分别是TIM_SetCompare1,TIM_SetCompare2,TIM_SetCompare3,TIM_SetCompare4。位于CH1那一行的GPIO口使用TIM_SetCompare1这个函数,位于CH2那一行的GPIO口使用TIM_SetCompare2这个函数。使用stm32f103的除了tim6和tim7没有PWM..._tim_setcompare1
文章浏览阅读950次,点赞33次,收藏19次。多线程_进程和线程,并发与并行,线程优先级,守护线程,实现线程的四种方式,线程周期;线程同步,线程中的锁,Lock类,死锁,生产者和消费者案例
文章浏览阅读2.9k次。ifort 编译器的安装ifort 编译器可以在 intel 官网上下载。打开https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/fortran-compiler.html#gs.7iqrsm点击网页中下方处的 Download, 选择 Intel Fortran Compiler Classic and Intel Fortran Compiler(Beta) 下方对应的版本。我选择的是 l_在linux系统的用户目录下安装ifort和mkl库并配置
文章浏览阅读689次,点赞7次,收藏8次。些项目时需要一个生成图片的方法,我在网上找到比较方便且适合我去设置一些样式的生成方式之一就是使用Freemarker,在对应位置上先写好一个html格式的ftl文件,在对应位置用${参数名}填写上。还记得当时为了解决图片大小设置不上,搜索了好久资料,不记得是在哪看到的需要在里面使用width与height直接设置,而我当时用style去设置,怎么都不对。找不到,自己测试链接,准备将所有含有中文的图片链接复制一份,在服务器上存储一份不带中文的文件。突然发现就算无中文,有的链接也是打不开的。_ftl格式pdf的样式调整
文章浏览阅读1.5k次,点赞6次,收藏12次。拉取librealsense。_opt/ros/noetic/lib/nodelet/nodelet: symbol lookup error: /home/admin07/reals
文章浏览阅读3.4k次,点赞3次,收藏29次。一.单选题二.填空题三.判断题一.单选题静态链接是在( )进行的。A、编译某段程序时B、装入某段程序时C、紧凑时D、装入程序之前Pentium处理器(32位)最大可寻址的虚拟存储器地址空间为( )。A、由内存的容量而定B、4GC、2GD、1G分页系统中,主存分配的单位是( )。A、字节B、物理块C、作业D、段在段页式存储管理中,当执行一段程序时,至少访问()次内存。A、1B、2C、3D、4在分段管理中,( )。A、以段为单位分配,每._系统抖动现象的发生由什么引起的
文章浏览阅读2.4k次。在实际的工作生产中,零件的加工制造一般都需要二维工程图来辅助设计。UG NX 的工程图主要是为了满足二维出图需要。在绘制工程图时,需要先确定所绘制图形要表达的内容,然后根据需要并按照视图的选择原则,绘制工程图的主视图、其他视图以及某些特殊视图,最后标注图形的尺寸、技术说明等信息,即可完成工程图的绘制。1.视图选择原则工程图合理的表达方案要综合运用各种表达方法,清晰完整地表达出零件的结构形状,并便于看图。确定工程图表达方案的一般步骤如下:口分析零件结构形状由于零件的结构形状以及加工位置或工作位置的不._ug-nx工程图
文章浏览阅读920次,点赞29次,收藏18次。原文《智能制造数字化工厂智慧供应链大数据解决方案》PPT格式主要从智能制造数字化工厂智慧供应链大数据解决方案框架图、销量预测+S&OP大数据解决方案、计划统筹大数据解决方案、订单履约大数据解决方案、库存周转大数据解决方案、采购及供应商管理大数据模块、智慧工厂大数据解决方案、设备管理大数据解决方案、质量管理大数据解决方案、仓储物流与网络优化大数据解决方案、供应链决策分析大数据解决方案进行建设。适用于售前项目汇报、项目规划、领导汇报。
文章浏览阅读2w次,点赞38次,收藏102次。在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求。这个套接字不能用于与客户端之间发送和接收数据。 accept()接受一个客户端的连接请求,并返回一个新的套接字。所谓“新的”就是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的套接字不是同一个套接字。与本次接受的客户端的通信是通过在这个新的套接字上发送和接收数_当在函数 'main' 中调用 'open_socket_accept'时.line: 8. connection request fa
文章浏览阅读4.3k次。对象销毁对象销毁的标准语法Close和Stop何时销毁对象销毁对象时清除字段对象销毁的标准语法Framework在销毁对象的逻辑方面遵循一套规则,这些规则并不限用于.NET Framework或C#语言;这些规则的目的是定义一套便于使用的协议。这些协议如下:一旦销毁,对象不可恢复。对象不能被再次激活,调用对象的方法或者属性抛出ObjectDisposedException异常重复地调用对象的Disposal方法会导致错误如果一个可销毁对象x 包含或包装或处理另外一个可销毁对象y,那么x的Disp_c# 销毁对象及其所有引用
文章浏览阅读1.1w次。这是记录,在中项、高项过程中的错题笔记;https://www.zenwu.site/post/2b6d.html1. 信息系统的规划工具在制订计划时,可以利用PERT图和甘特图;访谈时,可以应用各种调查表和调查提纲;在确定各部门、各层管理人员的需求,梳理流程时,可以采用会谈和正式会议的方法。为把企业组织结构与企业过程联系起来,说明每个过程与组织的联系,指出过程决策人,可以采用建立过程/组织(Process/Organization,P/O)矩阵的方法。例如,一个简单的P/O矩阵示例,其中._大型设备可靠性测试可否拆解为几个部分进行测试