release v2.8.13

release v2.8.13
pull/1316/head v2.8.13
贤心 1 year ago committed by GitHub
commit 35c2fa101d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

File diff suppressed because one or more lines are too long

2
dist/layui.js vendored

File diff suppressed because one or more lines are too long

@ -109,7 +109,7 @@ npm i layui
点击上方 `Preview` 标签可进行效果预览。
<h2 id="help" lay-toc="{}">其他帮助</h2>
<h2 id="help">其他帮助</h2>
- <a href="https://codepen.io/layui/pen/bGxZXrd" target="_blank" rel="nofollow">在线测试</a>
- <a href="https://github.com/Sight-wcg/layui-theme-dark" target="_blank">深色主题</a> (社区贡献)

@ -205,7 +205,7 @@ table.render({
</tr>
<tr>
<td>exportTemplet <sup>2.6.9+</sup></td>
<td>
<td colspan="3">
<div class="ws-anchor" id="cols.exportTemplet">
@ -223,8 +223,6 @@ exportTemplet: function(d, obj){
```
</td>
<td>string<br>function</td>
<td>-</td>
</tr>
<tr>
<td>
@ -232,21 +230,31 @@ exportTemplet: function(d, obj){
[totalRow](#cols.totalRow)
</td>
<td>
<td colspan="3">
<div class="ws-anchor" id="cols.totalRow">
是否开启该列的自动合计功能。
是否开启该列的自动合计功能,默认不开启
</div>
- 前端合计
- **采用前端合计**
{{!
```
totalRow: true // 开启合计行,并默认对当前所有行数据进行前端合计
// 开启并输出合计行前端合计结果
totalRow: true
// 开启并输出合计行自定义模板。此处 TOTAL_NUMS 即为合计结果的固定特定字段
totalRow: '{{= d.TOTAL_NUMS }} 单位'
// 取整或其他运算
totalRow: '{{= parseInt(d.TOTAL_NUMS) }}'
```
!}}
注意:*合计行模板仅支持字符写法,不支持函数写法,请勿与 `templet` 用法混淆。*
- 后端合计
- **采用后端合计**
前端合计的数据有限,因此常常需要后端直接返回合计行结果,此时将优先读取后端的合计行返回结果,其格式如下:
前端合计的数据有限,因此常需要后端直接返回合计结果,组件将优先读取。数据格式如下:
```
{
@ -261,26 +269,18 @@ totalRow: true // 开启合计行,并默认对当前所有行数据进行前
}
```
如上,在 `totalRow` 中返回所需统计的列字段名和值即可。
<br>`totalRow` 字段同样可以通过 `parseData` 回调来解析成为 table 组件所规定的数据格式。
- 合计行模板
在合计行自定义模板中输出后端返回的合计数据
{{!
```
// 获取前端统计的动态字段
totalRow: '{{= d.TOTAL_NUMS }} 单位' // 还比如只取整:'{{= parseInt(d.TOTAL_NUMS) }}'
// 获取返回数据中的统计字段
totalRow: '分数:{{= d.TOTAL_ROW.score }}' // TOTAL_ROW 即对应返回据中的 totalRow
// 获取后端接口返回数据中的统计字段。此处 TOTAL_ROW 即对应返回据中的 totalRow
totalRow: '分数:{{= d.TOTAL_ROW.score }}'
```
!}}
</td>
<td>boolean<br>string</td>
<td>
`false`
如上,在 `totalRow` 中返回所需统计的列字段名和值即可。
`totalRow` 字段同样可以通过 `parseData` 回调来解析成为 table 组件所规定的数据格式。
</td>
</tr>

@ -26,6 +26,7 @@ layui.use(function(){
elem: '#ID-tree-demo',
data: data,
showCheckbox: true, // 是否显示复选框
onlyIconControl: true, // 是否仅允许节点左侧图标控制展开收缩
id: 'demo-id-1',
isJump: true, // 是否允许点击节点时弹出新窗口跳转
click: function(obj){

@ -6,6 +6,7 @@ toc: true
# 树表组件 <sup title="指在该版本新增的组件">2.8+</sup>
> 树表组件 `treeTable` 是基于 `table` 组件延伸的树形表格组件,支持常见的树组件功能。
> 注意:*该组件不支持 IE8*
<h2 id="examples" lay-toc="{anchor: null}" style="margin-bottom: 0;">示例</h2>

@ -23,7 +23,7 @@ toc: true
| [util.fixbar(options)](../fixbar/) | 固定条组件 |
| [util.countdown(options)](#countdown) | 倒计时组件 |
| [util.timeAgo(time, onlyDate)](#timeAgo) | 某个时间在多久前 |
| [util.toDateString(time, format)](#toDateString) | 将毫秒数或日期对象转换成日期格式字符 |
| [util.toDateString(time, format, options)](#toDateString) | 将毫秒数或日期对象转换成日期格式字符 |
| [util.digit(num, length)](#digit) | 数字前置补零 |
| [util.escape(str)](#escape) | 转义 HTML 字符 |
| [util.unescape(str)](#escape) | 还原 HTML 字符 |
@ -97,15 +97,57 @@ var result = util.timeAgo(1672531200000); // 2023-01-01 00:00:00
<h3 id="toDateString" class="ws-anchor ws-bold">转换日期格式字符</h3>
`var result = util.toDateString(time, format);`
`var result = util.toDateString(time, format, options);`
- 参数 `time` : 毫秒数或日期对象
- 参数 `format` : 日期字符格式。默认格式:`yyyy-MM-dd HH:mm:ss` 。可自定义,如: `yyyy年MM月dd日`
- 参数 `options` <sup>2.8.13+</sup> : 该方法的属性可选项,详见下表:
| 属性名 | 描述 | 类型 | 默认值 |
| --- | --- | --- | --- |
| customMeridiem | 自定义 meridiem 格式 | Function | - |
```
var result = util.toDateString(1672531200000, 'yyyy-MM-dd'); // 2023-01-01
// 中括号中的字符会原样保留 2.8.13+
var result2 = util.toDateString(new Date('2023-01-01 11:35:25'), 'ss[s]'); // 25s
// 自定义 meridiem
var result3 = util.toDateString(
'2023-01-01 11:35:25',
'hh:mm:ss A',
{
customMeridiem: function(hours, minutes){
return (hours < 12 ? 'AM' : 'PM')
//.split('').join('.') // 有句点A.M.
//.toLowerCase() // 小写a.m.
}
}
); // 11:35:25 AM
```
参数 `format` 所有可用的格式列表 :
| 格式 | 示例 | 描述 |
| --- | --- | --- |
| yy <sup>2.8.13+</sup> | 23 | 年,两位数 |
| yyyy | 2023 | 年,四位数 |
| M <sup>2.8.13+</sup> | 1-12 | 月 |
| MM | 01-12 | 月,两位数 |
| d <sup>2.8.13+</sup> | 1-31 | 日 |
| dd | 01-31 | 日,两位数 |
| H <sup>2.8.13+</sup> | 0-23 | 小时 |
| HH | 00-23 | 小时,两位数 |
| h <sup>2.8.13+</sup> | 1-12 | 小时12 小时制 |
| hh <sup>2.8.13+</sup> | 01-12 | 小时12 小时制,两位数 |
| A <sup>2.8.13+</sup> | 凌晨/早上/上午/中午/下午/晚上 | meridiem |
| m <sup>2.8.13+</sup> | 0-59 | 分钟 |
| mm | 00-59 | 分钟,两位数 |
| s <sup>2.8.13+</sup> | 0-59 | 秒 |
| ss | 00-59 | 秒,两位数 |
| SSS <sup>2.8.13+</sup> | 000-999 | 毫秒,三位数 |
<h3 id="digit" class="ws-anchor ws-bold">数字前置补零</h3>
`util.digit(num, length);`

@ -11,6 +11,31 @@ toc: true
> 导读:📑 [Layui 2.8 《升级指南》](/notes/2.8/upgrade-guide.html) · 📑 [Layui 新版文档站上线初衷](/notes/2.8/news.html)
<h2 id="2.8.13" class="ws-anchor">
2.8.13
<span class="layui-badge-rim">2023-08-08</span>
</h2>
- #### table
- 优化 在自定义模板中放置 `checkbox` 时对应的文字显示异常问题 # I7LQNO
- 调整 `totalRow` 属性在 `table.reloadData()` 数据重载时的支持 # I7R6VY
- #### treeTable
- 修复 执行 `treeTable.addNodes()` 增加节点导致当前节点选中状态丢失的问题 # I7Q6IP
- 优化 增加和删除节点时,对容器尺寸重新进行自动适配
- #### tree
- 优化 容器样式,以解决用于其他组件内部可能造成的样式异常问题 # I7QAO3
- #### dropdown
- **调整** `data.title` 属性对 HTML 的转义处理。若不转义,可通过 `templet` 属性实现 # I7Q6IV
- #### util
- 重构 `util.toDateString()` 转换日期格式字符组件,以提供更强大的占位符支持 # 1314
- 修复 `util.fixbar()` 组件因 `default` 属性在 IE8 出现的保留字报错问题
### 下载: [layui-v2.8.13.zip](https://gitee.com/layui/layui/attach_files/1490273/download)
---
<h2 id="2.8.12" class="ws-anchor">
2.8.12
<span class="layui-badge-rim">2023-08-01</span>

@ -46,18 +46,18 @@ layui.use('dropdown', function(){
//,align: 'right'
,data: [{
title: 'menu item 1'
,templet: '<i class="layui-icon layui-icon-light"></i> {{d.title}} <span class="layui-badge-dot"></span>'
,templet: '<i class="layui-icon layui-icon-light"></i> {{= d.title }} <span class="layui-badge-dot"></span>'
,id: ''
,href: ''
,type: '' //菜单类型支持normal/group/parent
},{
title: 'menu item 2'
,templet: '<img src="//cdn.layui.com/avatar/168.jpg?t=123" style="width: 16px;"> {{d.title}}'
title: 'menu item <strong>2</strong>'
,templet: '<img src="https://unpkg.com/outeres@0.1.1/demo/avatar/0.png" style="width: 16px;"> {{- d.title }}'
,id: ''
,href: 'https://www.layui.com/'
,target: '_blank'
},{type: '-'},{},{
title: 'menu item 3'
title: 'menu item 3 <hello>'
,id: ''
,type: 'group'
,child: [{

@ -29,6 +29,14 @@ body{padding: 50px;}
<hr>
请编辑格式:
<div class="layui-inline">
<input type="text" value="yyyy-MM-dd HH:mm:ss" class="layui-input" id="test2"/>
</div>
<span class="layui-word-aux" id="test3"></span>
<hr>
<div id="target-test" style1="position: relative; height: 300px; overflow: auto;">
1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>
</div>
@ -121,6 +129,16 @@ layui.use(['util', 'layer'], function(){
alert(othis.html())
}
});
// 转换日期格式
var timer = null
var toDateString = function (format) {
var dateString = util.toDateString(new Date(), format);
$('#test3').html(dateString)
}
timer = setInterval(() => {
toDateString($('#test2').val())
}, 50)
});
</script>

@ -1,6 +1,6 @@
{
"name": "layui",
"version": "2.8.12",
"version": "2.8.13",
"description": "Classic modular Front-End UI library",
"main": "dist/layui.js",
"license": "MIT",

@ -1071,6 +1071,7 @@ a cite{font-style: normal; *cursor:pointer;}
.layui-table-cell{height: 38px; line-height: 28px; padding: 6px 15px; position: relative; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; box-sizing: border-box;}
.layui-table-cell .layui-form-checkbox[lay-skin="primary"]{top: -1px; padding: 0;}
.layui-table-cell .layui-form-checkbox[lay-skin="primary"] > div{padding-left: 24px;}
.layui-table-cell .layui-table-link{color: #01AAED;}
.layui-table-cell .layui-btn{vertical-align: inherit;}
.layui-table-cell[align="center"]{-webkit-box-pack: center;}
@ -1550,7 +1551,7 @@ body .layui-util-face .layui-layer-content{padding:0; background-color:#fff; co
.layui-tree-pack{display: none; padding-left: 20px; position: relative;}
.layui-tree-line .layui-tree-pack{padding-left: 27px;}
.layui-tree-line .layui-tree-set .layui-tree-set:after{content: ""; position: absolute; top: 14px; left: -9px; width: 17px; height: 0; border-top: 1px dotted #c0c4cc;}
.layui-tree-entry{position: relative; padding: 3px 0; height: 20px; white-space: nowrap;}
.layui-tree-entry{position: relative; padding: 3px 0; height: 26px; white-space: nowrap;}
.layui-tree-entry:hover{background-color: #eee;}
.layui-tree-line .layui-tree-entry:hover{background-color: rgba(0,0,0,0);}
.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color: #999; text-decoration: underline; transition: 0.3s;}
@ -1559,7 +1560,7 @@ body .layui-util-face .layui-layer-content{padding:0; background-color:#fff; co
.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height: 13px;}
.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height: 0;}
.layui-tree-iconClick{display: inline-block; vertical-align: middle; position: relative; height: 20px; line-height: 20px; margin: 0 10px; color: #c0c4cc;}
.layui-tree-icon{height: 12px; line-height: 12px; width: 12px; text-align: center; border: 1px solid #c0c4cc;}
.layui-tree-icon{height: 14px; line-height: 12px; width: 14px; text-align: center; border: 1px solid #c0c4cc;}
.layui-tree-iconClick .layui-icon{font-size: 18px;}
.layui-tree-icon .layui-icon{font-size: 12px; color: #5F5F5F;}
.layui-tree-iconArrow{padding: 0 5px;}
@ -1571,7 +1572,7 @@ body .layui-util-face .layui-layer-content{padding:0; background-color:#fff; co
.layui-tree-btnGroup .layui-icon{display: inline-block; vertical-align: middle; padding: 0 2px; cursor: pointer;}
.layui-tree-btnGroup .layui-icon:hover{color: #999; transition: 0.3s;}
.layui-tree-entry:hover .layui-tree-btnGroup{visibility: visible;}
.layui-tree-editInput{position: relative; display: inline-block; vertical-align: middle; height: 20px; line-height: 20px; padding: 0 3px; border: none; background-color: rgba(0,0,0,0.05);}
.layui-tree-editInput{position: relative; display: inline-block; vertical-align: middle; height: 20px; line-height: 20px; padding: 0; border: none; background-color: rgba(0,0,0,0.05);}
.layui-tree-emptyText{text-align: center; color: #999;}

@ -16,7 +16,7 @@
};
var Layui = function(){
this.v = '2.8.12'; // Layui 版本号
this.v = '2.8.13'; // Layui 版本号
};
// 识别预先可能定义的指定全局对象

@ -5,7 +5,8 @@
layui.define(function(){
var mods = []
,builtin = layui.cache.builtin;
var builtin = layui.cache.builtin;
layui.each(builtin, function(modName){
(modName === 'all' || modName === 'layui.all') || mods.push(modName);
});
@ -15,12 +16,12 @@ layui.define(function(){
}(), function(exports){
"use strict";
var MOD_NAME = 'all'
var MOD_NAME = 'all';
//外部接口
,all = {
config: {}
,time: function(){
// 外部接口
var all = {
config: {},
time: function(){
var time = new Date().getTime() - layui.cache.startTime;
delete layui.cache.startTime;
return time;

@ -3,11 +3,12 @@
* 下拉菜单组件
*/
layui.define(['jquery', 'laytpl', 'lay'], function(exports){
layui.define(['jquery', 'laytpl', 'lay', 'util'], function(exports){
"use strict";
var $ = layui.$;
var laytpl = layui.laytpl;
var util = layui.util;
var hint = layui.hint();
var device = layui.device();
var clickOrMousedown = (device.mobile ? 'touchstart' : 'mousedown');
@ -175,7 +176,7 @@ layui.define(['jquery', 'laytpl', 'lay'], function(exports){
: laytpl(templet).render(item);
}
return title;
}(item.title);
}(util.escape(item.title));
// 初始类型
var type = function(){

@ -2882,7 +2882,7 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){
var dataParams = new RegExp('^('+ [
'elem', 'id', 'cols', 'width', 'height', 'maxHeight',
'toolbar', 'defaultToolbar',
'className', 'css', 'totalRow', 'pagebar'
'className', 'css', 'pagebar'
].join('|') + ')$');
// 过滤与数据无关的参数

@ -125,7 +125,7 @@ layui.define('form', function(exports){
that.checkids = [];
var temp = $('<div class="layui-tree'+ (options.showCheckbox ? " layui-form" : "") + (options.showLine ? " layui-tree-line" : "") +'" lay-filter="LAY-tree-'+ that.index +'"></div>');
var temp = $('<div class="layui-tree layui-border-box'+ (options.showCheckbox ? " layui-form" : "") + (options.showLine ? " layui-tree-line" : "") +'" lay-filter="LAY-tree-'+ that.index +'"></div>');
that.tree(temp);
var othis = options.elem = $(options.elem);

@ -1243,6 +1243,9 @@ layui.define(['table'], function (exports) {
tableView.find('tr[data-level="0"][lay-data-index="' + item4[LAY_DATA_INDEX] + '"]').attr('data-index', i4);
})
options.hasNumberCol && formatNumber(that);
// 重新适配尺寸
table.resize(id);
}
/**
@ -1262,6 +1265,7 @@ layui.define(['table'], function (exports) {
var options = that.getOptions();
var treeOptions = options.tree;
var tableViewElem = options.elem.next();
var checkName = table.config.checkName;
opts = opts || {};
@ -1277,6 +1281,13 @@ layui.define(['table'], function (exports) {
// 添加数据
newNodes = $.extend(true, [], (layui.isArray(newNodes) ? newNodes : [newNodes]));
// 若未传入 LAY_CHECKED 属性,则继承父节点的 checked 状态
layui.each(newNodes, function(i, item){
if(!(checkName in item)){
item[checkName] = parentNode[checkName];
}
})
var tableData = that.getTableData(), dataAfter;
if (!parentNode) {
// 添加到根节点
@ -1384,6 +1395,10 @@ layui.define(['table'], function (exports) {
// 滚动到第一个新增的节点
tableViewElem.find(ELEM_MAIN).find('tr[lay-data-index="' + newNodes[0][LAY_DATA_INDEX] + '"]').get(0).scrollIntoViewIfNeeded();
}
// 重新适配尺寸
table.resize(id);
return newNodes;
}

@ -19,7 +19,7 @@ layui.define('jquery', function(exports){
options = $.extend(true, {
target: 'body', // fixbar 的插入目标选择器
bars: [], // bar 信息
default: true, // 是否显示默认 bar
"default": true, // 是否显示默认 bar
margin: 160, // 出现 top bar 的滚动条高度临界值
duration: 320 // top bar 等动画时长(毫秒)
}, options);
@ -33,7 +33,7 @@ layui.define('jquery', function(exports){
: $(options.target === 'body' ? $doc : $target)
// 是否提供默认图标
if(options.default){
if(options['default']){
// 兼容旧版本的一些属性
if(options.bar1){
options.bars.push({
@ -254,35 +254,71 @@ layui.define('jquery', function(exports){
},
// 转化为日期格式字符
toDateString: function(time, format){
//若 null 或空字符,则返回空字符
toDateString: function(time, format, options){
// 若 null 或空字符,则返回空字符
if(time === null || time === '') return '';
var that = this
,date = new Date(function(){
// 引用自 dayjs
// https://github.com/iamkun/dayjs/blob/v1.11.9/src/constant.js#L30
var REGEX_FORMAT = /\[([^\]]+)]|y{1,4}|M{1,2}|d{1,2}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|SSS/g;
var that = this;
var date = new Date(function(){
if(!time) return;
return isNaN(time) ? time : (typeof time === 'string' ? parseInt(time) : time)
}() || new Date())
,ymd = [
that.digit(date.getFullYear(), 4)
,that.digit(date.getMonth() + 1)
,that.digit(date.getDate())
]
,hms = [
that.digit(date.getHours())
,that.digit(date.getMinutes())
,that.digit(date.getSeconds())
];
if(!date.getDate()) return hint.error('Invalid Msec for "util.toDateString(Msec)"'), '';
var years = date.getFullYear();
var month = date.getMonth();
var days = date.getDate();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var milliseconds = date.getMilliseconds();
var defaultMeridiem = function(hours, minutes){
var hm = hours * 100 + minutes;
if (hm < 600) {
return '凌晨';
} else if (hm < 900) {
return '早上';
} else if (hm < 1100) {
return '上午';
} else if (hm < 1300) {
return '中午';
} else if (hm < 1800) {
return '下午';
}
return '晚上';
};
var meridiem = (options && options.customMeridiem) || defaultMeridiem;
var matches = {
yy: function(){return String(years).slice(-2);},
yyyy: function(){return that.digit(years, 4);},
M: function(){return String(month + 1);},
MM: function(){return that.digit(month + 1);},
d: function(){return String(days);},
dd: function(){return that.digit(days);},
H: function(){return String(hours);},
HH: function(){return that.digit(hours);},
h: function(){return String(hours % 12 || 12);},
hh: function(){return that.digit(hours % 12 || 12);},
A: function(){return meridiem(hours, minutes);},
m: function(){return String(minutes);},
mm: function(){return that.digit(minutes);},
s: function(){return String(seconds);},
ss: function(){return that.digit(seconds);},
SSS: function(){return that.digit(milliseconds, 3);}
}
format = format || 'yyyy-MM-dd HH:mm:ss';
return format.replace(/yyyy/g, ymd[0])
.replace(/MM/g, ymd[1])
.replace(/dd/g, ymd[2])
.replace(/HH/g, hms[0])
.replace(/mm/g, hms[1])
.replace(/ss/g, hms[2]);
return format.replace(REGEX_FORMAT, function(match, $1) {
return $1 || (matches[match] && matches[match]()) || match;
});
},
// 转义 html
@ -322,51 +358,51 @@ layui.define('jquery', function(exports){
// 让指定的元素保持在可视区域
toVisibleArea: function(options){
options = $.extend({
margin: 160 //触发动作的边界值
,duration: 200 //动画持续毫秒数
,type: 'y' //触发方向x 水平、y 垂直
margin: 160, // 触发动作的边界值
duration: 200, // 动画持续毫秒数
type: 'y' // 触发方向x 水平、y 垂直
}, options);
if(!options.scrollElem[0] || !options.thisElem[0]) return;
var scrollElem = options.scrollElem //滚动元素
,thisElem = options.thisElem //目标元素
,vertical = options.type === 'y' //是否垂直方向
,SCROLL_NAME = vertical ? 'scrollTop' : 'scrollLeft' //滚动方法
,OFFSET_NAME = vertical ? 'top' : 'left' //坐标方式
,scrollValue = scrollElem[SCROLL_NAME]() //当前滚动距离
,size = scrollElem[vertical ? 'height' : 'width']() //滚动元素的尺寸
,scrollOffet = scrollElem.offset()[OFFSET_NAME] //滚动元素所处位置
,thisOffset = thisElem.offset()[OFFSET_NAME] - scrollOffet //目标元素当前的所在位置
,obj = {};
var scrollElem = options.scrollElem // 滚动元素
var thisElem = options.thisElem // 目标元素
var vertical = options.type === 'y' // 是否垂直方向
var SCROLL_NAME = vertical ? 'scrollTop' : 'scrollLeft' // 滚动方法
var OFFSET_NAME = vertical ? 'top' : 'left' // 坐标方式
var scrollValue = scrollElem[SCROLL_NAME]() // 当前滚动距离
var size = scrollElem[vertical ? 'height' : 'width']() // 滚动元素的尺寸
var scrollOffet = scrollElem.offset()[OFFSET_NAME] // 滚动元素所处位置
var thisOffset = thisElem.offset()[OFFSET_NAME] - scrollOffet // 目标元素当前的所在位置
var obj = {};
//边界满足条件
// 边界满足条件
if(thisOffset > size - options.margin || thisOffset < options.margin){
obj[SCROLL_NAME] = thisOffset - size/2 + scrollValue
scrollElem.animate(obj, options.duration);
}
},
//批量事件
// 批量事件
event: function(attr, obj, eventType){
var _body = $('body');
eventType = eventType || 'click';
//记录事件回调集合
// 记录事件回调集合
obj = util.event[attr] = $.extend(true, util.event[attr], obj) || {};
//清除委托事件
// 清除委托事件
util.event.UTIL_EVENT_CALLBACK = util.event.UTIL_EVENT_CALLBACK || {};
_body.off(eventType, '*['+ attr +']', util.event.UTIL_EVENT_CALLBACK[attr])
//绑定委托事件
// 绑定委托事件
util.event.UTIL_EVENT_CALLBACK[attr] = function(){
var othis = $(this)
,key = othis.attr(attr);
var othis = $(this);
var key = othis.attr(attr);
(typeof obj[key] === 'function') && obj[key].call(this, othis);
};
//清除旧事件,绑定新事件
// 清除旧事件,绑定新事件
_body.on(eventType, '*['+ attr +']', util.event.UTIL_EVENT_CALLBACK[attr]);
return obj;
@ -375,11 +411,6 @@ layui.define('jquery', function(exports){
util.on = util.event;
// DOM 尺寸变化该创意来自http://benalman.com/projects/jquery-resize-plugin/
/*
!function(a,b,c){"$:nomunge";function l(){f=b[g](function(){d.each(function(){var b=a(this),c=b.width(),d=b.height(),e=a.data(this,i);(c!==e.w||d!==e.h)&&b.trigger(h,[e.w=c,e.h=d])}),l()},e[j])}var f,d=a([]),e=a.resize=a.extend(a.resize,{}),g="setTimeout",h="resize",i=h+"-special-event",j="delay",k="throttleWindow";e[j]=250,e[k]=!0,a.event.special[h]={setup:function(){if(!e[k]&&this[g])return!1;var b=a(this);d=d.add(b),a.data(this,i,{w:b.width(),h:b.height()}),1===d.length&&l()},teardown:function(){if(!e[k]&&this[g])return!1;var b=a(this);d=d.not(b),b.removeData(i),d.length||clearTimeout(f)},add:function(b){function f(b,e,f){var g=a(this),h=a.data(this,i)||{};h.w=e!==c?e:g.width(),h.h=f!==c?f:g.height(),d.apply(this,arguments)}if(!e[k]&&this[g])return!1;var d;return a.isFunction(b)?(d=b,f):(d=b.handler,b.handler=f,void 0)}}}($,window);
*/
// 输出接口
exports('util', util);
});
Loading…
Cancel
Save