You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
7.8 KiB
180 lines
7.8 KiB
/** layui-v2.5.6 MIT License By https://www.layui.com */
|
|
layui.define("jquery", function(e) {
|
|
"use strict";
|
|
var t = layui.$, // 引入 jQuery 库
|
|
i = {
|
|
// 固定操作栏(侧边固定按钮)
|
|
fixbar: function(e) {
|
|
var i, n,
|
|
a = "layui-fixbar", // 固定按钮的 CSS 类名
|
|
o = "layui-fixbar-top", // 顶部按钮的 CSS 类名
|
|
r = t(document), // 获取文档对象
|
|
l = t("body"); // 获取页面的 body 元素
|
|
// 配置项默认值
|
|
e = t.extend({ showHeight: 200 }, e);
|
|
// 如果没有设置 bar1 和 bar2 的图标,默认使用图标
|
|
e.bar1 = e.bar1 === !0 ? "" : e.bar1;
|
|
e.bar2 = e.bar2 === !0 ? "" : e.bar2;
|
|
// 设置背景颜色样式
|
|
e.bgcolor = e.bgcolor ? "background-color:" + e.bgcolor : "";
|
|
|
|
var c = [e.bar1, e.bar2, ""];
|
|
// 创建固定操作栏的 HTML 结构
|
|
var u = t([
|
|
'<ul class="'+a+'">',
|
|
e.bar1 ? '<li class="layui-icon" lay-type="bar1" style="'+e.bgcolor+'">'+c[0]+"</li>" : "",
|
|
e.bar2 ? '<li class="layui-icon" lay-type="bar2" style="'+e.bgcolor+'">'+c[1]+"</li>" : "",
|
|
'<li class="layui-icon '+o+'" lay-type="top" style="'+e.bgcolor+'">'+c[2]+"</li>",
|
|
"</ul>"
|
|
].join(""));
|
|
|
|
var g = u.find("."+o);
|
|
// 滚动事件:当页面滚动到指定高度时,显示操作栏
|
|
var s = function() {
|
|
var t = r.scrollTop();
|
|
t >= e.showHeight ? i || (g.show(), i = 1) : i && (g.hide(), i = 0);
|
|
};
|
|
|
|
// 如果操作栏未渲染,则将其添加到页面
|
|
t("."+a)[0] || (
|
|
"object" == typeof e.css && u.css(e.css),
|
|
l.append(u),
|
|
s(),
|
|
// 绑定点击事件
|
|
u.find("li").on("click", function() {
|
|
var i = t(this),
|
|
n = i.attr("lay-type");
|
|
"top" === n && t("html,body").animate({ scrollTop: 0 }, 200);
|
|
e.click && e.click.call(this, n);
|
|
}),
|
|
r.on("scroll", function() {
|
|
clearTimeout(n);
|
|
n = setTimeout(function() {
|
|
s();
|
|
}, 100);
|
|
})
|
|
);
|
|
},
|
|
|
|
// 倒计时功能
|
|
countdown: function(e, t, i) {
|
|
var n = this,
|
|
a = "function" == typeof t, // 如果 t 是函数
|
|
o = new Date(e).getTime(), // 目标时间戳
|
|
r = new Date(!t || a ? (new Date).getTime() : t).getTime(), // 当前时间戳
|
|
l = o - r, // 计算时间差
|
|
c = [
|
|
Math.floor(l / 864e5), // 天数
|
|
Math.floor(l / 36e5) % 24, // 小时
|
|
Math.floor(l / 6e4) % 60, // 分钟
|
|
Math.floor(l / 1e3) % 60 // 秒
|
|
];
|
|
// 如果 t 是函数,则执行回调
|
|
a && (i = t);
|
|
var u = setTimeout(function() {
|
|
n.countdown(e, r + 1e3, i);
|
|
}, 1e3);
|
|
// 回调函数,传递时间差和时间数组
|
|
return i && i(l > 0 ? c : [0, 0, 0, 0], t, u),
|
|
l <= 0 && clearTimeout(u), // 当倒计时结束,清除定时器
|
|
u;
|
|
},
|
|
|
|
// 将时间格式化为“XX时间前”
|
|
timeAgo: function(e, t) {
|
|
var i = this,
|
|
n = [[], []],
|
|
a = (new Date).getTime() - new Date(e).getTime(); // 计算当前时间与给定时间的差值
|
|
if (a > 26784e5) { // 如果时间差超过 31 天,显示完整的时间
|
|
a = new Date(e);
|
|
n[0][0] = i.digit(a.getFullYear(), 4);
|
|
n[0][1] = i.digit(a.getMonth() + 1);
|
|
n[0][2] = i.digit(a.getDate());
|
|
t || (n[1][0] = i.digit(a.getHours()), n[1][1] = i.digit(a.getMinutes()), n[1][2] = i.digit(a.getSeconds()));
|
|
return n[0].join("-") + " " + n[1].join(":");
|
|
}
|
|
if (a >= 864e5) return (a / 1e3 / 60 / 60 / 24 | 0) + "天前";
|
|
if (a >= 36e5) return (a / 1e3 / 60 / 60 | 0) + "小时前";
|
|
if (a >= 18e4) return (a / 1e3 / 60 | 0) + "分钟前";
|
|
return a < 0 ? "未来" : "刚刚";
|
|
},
|
|
|
|
// 数字补零
|
|
digit: function(e, t) {
|
|
var i = "";
|
|
e = String(e);
|
|
t = t || 2;
|
|
for (var n = e.length; n < t; n++) i += "0";
|
|
return e < Math.pow(10, t) ? i + (0 | e) : e;
|
|
},
|
|
|
|
// 将时间转为指定格式字符串
|
|
toDateString: function(e, t) {
|
|
var i = this,
|
|
n = new Date(e || new Date),
|
|
a = [i.digit(n.getFullYear(), 4), i.digit(n.getMonth() + 1), i.digit(n.getDate())],
|
|
o = [i.digit(n.getHours()), i.digit(n.getMinutes()), i.digit(n.getSeconds())];
|
|
return t = t || "yyyy-MM-dd HH:mm:ss",
|
|
t.replace(/yyyy/g, a[0])
|
|
.replace(/MM/g, a[1])
|
|
.replace(/dd/g, a[2])
|
|
.replace(/HH/g, o[0])
|
|
.replace(/mm/g, o[1])
|
|
.replace(/ss/g, o[2]);
|
|
},
|
|
|
|
// 转义 HTML 字符
|
|
escape: function(e) {
|
|
return String(e || "").replace(/&(?!#?[a-zA-Z0-9]+;)/g, "&")
|
|
.replace(/</g, "<")
|
|
.replace(/>/g, ">")
|
|
.replace(/'/g, "'")
|
|
.replace(/"/g, """);
|
|
},
|
|
|
|
// 自定义事件绑定
|
|
event: function(e, n, a) {
|
|
var o = t("body");
|
|
return a = a || "click", // 默认事件类型为 "click"
|
|
n = i.event[e] = t.extend(!0, i.event[e], n) || {},
|
|
i.event.UTIL_EVENT_CALLBACK = i.event.UTIL_EVENT_CALLBACK || {},
|
|
o.off(a, "*[" + e + "]", i.event.UTIL_EVENT_CALLBACK[e]),
|
|
i.event.UTIL_EVENT_CALLBACK[e] = function() {
|
|
var i = t(this),
|
|
a = i.attr(e);
|
|
"function" == typeof n[a] && n[a].call(this, i);
|
|
},
|
|
o.on(a, "*[" + e + "]", i.event.UTIL_EVENT_CALLBACK[e]),
|
|
n;
|
|
}
|
|
};
|
|
|
|
// 窗口大小变化事件(自适应布局)
|
|
!function(e, t, i) {
|
|
"$:nomunge";
|
|
function n() {
|
|
a = t[l](function() {
|
|
o.each(function() {
|
|
var t = e(this),
|
|
i = t.width(),
|
|
n = t.height(),
|
|
a = e.data(this, u);
|
|
(i !== a.w || n !== a.h) && t.trigger(c, [a.w = i, a.h = n]);
|
|
});
|
|
n();
|
|
}, r[g]);
|
|
}
|
|
var a,
|
|
o = e([]),
|
|
r = e.resize = e.extend(e.resize, {}),
|
|
l = "setTimeout",
|
|
c = "resize",
|
|
u = c + "-special-event",
|
|
g = "delay",
|
|
s = "throttleWindow";
|
|
r[g] = 250;
|
|
r[s] = !0;
|
|
e.event.special[c] = {
|
|
setup: function() {
|
|
if (!r[s] && this[l]) return !1;
|