搜索组件模块
grid 栅格布局
layout admin 布局
color 颜色
iconfont 字体图标
font 字体大小 颜色
animation 动画
button 按钮
form 表单组
input 输入框
select 下拉选择框
checkbox 复选框
switch 开关
radio 单选框
textarea 文本域
nav 导航菜单
menu 基础通用菜单
breadcrumb 面包屑
tabs 选项卡
progress 进度条
panel 面板 / card
collapse 折叠面板/手风琴
table 表格元素
badge 徽章
timeline 时间线
blockquote 引用块
fieldset 字段集
hr 分割线
layer 弹出层/弹窗综合
laydate 日期时间选择器
laypage 分页
laytpl 模板引擎
table 数据表格
form 表单模块
upload 文件/图片上传
dropdown 下拉菜单
contextmenu 右键菜单
transfer 穿梭框
tree 树形菜单
colorpicker 颜色选择器
element 常用元素操作
slider 滑块
rate 评分
carousel 轮播/跑马灯
layedit 富文本编辑器
flow 信息流/图片懒加载
util 工具集
code 代码文本行修饰
layim
layuiadmin
-

底层方法

本篇主要介绍基础库所发挥的作用,其中过滤了大部分在外部不常用的方法,侧重罗列了基础框架支撑。

方法:layui.config(options)

你可以在使用模块之前,全局化配置一些参数,尽管大部分时候它不是必须的。所以我们目前提供的全局配置项非常少,这也是为了减少一些不必要的工作,尽可能让使用变得更简单。目前支持的全局配置项如下:

</>code

  1. layui.config({
  2. dir: '/res/layui/' //layui.js 所在目录(如果是 script 单独引入 layui.js,无需设定该参数)一般可无视
  3. ,version: false //一般用于更新模块缓存,默认不开启。设为 true 即让浏览器不缓存。也可以设为一个固定的值,如:201610
  4. ,debug: false //用于开启调试模式,默认 false,如果设为 true,则JS模块的节点会保留在页面
  5. ,base: '' //设定扩展的 layui 模块的所在目录,一般用于外部模块扩展
  6. });

如果你对 layui.js 本身进行了动态加载等其他特殊场景,那么上述layui.config 所设定的dir参数会因此失效,它会在部分组件的依赖文件(css)加载后才执行,此时你可以在动态加载 layui.js 之前预先定义一个我们约定好的全局对象:

</>code

  1. <script>
  2. var LAYUI_GLOBAL = {
  3. dir: '/res/layui/' //layui.js 所在目录(layui 2.6.6 开始新增
  4. };
  5. </script>
提示:以上 dir 参数的目录设定仅针对特殊场景,如是采用 script 标签正常引入 layui 的,可以无视该 dir 参数。

方法:layui.define([mods], callback)

通过该方法可在新的 JS 文件中定义一个 layui 模块。参数 mods 是可选的,用于声明该模块所依赖的模块。callback 即为模块加载完毕的回调函数,它返回一个 exports 参数,用于输出该模块的接口。

</>code

  1. /** demo.js **/
  2. layui.define(function(exports){
  3. //do something
  4. exports('demo', {
  5. msg: 'Hello Demo'
  6. });
  7. });

跟 RequireJS 最大不同的地方在于接口输出,exports 是一个函数,它接受两个参数,第1个参数为模块名,第2个参数为模块接口。
当你声明了上述的一个模块后,你就可以在外部使用了,demo 就会注册到 layui 对象下,即可通过 var demo = layui.demo 去得到该模块接口。你也可以在定义一个模块的时候,声明该模块所需的依赖,如:

</>code

  1. /** demo.js **/
  2. layui.define(['layer', 'laypage', 'mod1'], function(exports){ //此处 mod1 为你的任意扩展模块
  3. //do something
  4. exports('demo', {
  5. msg: 'Hello Demo'
  6. });
  7. });

上述的 layer、laypage 都是 layui 的内置模块。

方法:layui.use([mods], callback)

  • 参数 mods:如果填写,必须是一个 layui 合法的模块名(不能包含目录)。
    从 layui 2.6 开始,若 mods 不填,只传一个 callback 参数,则表示引用所有内置模块。
  • 参数 callback:即为模块加载完毕的回调函数。
    从 layui 2.6 开始,该回调会在 html 文档加载完毕后再执行,确保你的代码在任何地方都能对元素进行操作。

</>code

  1. //引用指定模块
  2. layui.use(['layer', 'laydate'], function(){
  3. var layer = layui.layer
  4. ,laydate = layui.laydate;
  5. //do something
  6. });
  7. //引用所有模块(layui 2.6 开始支持)
  8. layui.use(function(){
  9. var layer = layui.layer
  10. ,laydate = layui.laydate
  11. ,table = layui.table;
  12. //…
  13. //do something
  14. });

你还可以通过回调函数得到模块对象,如

</>code

  1. //通过回调的参数得到模块对象
  2. layui.use(['layer', 'laydate', 'table'], function(layer, laydate, table){
  3. //使用 layer
  4. layer.msg('test');
  5. //使用 laydate
  6. laydate.render({});
  7. //使用 table
  8. table.render({})
  9. });

