024-底层方法

1. 全局配置

1.1. 方法: layui.config(options)。

1.2. 你可以在使用模块之前, 全局化配置一些参数, 尽管大部分时候它不是必须的。目前支持的全局配置项如下:

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

2. 定义模块

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

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

layui.define(function(exports){
	exports('alias', function(){
    		return '一般对子目录模块建立别名';
		}
  	);
});

2.3. exports是一个函数, 它接受两个参数, 第一个参数为模块名, 第二个参数为模块接口, 当你声明了上述的一个模块后, 你就可以在外部使用了, alias就会注册到layui对象下, 即可通过layui.alias()去执行该模块的接口。

2.4. 你也可以在定义一个模块的时候, 声明该模块所需的依赖:

layui.define('code', function(exports){
	exports('etdCode', {
    	title: '代码修饰器扩展模块'
    	,code: function(id, elem, title, height, encode, skin, about){
    		var elem = document.getElementById(id);
    		elem.innerHTML = elem.innerHTML.trim();
    		
    		layui.code({elem, title, height, encode, skin, about});
    	}
  	});
});

2.5. mods参数并非只能是一个数组, 你也可以直接传一个字符型的模块名, 但是这样只能依赖一个模块。上述的'code'即为本模块所依赖的模块, 同时exports函数的第二个参数是一个对象。

2.6. layui的模块接口会绑定在layui对象下, 内部由layui.define()方法来完成。每一个模块都会一个特有的名字, 并且无法被占用。所以你无需担心模块的空间被污染, 除非你主动delete layui.{模块名}。调用模块可通过layui.use方法来实现, 然后再通过layui对象获得模块接口。如:

layui.use(['layer', 'laypage', 'laydate'], function(){
    var layer = layui.layer // 获得layer模块
    	,laypage = layui.laypage // 获得laypage模块
      	,laydate = layui.laydate; // 获得laydate模块
      
    // 使用模块
});

3. 拓展一个模块别名

3.1. 方法: layui.extend(options)。一般用于你的扩展模块, 给具有多级子目录的模块起一个别名。

<script type="text/javascript">
	layui.config({
			base: 'layui/etdCode/'
	}).extend({
	  	alias: 'child/alias'
	});
</script>

3.2. 你也可以忽略base设定的根目录, 直接在extend指定路径。{/}的意思即代表采用自有路径, 即不跟随base路径。

<script type="text/javascript">
	layui.extend({
		mod2: '{/}http://cdn.xxx.com/lib/mod2' 
	});
</script>

4. 扩展模块例子

4.1. 在layui目录下新建一个etdCode作为我们扩展模块的目录

4.2. 在etdCode目录新建一个etdCode.js的扩展模块

4.3. 编辑etdCode.js模块代码

layui.define('code', function(exports){
	exports('etdCode', {
    	title: '代码修饰器扩展模块'
    	,code: function(id, elem, title, height, encode, skin, about){
    		var elem = document.getElementById(id);
    		elem.innerHTML = elem.innerHTML.trim();
    		
    		layui.code({elem, title, height, encode, skin, about});
    	}
  	});
});

4.4. 在etdCode目录下还有一个child目录, 是我们的alias模块

4.5. 编辑alias.js模块代码

layui.define(function(exports){
	exports('alias', function(){
    		return '一般对子目录模块建立别名';
		}
  	);
});

4.6. 编辑extendcode.html使用扩展模块

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />

		<title>code模块的扩展</title>
		
		<link rel="stylesheet" type="text/css" href="layui/css/layui.css">
		<script type="text/javascript" src="layui/layui.js"></script>
	</head>
	<body>
		<pre class="layui-code" id='test1'>
			var person = { 
			    firstName:"Bill",
			    lastName:"Gates",
			    age:50,
			    eyeColor:"blue"
			}
		</pre> 

		<div id='test2'></div>     

		<script type="text/javascript">
			layui.config({
  				base: 'layui/etdCode/'
			}).extend({
			  	alias: 'child/alias'
			});

			// 使用use方法引入模块
			layui.use(['etdCode', 'alias'], function(){
				var etdCode = layui.etdCode;

				layui.$('#test2').text(layui.alias());
				etdCode.code('test1');
			});
		</script> 
	</body>
</html>

4.7. 效果图

5. 获取设备信息

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

5.2. 由于layui的一些功能进行了兼容性处理和响应式支持, 因此该方法同样发挥了至关重要的作用。尤其是在layui mobile模块中的作用可谓举足轻重。该方法返回了丰富的设备信息:

var device = layui.device();
     
// device即可根据不同的设备返回下述不同的信息
{
	os: "windows" // 底层操作系统, windows、linux、mac等
  	,ie: false // ie6-11的版本, 如果不是ie浏览器, 则为false
  	,weixin: false // 是否微信环境
  	,android: false // 是否安卓系统
  	,ios: false // 是否ios系统
  	,mobile: false // 是否为移动设备
}

6. 其它

方法/属性

描述

layui.cache

静态属性。获得一些配置及临时的缓存信息。

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.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.event(modName, events, params)

执行自定义模块事件, 搭配onevent使用。

layui.off(events, modName)

用于移除模块相关事件的监听。

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

layui.factory(modName)

用于获取模块对应的define回调函数。

layui.link(href)

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

layui.data(table, settings)

对localStorage的友好封装。持久化存储, 数据会永久存在, 除非物理删除。

layui.sessionData(table, settings)

对sessionStorage的友好封装。会话性存储, 数据在页面关闭后即失效。

7. 例子

7.1. 代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />

		<title>layui其它底层方法</title>
		
		<link rel="stylesheet" type="text/css" href="layui/css/layui.css">
		<script type="text/javascript" src="layui/layui.js"></script>
	</head>
	<body>
		 <div id="test1"></div>   

		<script type="text/javascript">
			layui.use(['jquery'], function(){
				var $ = layui.jquery;

				// 平台信息
				var device = layui.device();
				var platform = '';
				// 变量对象
				layui.each(device, function(key, value){
					platform += (key + ':' + value + '<br />');
				});
				$('#test1').html(platform);
			});
		</script> 
	</body>
</html>

7.2. 效果图

猜你喜欢

转载自blog.csdn.net/aihiao/article/details/113063223
024