升级.net8暂存
This commit is contained in:
@ -5,105 +5,221 @@
|
||||
layui.define('jquery', function(exports){
|
||||
"use strict";
|
||||
|
||||
var $ = layui.$
|
||||
,hint = layui.hint()
|
||||
var $ = layui.$;
|
||||
var hint = layui.hint();
|
||||
|
||||
//外部接口
|
||||
,util = {
|
||||
//固定块
|
||||
// 外部接口
|
||||
var util = {
|
||||
// 固定块
|
||||
fixbar: function(options){
|
||||
var ELEM = 'layui-fixbar', TOP_BAR = 'layui-fixbar-top'
|
||||
,dom = $(document), body = $('body')
|
||||
,is, timer;
|
||||
var ELEM = 'layui-fixbar';
|
||||
var $doc = $(document);
|
||||
|
||||
options = $.extend({
|
||||
showHeight: 200 //出现TOP的滚动条高度临界值
|
||||
// 默认可选项
|
||||
options = $.extend(true, {
|
||||
target: 'body', // fixbar 的插入目标选择器
|
||||
bars: [], // bar 信息
|
||||
default: true, // 是否显示默认 bar
|
||||
margin: 160, // 出现 top bar 的滚动条高度临界值
|
||||
duration: 320 // top bar 等动画时长(毫秒)
|
||||
}, options);
|
||||
|
||||
options.bar1 = options.bar1 === true ? '' : options.bar1;
|
||||
options.bar2 = options.bar2 === true ? '' : options.bar2;
|
||||
options.bgcolor = options.bgcolor ? ('background-color:' + options.bgcolor) : '';
|
||||
|
||||
var icon = [options.bar1, options.bar2, ''] //图标:信息、问号、TOP
|
||||
,elem = $(['<ul class="'+ ELEM +'">'
|
||||
,options.bar1 ? '<li class="layui-icon" lay-type="bar1" style="'+ options.bgcolor +'">'+ icon[0] +'</li>' : ''
|
||||
,options.bar2 ? '<li class="layui-icon" lay-type="bar2" style="'+ options.bgcolor +'">'+ icon[1] +'</li>' : ''
|
||||
,'<li class="layui-icon '+ TOP_BAR +'" lay-type="top" style="'+ options.bgcolor +'">'+ icon[2] +'</li>'
|
||||
,'</ul>'].join(''))
|
||||
,topBar = elem.find('.'+TOP_BAR)
|
||||
,scroll = function(){
|
||||
var stop = dom.scrollTop();
|
||||
if(stop >= (options.showHeight)){
|
||||
is || (topBar.show(), is = 1);
|
||||
} else {
|
||||
is && (topBar.hide(), is = 0);
|
||||
|
||||
// 目标元素对象
|
||||
var $target = $(options.target);
|
||||
|
||||
// 滚动条所在元素对象
|
||||
var $scroll = options.scroll
|
||||
? $(options.scroll)
|
||||
: $(options.target === 'body' ? $doc : $target)
|
||||
|
||||
// 是否提供默认图标
|
||||
if(options.default){
|
||||
// 兼容旧版本的一些属性
|
||||
if(options.bar1){
|
||||
options.bars.push({
|
||||
type: 'bar1',
|
||||
icon: 'layui-icon-chat'
|
||||
});
|
||||
}
|
||||
};
|
||||
if($('.'+ ELEM)[0]) return;
|
||||
|
||||
typeof options.css === 'object' && elem.css(options.css);
|
||||
body.append(elem), scroll();
|
||||
|
||||
//bar点击事件
|
||||
elem.find('li').on('click', function(){
|
||||
var othis = $(this), type = othis.attr('lay-type');
|
||||
if(type === 'top'){
|
||||
$('html,body').animate({
|
||||
scrollTop : 0
|
||||
}, 200);
|
||||
if(options.bar2){
|
||||
options.bars.push({
|
||||
type: 'bar2',
|
||||
icon: 'layui-icon-help'
|
||||
});
|
||||
}
|
||||
options.click && options.click.call(this, type);
|
||||
// 默认 top bar
|
||||
options.bars.push({
|
||||
type: 'top',
|
||||
icon: 'layui-icon-top'
|
||||
});
|
||||
}
|
||||
|
||||
var elem = $('<ul>').addClass(ELEM);
|
||||
var elemTopBar;
|
||||
|
||||
// 遍历生成 bars 节点
|
||||
layui.each(options.bars, function(i, item){
|
||||
var elemBar = $('<li class="layui-icon">');
|
||||
|
||||
// 设置 bar 相关属性
|
||||
elemBar.addClass(item.icon).attr({
|
||||
'lay-type': item.type,
|
||||
'style': item.style || (options.bgcolor ? 'background-color: '+ options.bgcolor : '')
|
||||
}).html(item.content);
|
||||
|
||||
// bar 点击事件
|
||||
elemBar.on('click', function(){
|
||||
var type = $(this).attr('lay-type');
|
||||
if(type === 'top'){
|
||||
(
|
||||
options.target === 'body'
|
||||
? $('html,body')
|
||||
: $scroll
|
||||
).animate({
|
||||
scrollTop : 0
|
||||
}, options.duration);
|
||||
}
|
||||
typeof options.click === 'function' && options.click.call(this, type);
|
||||
});
|
||||
|
||||
// 自定义任意事件
|
||||
if(layui.type(options.on) === 'object'){
|
||||
layui.each(options.on, function(eventName, callback){
|
||||
elemBar.on(eventName, function(){
|
||||
var type = $(this).attr('lay-type');
|
||||
typeof callback === 'function' && callback.call(this, type);
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
// 获得 top bar 节点
|
||||
if(item.type === 'top'){
|
||||
elemBar.addClass('layui-fixbar-top');
|
||||
elemTopBar = elemBar;
|
||||
}
|
||||
|
||||
elem.append(elemBar); // 插入 bar 节点
|
||||
});
|
||||
|
||||
//Top显示控制
|
||||
dom.on('scroll', function(){
|
||||
|
||||
// 若目标元素已存在 fixbar,则移除旧的节点
|
||||
$target.find('.'+ ELEM).remove();
|
||||
|
||||
// 向目标元素插入 fixbar 节点
|
||||
typeof options.css === 'object' && elem.css(options.css);
|
||||
$target.append(elem);
|
||||
|
||||
// top bar 的显示隐藏
|
||||
if(elemTopBar){
|
||||
var lock;
|
||||
var setTopBar = (function setTopBar(){
|
||||
var top = $scroll.scrollTop();
|
||||
if(top >= options.margin){
|
||||
lock || (elemTopBar.show(), lock = 1);
|
||||
} else {
|
||||
lock && (elemTopBar.hide(), lock = 0);
|
||||
}
|
||||
return setTopBar;
|
||||
})();
|
||||
}
|
||||
|
||||
// 根据 scrollbar 设置 fixbar 相关状态
|
||||
var timer;
|
||||
$scroll.on('scroll', function(){
|
||||
if(!setTopBar) return;
|
||||
clearTimeout(timer);
|
||||
timer = setTimeout(function(){
|
||||
scroll();
|
||||
setTopBar();
|
||||
}, 100);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
//倒计时
|
||||
,countdown: function(endTime, serverTime, callback){
|
||||
var that = this
|
||||
,type = typeof serverTime === 'function'
|
||||
,end = new Date(endTime).getTime()
|
||||
,now = new Date((!serverTime || type) ? new Date().getTime() : serverTime).getTime()
|
||||
,count = end - now
|
||||
,time = [
|
||||
Math.floor(count/(1000*60*60*24)) //天
|
||||
,Math.floor(count/(1000*60*60)) % 24 //时
|
||||
,Math.floor(count/(1000*60)) % 60 //分
|
||||
,Math.floor(count/1000) % 60 //秒
|
||||
];
|
||||
// 倒计时
|
||||
countdown: function(options){
|
||||
var that = this;
|
||||
|
||||
// 默认可选项
|
||||
options = $.extend(true, {
|
||||
date: new Date(),
|
||||
now: new Date()
|
||||
}, options);
|
||||
|
||||
// 兼容旧版参数
|
||||
var args = arguments;
|
||||
if(args.length > 1){
|
||||
options.date = new Date(args[0]);
|
||||
options.now = new Date(args[1]);
|
||||
options.clock = args[2];
|
||||
}
|
||||
|
||||
// 实例对象
|
||||
var inst = {
|
||||
options: options,
|
||||
clear: function(){ // 清除计时器
|
||||
clearTimeout(inst.timer);
|
||||
},
|
||||
reload: function(opts){ // 重置倒计时
|
||||
this.clear();
|
||||
$.extend(true, this.options, {
|
||||
now: new Date()
|
||||
}, opts);
|
||||
count();
|
||||
}
|
||||
};
|
||||
|
||||
typeof options.ready === 'function' && options.ready();
|
||||
|
||||
// 计算倒计时
|
||||
var count = (function fn(){
|
||||
var date = new Date(options.date);
|
||||
var now = new Date(options.now);
|
||||
var countTime = function(time){
|
||||
return time > 0 ? time : 0;
|
||||
}(date.getTime() - now.getTime());
|
||||
var result = {
|
||||
d: Math.floor(countTime/(1000*60*60*24)), // 天
|
||||
h: Math.floor(countTime/(1000*60*60)) % 24, // 时
|
||||
m: Math.floor(countTime/(1000*60)) % 60, // 分
|
||||
s: Math.floor(countTime/1000) % 60 // 秒
|
||||
};
|
||||
var next = function(){
|
||||
now.setTime(now.getTime() + 1000);
|
||||
options.now = now;
|
||||
count();
|
||||
};
|
||||
|
||||
// 兼容旧版返回值
|
||||
if(args.length > 1) result = [result.d,result.h,result.m,result.s]
|
||||
|
||||
// 计时 - 以秒间隔
|
||||
inst.timer = setTimeout(next, 1000);
|
||||
typeof options.clock === 'function' && options.clock(result, inst);
|
||||
|
||||
// 计时完成
|
||||
if(countTime <= 0){
|
||||
clearTimeout(inst.timer);
|
||||
typeof options.done === 'function' && options.done(result, inst);
|
||||
};
|
||||
|
||||
return fn;
|
||||
})();
|
||||
|
||||
if(type) callback = serverTime;
|
||||
|
||||
var timer = setTimeout(function(){
|
||||
that.countdown(endTime, now + 1000, callback);
|
||||
}, 1000);
|
||||
|
||||
callback && callback(count > 0 ? time : [0,0,0,0], serverTime, timer);
|
||||
|
||||
if(count <= 0) clearTimeout(timer);
|
||||
return timer;
|
||||
}
|
||||
return inst;
|
||||
},
|
||||
|
||||
//某个时间在当前时间的多久前
|
||||
,timeAgo: function(time, onlyDate){
|
||||
var that = this
|
||||
,arr = [[], []]
|
||||
,stamp = new Date().getTime() - new Date(time).getTime();
|
||||
// 某个时间在当前时间的多久前
|
||||
timeAgo: function(time, onlyDate){
|
||||
var that = this;
|
||||
var arr = [[], []];
|
||||
var stamp = new Date().getTime() - new Date(time).getTime();
|
||||
|
||||
//返回具体日期
|
||||
// 返回具体日期
|
||||
if(stamp > 1000*60*60*24*31){
|
||||
stamp = new Date(time);
|
||||
arr[0][0] = that.digit(stamp.getFullYear(), 4);
|
||||
arr[0][1] = that.digit(stamp.getMonth() + 1);
|
||||
arr[0][2] = that.digit(stamp.getDate());
|
||||
|
||||
//是否输出时间
|
||||
// 是否输出时间
|
||||
if(!onlyDate){
|
||||
arr[1][0] = that.digit(stamp.getHours());
|
||||
arr[1][1] = that.digit(stamp.getMinutes());
|
||||
@ -112,22 +228,22 @@ layui.define('jquery', function(exports){
|
||||
return arr[0].join('-') + ' ' + arr[1].join(':');
|
||||
}
|
||||
|
||||
//30天以内,返回“多久前”
|
||||
// 30 天以内,返回「多久前」
|
||||
if(stamp >= 1000*60*60*24){
|
||||
return ((stamp/1000/60/60/24)|0) + '天前';
|
||||
return ((stamp/1000/60/60/24)|0) + ' 天前';
|
||||
} else if(stamp >= 1000*60*60){
|
||||
return ((stamp/1000/60/60)|0) + '小时前';
|
||||
} else if(stamp >= 1000*60*3){ //3分钟以内为:刚刚
|
||||
return ((stamp/1000/60)|0) + '分钟前';
|
||||
return ((stamp/1000/60/60)|0) + ' 小时前';
|
||||
} else if(stamp >= 1000*60*3){ // 3 分钟以内为:刚刚
|
||||
return ((stamp/1000/60)|0) + ' 分钟前';
|
||||
} else if(stamp < 0){
|
||||
return '未来';
|
||||
} else {
|
||||
return '刚刚';
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
//数字前置补零
|
||||
,digit: function(num, length){
|
||||
// 数字前置补零
|
||||
digit: function(num, length){
|
||||
var str = '';
|
||||
num = String(num);
|
||||
length = length || 2;
|
||||
@ -135,10 +251,10 @@ layui.define('jquery', function(exports){
|
||||
str += '0';
|
||||
}
|
||||
return num < Math.pow(10, length) ? str + (num|0) : num;
|
||||
}
|
||||
},
|
||||
|
||||
//转化为日期格式字符
|
||||
,toDateString: function(time, format){
|
||||
// 转化为日期格式字符
|
||||
toDateString: function(time, format){
|
||||
//若 null 或空字符,则返回空字符
|
||||
if(time === null || time === '') return '';
|
||||
|
||||
@ -167,10 +283,10 @@ layui.define('jquery', function(exports){
|
||||
.replace(/HH/g, hms[0])
|
||||
.replace(/mm/g, hms[1])
|
||||
.replace(/ss/g, hms[2]);
|
||||
}
|
||||
},
|
||||
|
||||
//转义 html
|
||||
,escape: function(html){
|
||||
// 转义 html
|
||||
escape: function(html){
|
||||
var exp = /[<"'>]|&(?=#[a-zA-Z0-9]+)/g;
|
||||
if(html === undefined || html === null) return '';
|
||||
|
||||
@ -180,20 +296,31 @@ layui.define('jquery', function(exports){
|
||||
return html.replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')
|
||||
.replace(/</g, '<').replace(/>/g, '>')
|
||||
.replace(/'/g, ''').replace(/"/g, '"');
|
||||
}
|
||||
},
|
||||
|
||||
//还原转义的 html
|
||||
,unescape: function(html){
|
||||
// 还原转义的 html
|
||||
unescape: function(html){
|
||||
if(html === undefined || html === null) html = '';
|
||||
html += '';
|
||||
|
||||
return html.replace(/\&/g, '&')
|
||||
.replace(/\</g, '<').replace(/\>/g, '>')
|
||||
.replace(/\'/g, '\'').replace(/\"/g, '"');
|
||||
}
|
||||
},
|
||||
|
||||
// 打开新窗口
|
||||
openWin: function(options){
|
||||
var win;
|
||||
options = options || {};
|
||||
win = options.window || window.open((options.url || ''), options.target, options.specs);
|
||||
if(options.url) return;
|
||||
win.document.open('text/html', 'replace');
|
||||
win.document.write(options.content || '');
|
||||
win.document.close();
|
||||
},
|
||||
|
||||
//让指定的元素保持在可视区域
|
||||
,toVisibleArea: function(options){
|
||||
// 让指定的元素保持在可视区域
|
||||
toVisibleArea: function(options){
|
||||
options = $.extend({
|
||||
margin: 160 //触发动作的边界值
|
||||
,duration: 200 //动画持续毫秒数
|
||||
@ -218,10 +345,10 @@ layui.define('jquery', function(exports){
|
||||
obj[SCROLL_NAME] = thisOffset - size/2 + scrollValue
|
||||
scrollElem.animate(obj, options.duration);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
//批量事件
|
||||
,event: function(attr, obj, eventType){
|
||||
event: function(attr, obj, eventType){
|
||||
var _body = $('body');
|
||||
eventType = eventType || 'click';
|
||||
|
||||
|
Reference in New Issue
Block a user