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.
249 lines
9.4 KiB
249 lines
9.4 KiB
// 前端模板
|
|
! function (a) {
|
|
"use strict";
|
|
var b = function (a, c) {
|
|
var d = /[^\w\-\.:]/.test(a) ? new Function(b.arg + ",tmpl", "var _e=tmpl.encode" + b.helper + ",_s='" + a.replace(b.regexp, b.func) + "';return _s;") : b.cache[a] = b.cache[a] || b(b.load(a));
|
|
return c ? d(c, b) : function (a) {
|
|
return d(a, b)
|
|
}
|
|
};
|
|
b.cache = {}, b.load = function (a) {
|
|
return document.getElementById(a).innerHTML
|
|
}, b.regexp = /([\s'\\])(?!(?:[^{]|\{(?!%))*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g, b.func = function (a, b, c, d, e, f) {
|
|
return b ? {
|
|
"\n": "\\n",
|
|
"\r": "\\r",
|
|
" ": "\\t",
|
|
" ": " "
|
|
}[b] || "\\" + b : c ? "=" === c ? "'+_e(" + d + ")+'" : "'+(" + d + "==null?'':" + d + ")+'" : e ? "';" : f ? "_s+='" : void 0
|
|
}, b.encReg = /[<>&"'\x00]/g, b.encMap = {
|
|
"<": "<",
|
|
">": ">",
|
|
"&": "&",
|
|
'"': """,
|
|
"'": "'"
|
|
}, b.encode = function (a) {
|
|
return (null == a ? "" : "" + a).replace(b.encReg, function (a) {
|
|
return b.encMap[a] || ""
|
|
})
|
|
}, b.arg = "o", b.helper = ",print=function(s,e){_s+=e?(s==null?'':s):_e(s);},include=function(s,d){_s+=tmpl(s,d);}", "function" == typeof define && define.amd ? define(function () {
|
|
return b
|
|
}) : a.tmpl = b
|
|
}(this);
|
|
// 迷你发布订阅系统
|
|
(function ($) {
|
|
var o = $({});
|
|
$.subscribe = function () {
|
|
o.on.apply(o, arguments);
|
|
};
|
|
$.unsubscribe = function () {
|
|
o.off.apply(o, arguments);
|
|
};
|
|
$.publish = function () {
|
|
o.trigger.apply(o, arguments);
|
|
};
|
|
}($));
|
|
|
|
$(function () {
|
|
'use strict';
|
|
var win = window;
|
|
win.GLOBAL = win.GLOBAL || {};
|
|
win.hr = win.hr || {};
|
|
|
|
win.hr.version = '1.6.11';
|
|
win.hr.page = win.hr.page || {};
|
|
win.hr.component = win.hr.component || {};
|
|
|
|
/**
|
|
* @description 注册组件
|
|
* @param {String} name 组件名字
|
|
* @param {Object} obj 组件 Javascript 逻辑,JSON 格式
|
|
* @return {Object} 返回 window.hr.component 对象
|
|
* @example
|
|
* hr.regComponent('组件名', {
|
|
* init: function () { // 此 init 方法为必需,组件注册后会执行的方法
|
|
* this.someAction();
|
|
* },
|
|
* someAction: function () {
|
|
* // 组件 Javascript 逻辑,可以根据需要写多个 Function
|
|
* }
|
|
* });
|
|
* 组件注册后如果要再次调用,可以用 hr.component.组件名 获取组件对象
|
|
*/
|
|
win.hr.regComponent = function (name, obj) {
|
|
if (typeof name == 'string' && name !== '') {
|
|
win.hr.util._createNamespace(name.split('.'), obj, win.hr.component);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* @description 注册页面
|
|
* @param {String} name 页面名字
|
|
* @param {Object} obj 页面 Javascript 逻辑,JSON 格式
|
|
* @return {Object} 返回 window.hr.page 对象
|
|
* @example
|
|
* hr.regPage('页面名', {
|
|
* init: function () { // 此 init 方法为必需,组件页面后会执行的方法
|
|
* this.someAction();
|
|
* },
|
|
* someAction: function () {
|
|
* // 页面 Javascript 逻辑,可以根据需要写多个 Function
|
|
* }
|
|
* });
|
|
* 页面注册后如果要再次调用,可以用 hr.page.页面名 获取页面对象
|
|
*/
|
|
win.hr.regPage = function (name, obj) {
|
|
if (typeof name == 'string' && name !== '') {
|
|
win.hr.util._createNamespace(name.split('.'), obj, win.hr.page);
|
|
}
|
|
};
|
|
|
|
win.hr.util = {
|
|
/**
|
|
* @description 渲染模板
|
|
* @param {JSON} opt 包含以下内容
|
|
* @param {String} opt.tmpl 模板区域的 ID 名
|
|
* @param {Object} opt.data 要渲染的 JSON 数据
|
|
* @param {Object} opt.to 要追加进的 jQuery DOM 对象
|
|
* @param {Object} opt.insertTo 要插入到其之前或之后的 jQuery DOM 对象
|
|
* @param {String} opt.method 渲染的方式,包括 replace、append 和 prepend,当同时有 insertTo 时,是以 insertTo 为基准
|
|
* @param {Function} opt.callbackFn 回调函数
|
|
*/
|
|
renderTmpl: function (opt) {
|
|
var strTargetTmpl = opt.tmpl || '';
|
|
var jsonData = opt.data || {};
|
|
var $target = opt.to;
|
|
var method = opt.method || 'append';
|
|
var $insertTo = opt.insertTo || null;
|
|
if ($target) {
|
|
var tmpled = tmpl(strTargetTmpl, jsonData);
|
|
switch (method) {
|
|
case 'replace':
|
|
$target.html(tmpled);
|
|
break;
|
|
case 'append':
|
|
if ($insertTo) {
|
|
$(tmpled).insertAfter($insertTo);
|
|
} else {
|
|
$target.append(tmpled);
|
|
}
|
|
break;
|
|
case 'prepend':
|
|
if ($insertTo) {
|
|
$(tmpled).insertBefore($insertTo);
|
|
} else {
|
|
$target.prepend(tmpled);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
$.isFunction(opt.callbackFn) && opt.callbackFn();
|
|
},
|
|
/**
|
|
* @description 从 URL 中获取指定参数值
|
|
* @param {String} str 要从 URL 中获取的参数值
|
|
*/
|
|
getUrlParam: function (str) {
|
|
var s = location.search;
|
|
var tmp = [];
|
|
var value = '';
|
|
if (s) {
|
|
tmp = s.substr(1).split('&');
|
|
}
|
|
for (var i = 0; i < tmp.length; i++) {
|
|
if (tmp[i].substring(0, tmp[i].indexOf('=')) === str) {
|
|
value = tmp[i].substr(tmp[i].indexOf('=') + 1);
|
|
break;
|
|
}
|
|
}
|
|
return value;
|
|
},
|
|
/**
|
|
* @description 使用 rem 单位时自动计算 html 初始字体尺寸。比如设计稿是 750px 的,那么对应的 1rem 就等于 100px;如果设计稿是非标准尺寸,比如 844px,那么可以传入参数 baseWidth 844,这样可以保证 1rem 等于 100px,便于计算。
|
|
* @param {Number} baseWidth 基准尺寸
|
|
*/
|
|
resizePage: function (baseWidth) {
|
|
var baseW = baseWidth || 750;
|
|
var docEl = document.documentElement,
|
|
resizeEvt = 'orientationchange' in win ? 'orientationchange' : 'resize',
|
|
recalc = function () {
|
|
var clientWidth = docEl.clientWidth;
|
|
if (!clientWidth) {
|
|
return;
|
|
}
|
|
if (clientWidth > baseW) {
|
|
clientWidth = baseW;
|
|
}
|
|
docEl.style.fontSize = 100 * (clientWidth / baseW) + 'px';
|
|
};
|
|
if (!document.addEventListener) {
|
|
return;
|
|
}
|
|
win.addEventListener(resizeEvt, recalc, false);
|
|
recalc();
|
|
},
|
|
/**
|
|
* @description 内部方法,创建一个命名空间
|
|
*/
|
|
_createNamespace: function (parts, obj, parent) {
|
|
var obj = obj || {
|
|
init: function () { }
|
|
};
|
|
var i = 0;
|
|
if (parts[0] === 'hr') {
|
|
parts = parts.slice(1);
|
|
}
|
|
for (i = 0; i < parts.length; i++) {
|
|
if (typeof parent[parts[i]] == 'undefined') {
|
|
parent[parts[i]] = obj;
|
|
// 组件或页面注册后执行
|
|
obj.init();
|
|
}
|
|
parent = parent[parts[i]];
|
|
}
|
|
},
|
|
globleMethods: function (params) {
|
|
$(".menuBtn") && $(".menuBtn").click(function () {
|
|
$(".header").addClass("open-nav").find(".nav").stop().slideToggle();
|
|
window.event ? window.event.cancelBubble = true : e.stopPropagation();
|
|
})
|
|
// 选项卡 鼠标点击切换
|
|
$(".TAB_CLICK li") && $(".TAB_CLICK li").click(function () {
|
|
var tab = $(this).parent(".TAB_CLICK");
|
|
var con = tab.attr("id");
|
|
var on = tab.find("li").index(this);
|
|
$(this).addClass('on').siblings(tab.find("li")).removeClass('on');
|
|
$(con).eq(on).show().siblings(con).hide();
|
|
});
|
|
var _width = $(window).innerWidth();
|
|
if (_width < 1280) {
|
|
$(".header .nav li a").click(function () {
|
|
$(".header").find(".nav").stop().slideUp();
|
|
})
|
|
}
|
|
// 获取用户代理字符串
|
|
var userAgent = navigator.userAgent;
|
|
// 判断是否为苹果浏览器
|
|
var isAppleBrowser = /(Mac|iPhone|iPod|iPad)/i.test(userAgent) && !/(Android|Windows)/i.test(userAgent);
|
|
|
|
if (isAppleBrowser) {
|
|
// 是苹果浏览器
|
|
$('body').addClass("safri")
|
|
} else {
|
|
// 不是苹果浏览器
|
|
console.log('当前浏览器不是苹果浏览器');
|
|
}
|
|
|
|
}
|
|
};
|
|
|
|
win.hr.init = function () {
|
|
// TODO 这里放页面初始化时需要执行的代码
|
|
win.hr.util.globleMethods()
|
|
|
|
};
|
|
|
|
win.hr.init();
|
|
});
|