方法:layui.link(href)

href 即为 css 路径。注意:该方法并非是你使用 layui 所必须的,它一般只是用于动态加载你的外部 CSS 文件。

本地存储是对 localStorage 和 sessionStorage 的友好封装,可更方便地管理本地数据。

  • localStorage 持久化存储:layui.data(table, settings),数据会永久存在,除非物理删除。
  • sessionStorage 会话性存储:layui.sessionData(table, settings),页面关闭后即失效。注:layui 2.2.5 新增

上述两个方法的使用方式是完全一样的。其中参数 table 为表名,settings是一个对象,用于设置 key、value。下面以 layui.data 方法为例:

</>code

  1. //【增】:向 test 表插入一个 nickname 字段,如果该表不存在,则自动建立。
  2. layui.data('test', {
  3. key: 'nickname'
  4. ,value: '贤心'
  5. });
  6. //【删】:删除 test 表的 nickname 字段
  7. layui.data('test', {
  8. key: 'nickname'
  9. ,remove: true
  10. });
  11. layui.data('test', null); //删除test表
  12. //【改】:同【增】,会覆盖已经存储的数据
  13. //【查】:向 test 表读取全部的数据
  14. var localTest = layui.data('test');
  15. console.log(localTest.nickname); //获得“贤心”

方法:layui.device(key),参数 key 是可选的

由于 layui 的一些功能进行了兼容性处理和响应式支持,因此该方法同样发挥了至关重要的作用。其返回的信息如下:

</>code

  1. var device = layui.device();
  2. //device 即可根据不同的设备返回下述不同的信息
  3. </>code

    1. {
    2. os: "windows" //当前浏览器所在的底层操作系统,如:Windows、Linux、Mac 等
    3. ,ie: false //当前浏览器是否为 ie6-11 的版本,如果不是 ie 浏览器,则为 false
    4. ,weixin: false //当前浏览器是否为微信 App 环境
    5. ,android: false //当前浏览器是否为安卓系统环境
    6. ,ios: false //当前浏览器是否为 IOS 系统环境
    7. ,mobile: false //当前浏览器是否为移动设备环境(v2.5.7 新增)
    8. }

有时你的 App 可能会对 userAgent 插入一段特定的标识,譬如:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 myapp/1.8.6 Safari/537.36

你要验证当前的 WebView 是否在你的 App 环境,即可通过上述的myapp(即为 Native 给 Webview 插入的标识,可以随意定义)来判断。

</>code

  1. var device = layui.device('myapp');
  2. if(device.myapp){
  3. alert('在我的App环境');
  4. }

除上述介绍的方法外,layui 内部还提供了许多底层引擎,他们同样是整个 layui 框架的有力支撑,在日常应用中通常也会用到:

方法/属性 描述
layui.cache 静态属性。获得一些配置及临时的缓存信息
layui.extend(options) 拓展一个模块别名,如:layui.extend({test: '/res/js/test'})
layui.each(obj, fn) 对象(Array、Object、DOM 对象等)遍历,可用于取代 for 语句
layui._typeof(operand) 获取详细数据类型(基本数据类型和各类常见引用类型)如:

layui._typeof([]); //array layui._typeof({}); //object layui._typeof(new Date()); //date等等。

该方法为 layui 2.6.7 新增
layui._isArray(obj) 对象是否为泛数组结构。如 Array、NodeList、jQuery 对象等等。

layui._isArray([1,6]); //true layui._isArray($('div')); //true layui._isArray(document.querySelectorAll('div')); //true

该方法为 layui 2.6.7 新增
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.url(href) 用于将一段 URL 链接中的 pathname、search、hash 属性值进行对象化处理

参数: href 可选。若不传,则自动读取当前页面的 url(即:location.href)
示例:var url = layui.url();

layui.hint() 向控制台打印一些异常信息,目前只返回了 error 方法:
layui.hint().error('出错啦');
layui.stope(e) 阻止事件冒泡
layui.onevent(modName, events, callback) 增加自定义模块事件。有兴趣的同学可以阅读 layui.js 源码以及 form 模块
layui.event(modName, events, params) 执行自定义模块事件,搭配 onevent 使用
layui.off(events, modName) 用于移除模块相关事件的监听(v2.5.7 新增)

如:layui.off('select(filter)', 'form')
那么 form.on('select(filter)', callback)的事件将会被移除。

layui.factory(modName) 用于获取模块对应的 define 回调函数

layui 部分模块依赖 jQuery(比如 layer),但是你并不用去额外加载 jQuery。layui 已经将 jQuery 最稳定的一个版本改为 layui 的内部模块,当你去使用 layer 之类的模块时,它会首先判断你的页面是否已经引入了 jQuery,如果没有,则加载内部的 jQuery 模块,如果有,则不会加载。

另外,我们的图标取材于阿里巴巴矢量图标库(iconfont),构建工具采用 Gulp 。除此之外,不依赖于任何第三方工具。

layui - 在每一个细节中,用心与你沟通