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

// 前端模板
! 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 = {
"<": "&lt;",
">": "&gt;",
"&": "&amp;",
'"': "&quot;",
"'": "&#39;"
}, 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();
});