/**
* 对公用JS库的补充
* @time 20190731
* @name test
*/
(function(PageH5) {
function tip(info, second, id, timerName) {
if (info === undefined || info === '') return;
second = second || 3;
id = id || id;
if (!G(id)) {
var dom = document.createElement('div');
dom.id = id;
document.body.appendChild(dom);
}
G(id).innerHTML = info;
S(id);
if (second > 0) {
if (PageH5[timerName]) clearTimeout(PageH5[timerName]);
PageH5[timerName] = setTimeout('H("' + id + '")', second * 1000);
}
}
PageH5.extend = function(params) {
for (var i in params) this[i] = params[i];
};
PageH5.extend({
tip: function(info, second) {
tip(info, second, 'default_tip_css', '_tip_timer');
},
ykqTip: function(info, second) {
tip(info, second, 'default_ykq_tip_css', '_ykq_tip_timer');
},
getBasePath: function() {
var contextPath = '/' + location.href.split('/')[3];
return contextPath;
},
isArray: function(obj) {
return Object.prototype.toString.call(obj) === '[object Array]' || (obj instanceof Array);
},
jump: function(href, f) {
if (f === undefined) f = PageH5.btn.current.id;
window.location.href = href + '&f=' + f;
},
trim: function(str) {
if (str) return str.replace(/^\s*(.*?)\s*$/g, '$1');
},
toHump: function(str, flag) {
return str.replace(new RegExp(flag + '(\\w)', 'g'),
function(m, $1, idx, str) {
return $1.toUpperCase();
});
},
hasClass: function(obj, cls) {
if (!obj) return;
return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
},
addClass: function(obj, cls) {
if (!obj) return;
var className = obj.className;
if (!this.hasClass(obj, cls)) obj.className += (className ? ' ': '') + cls;
},
removeClass: function(obj, cls) {
if (obj && this.hasClass(obj, cls)) {
obj.className = obj.className.replace(new RegExp('(\\s|^)' + cls + '(\\s|$)'),
function(m, $1, $2) {
return ($1 && $2) ? ' ': '';
});
}
},
on: function(obj, event, fn) {
var events = event.split(' ');
for (var i in events) obj.addEventListener(events[i], fn, false);
},
off: function(obj, event, fn) {
var events = event.split(' ');
for (var i in events) obj.removeEventListener(events[i], fn);
},
one: function(obj, event, fn) {
var tempFn = function() {
fn();
PageH5.off(obj, event, tempFn);
};
PageH5.on(obj, event, tempFn);
},
twinkle: {
start: function(id, time) {
this.stop();
id = id || PageH5.btn.current.id;
time = (typeof time === 'number') ? time: 200;
this._id = id;
this._is_hide = false;
this._timer = setInterval(function() {
if (PageH5.twinkle._is_hide) S(PageH5.twinkle._id);
else H(PageH5.twinkle._id);
PageH5.twinkle._is_hide = !PageH5.twinkle._is_hide;
},
time);
},
stop: function() {
if (this._timer) {
clearInterval(this._timer);
this._timer = undefined;
S(PageH5.twinkle._id);
}
}
}
});
var curCSS;
if (window.getComputedStyle) {
curCSS = function(elem, name) {
name = PageH5.toHump(name, '-');
var ret, computed = window.getComputedStyle(elem, null),
style = elem.style;
if (computed) ret = computed[name];
if (!ret) ret = style[name];
return ret;
};
} else if (document.documentElement.currentStyle) {
curCSS = function(elem, name) {
name = PageH5.toHump(name, '-');
var ret = elem.currentStyle && elem.currentStyle[name],
style = elem.style;
if (!ret && style && style[name]) {
ret = style[name];
}
return ret === '' ? 'auto': ret;
};
} else {
curCSS = function(elem, name) {
name = PageH5.toHump(name, '-');
var style = elem.style;
return style[name];
};
}
PageH5.css = function(obj, name, value) {
if (value === undefined) {
var temp = curCSS(obj, name);
if (temp === '' || temp === 'auto') temp = 0;
return temp;
} else {
var pxs = ['left', 'top', 'right', 'bottom', 'width', 'height', 'line-height', 'font-size'];
var isPx = pxs.indexOf(name) >= 0;
if (isPx && !/.*px$/g.test(value + '') && value !== 'auto') value += 'px';
obj.style[PageH5.toHump(name)] = value;
}
};
PageH5.key = {
keys: {},
ids: {},
set: function(code, action) {
if (typeof code === 'string' && action !== undefined) {
var _code = code;
code = {};
code[_code] = action;
}
if (typeof code === 'object') {
var obj = code;
for (var i in obj) {
if (i.indexOf('KEY_') === 0 || i.indexOf('EVENT_') === 0) this.keys[i] = obj[i];
else this.ids[i] = obj[i];
}
} else if (typeof code === 'number') {}
return this;
},
add: function(code, action) {
return this.set(code, action);
},
del: function(code) {
if (! (code instanceof Array)) code = [code];
for (var i = 0; i < code.length; i++) {
if (this.ids[code[i]]) this.ids[code[i]] = 'PageH5.key.emptyFn()';
if (this.keys[code[i]]) this.keys[code[i]] = 'PageH5.key.emptyFn()';
}
return this;
},
emptyFn: function() {},
init: function() {
if (!PageH5.eventHandler) {
PageH5.eventHandler = function(code) {
for (var i in PageH5.key.ids) if (PageH5.Button.current.id === i) PageH5.call(PageH5.key.ids[i], code);
for (var i in PageH5.key.keys) if (code === window[i]) PageH5.call(PageH5.key.keys[i], code);
};
}
}
};
PageH5.cookie = {
get: function(cookieName, defaultValue, parseNumber, isUnescape) {
var temp = new RegExp('(^|;| )' + cookieName + '=([^;]*)(;|$)', 'g').exec(document.cookie);
if (temp != null) {
var value = temp[2];
if (value === '""') return defaultValue;
if (parseNumber == true) return parseFloat(value);
if (isUnescape) return unescape(value);
return value;
}
return defaultValue;
},
set: function(name, value, day, path) {
day = day == undefined ? 30 : day;
path = path == undefined ? PageH5.getBasePath() : path;
var str = name + '=' + value + '; ';
if (day) {
var date = new Date();
date.setTime(date.getTime() + day * 24 * 3600 * 1000);
str += 'expires=' + date.toGMTString() + '; ';
}
if (path) str += 'path=' + path;
document.cookie = str;
},
del: function(name, path) {
this.set(name, null, -1, path);
}
};
PageH5.marquee = {
start: function(maxLength, id, amount, delay, dir, behavior) {
maxLength = maxLength || 7;
id = id || PageH5.Button.current.id + '_txt';
amount = amount || 40;
delay = delay || 10;
dir = dir || 'left';
behavior = behavior || 'alternate';
if (!this.rollId) {
var marqueeParent = G(id);
var html = PageH5.trim(marqueeParent.innerHTML);
if (maxLength !== undefined && html.length > maxLength) {
this.rollId = id;
this.innerHTML = html;
marqueeParent.innerHTML = '
' + html + '
';
var marqueeChild = G(id + '_marquee');
var width1 = parseInt(PageH5.css(marqueeParent, 'width'));
var width2 = parseInt(PageH5.css(marqueeChild, 'width'));
var maxLeft = width2 - width1;
if (maxLeft <= 0) return;
var marquee_idx = Math.ceil(maxLeft / 50) * 50;
marquee_idx = marquee_idx > 400 ? 400 : marquee_idx;
var time = (maxLeft / amount).toFixed(2);
if (maxLeft < 30) {
time = 0.7;
}
var animation = 'common_marquee_' + marquee_idx + ' ' + time + 's linear 50ms infinite alternate';
marqueeChild.style.webkitAnimation = animation;
marqueeChild.style.animation = animation;
}
}
},
stop: function() {
if (this.rollId) {
G(this.rollId).innerHTML = this.innerHTML;
this.rollId = undefined;
}
}
};
PageH5.fx = {
interval: 13,
tagIdx: 0,
animates: {},
start: function(obj, params, speed, easing, callback, tag) {
var speeds = {
fast: 200,
normal: 400,
slow: 600
};
speed = (typeof speed === 'string' ? speeds[speed] : speed) || speeds.normal;
if (typeof easing === 'function') {
tag = callback;
callback = easing;
easing = '';
}
easing = easing || 'swing';
tag = tag || 'default';
for (var i in this.animates) {
if (i.indexOf(tag) >= 0) this.stop(i);
}
var oldParams = params;
params = {};
var canContinue = false;
for (var i in oldParams) {
var p = oldParams[i];
if (!PageH5.isArray(p)) p = [PageH5.css(obj, i), p];
else PageH5.css(obj, i, p[0]);
params[i] = {
start: parseFloat(p[0]),
end: parseFloat(p[1])
};
if (params[i].start !== params[i].end) canContinue = true;
}
if (!canContinue) return;
tag += '_' + (++this.tagIdx);
this.animates[tag] = {
obj: obj,
params: params,
speed: speed,
easing: easing,
callback: callback,
startTime: Date.now(),
idx: 0,
timer: undefined
};
this.animates[tag].timer = setInterval(function() {
var animate = PageH5.fx.animates[tag];
animate.idx++;
var n = Date.now() - animate.startTime;
if (n > animate.speed) {
PageH5.fx.stop(tag);
return;
}
var percent = n / animate.speed;
var pos = PageH5.fx.easing[animate.easing](percent, n, 0, 1, animate.speed);
for (var i in animate.params) {
var p = animate.params[i];
PageH5.css(animate.obj, i, p.start + (p.end - p.start) * pos);
}
},
this.interval);
},
stop: function(tag) {
var animate = PageH5.fx.animates[tag];
if (!animate) return false;
clearInterval(animate.timer);
var ps = animate.params;
for (var i in ps) PageH5.css(animate.obj, i, ps[i].end);
PageH5.call(animate.callback);
delete PageH5.fx.animates[tag];
return true;
},
easing: {
linear: function(p, n, firstNum, diff) {
return firstNum + diff * p;
},
swing: function(p, n, firstNum, diff) {
return 0.5 - Math.cos(p * Math.PI) / 2;
}
}
};
PageH5.animate = function(obj, params, speed, easing, callback, tag) {
PageH5.fx.start(obj, params, speed, easing, callback, tag);
};
})(PageH5);
(function(PageH5) {
var positions = {};
function getBtn(cid, dir) {
var current = positions[cid];
var store = [];
var leftOrRight = (dir === 'left' || dir === 'right');
var hasFindDegIsZero = false;
for (var i in positions) {
if (i === cid) continue;
var next = positions[i];
if ((dir === 'left' && next.left >= current.left) || (dir === 'right' && next.right <= current.right) || (dir === 'up' && next.top >= current.top) || (dir === 'down' && next.bottom <= current.bottom)) continue;
if (leftOrRight && ((next.centerY >= current.top && next.centerY <= current.bottom) || (next.top <= current.centerY && next.bottom >= current.bottom) || (next.top <= current.top && next.bottom >= current.centerY))) {
store.push({
id: i,
distance: next.left,
deg: 0
});
hasFindDegIsZero = true;
} else if (!leftOrRight && ((next.centerX >= current.left && next.centerX <= current.right) || (next.left <= current.centerX && next.right >= current.right) || (next.left <= current.left && next.right >= current.centerX))) {
store.push({
id: i,
distance: next.top,
deg: 0
});
hasFindDegIsZero = true;
} else if (!hasFindDegIsZero) {
var key1 = leftOrRight ? dir: 'centerX';
var key2 = !leftOrRight ? (dir == 'up' ? 'top': 'bottom') : 'centerY';
var tan = (next[key1] - current[key1]) / (next[key2] - current[key2]);
var cdeg = Math.abs(Math.atan(leftOrRight ? (1 / tan) : tan) * 360 / 2 / Math.PI);
store.push({
id: i,
distance: next[leftOrRight ? 'left': 'top'],
deg: cdeg
});
}
}
var tidu = [0, 30, 45, 60, 85];
var _store = [];
for (var i = 0; i < tidu.length; i++) {
_store = [];
for (var j = 0; j < store.length; j++) if (store[j].deg <= tidu[i]) _store.push(store[j]);
if (_store.length > 0) break;
}
store = _store.length ? _store: [];
store.sort(function(a, b) {
var desc = (dir === 'left' || dir === 'up') ? -1 : 1;
return (a.distance < b.distance ? -1 : (a.distance > b.distance ? 1 : 0)) * desc;
});
var nearest;
var result = '';
var key = leftOrRight ? 'top': 'left';
for (var i = 0; i < store.length; i++) {
if (i > 0 && store[i].distance != store[0].distance) break;
var distance = Math.abs(positions[store[i].id][key] - current[key]);
if (nearest === undefined || distance < nearest) {
nearest = distance;
result = store[i].id;
}
}
return result;
};
PageH5.getAbsolutePosition = function(elem) {
if (elem == null) return {
left: 0,
top: 0,
width: 0,
height: 0,
right: 0,
bottom: 0
};
var left = elem.offsetLeft,
top = elem.offsetTop,
width = elem.offsetWidth,
height = elem.offsetHeight;
while (elem = elem.offsetParent) {
left += elem.offsetLeft;
top += elem.offsetTop;
}
return {
left: left,
top: top,
width: width,
height: height,
right: left + width,
bottom: top + height
};
};
PageH5.createButtonDir = function(allButtons) {
var start = new Date().getTime();
var btnGroups = {};
for (var i = 0; i < allButtons.length; i++) {
if (allButtons[i].autoDirGroup === false) continue;
var gname = 'group_' + (allButtons[i].autoDirGroup === undefined ? 'default': allButtons[i].autoDirGroup);
btnGroups[gname] = btnGroups[gname] || [];
btnGroups[gname].push(allButtons[i]);
}
for (var gname in btnGroups) {
positions = {};
var btns = btnGroups[gname];
for (var i = 0; i < btns.length; i++) {
if (btns[i].autoDir === false) continue;
var id = btns[i].id;
var obj = document.getElementById(id);
var position = PageH5.getAbsolutePosition(obj);
position.obj = obj;
position.centerX = position.left + position.width / 2;
position.centerY = position.top + position.height / 2;
positions[id] = position;
}
var dirs = ['left', 'right', 'up', 'down'];
for (var i = 0; i < btns.length; i++) {
for (var j = 0; j < dirs.length; j++) {
btns[i][dirs[j]] = btns[i][dirs[j]] || getBtn(btns[i].id, dirs[j]);
}
}
}
var end = new Date().getTime();
};
})(PageH5);
(function() {
PageH5.scrollScreen = {
init: function(option) {
this.config.enable = true;
for (var i in option) {
if (option[i] !== undefined && option[i] !== "") {
this.config[i] = option[i];
}
}
this.scroll(PageH5.getParamInt('scrollTop', 0));
},
check: function(button, dir) {
if (!this.config.enable) return;
if (button.restoreScroll) {
this.scroll( - this.config.scrollTop);
return;
}
if (!this.config.enableToAllBtn && !button.scrollScreen) return;
var id = button.id;
var position = document.getElementById(id).getBoundingClientRect();
var target = document.getElementById(this.config.wrapperId);
var safePx = this.config.safePx;
var wrapperPosition = document.getElementById(this.config.wrapperId).getBoundingClientRect();
if (position.bottom >= (wrapperPosition.bottom - safePx)) {
this.scroll((position.bottom + safePx - wrapperPosition.bottom));
} else if (position.top - wrapperPosition.top < safePx) {
this.scroll((wrapperPosition.top - position.top + safePx) * -1);
}
},
repair: function() {
if (!this.config.enable) return;
var target = document.getElementById(this.config.wrapperId);
if (PageH5.scrollScreen.config.scrollTop !== target.scrollTop) {
target.scrollTop = PageH5.scrollScreen.config.scrollTop;
}
},
scroll: function(addScrollTop) {
var target = document.getElementById(this.config.wrapperId);
var from = this.config.scrollTop;
this.config.scrollTop += addScrollTop;
if (enable_animate === false || !this.config.animate || addScrollTop === 0) {
target.scrollTop = this.config.scrollTop;
return;
}
var rate = 13,
speed = 600,
start = Date.now(),
easing = 'swing';
if (this.config._interval) {
clearInterval(this.config._interval);
this.config._interval = undefined;
}
this.config._interval = setInterval(function() {
var n = Date.now() - start;
if (n > speed) {
clearInterval(PageH5.scrollScreen.config._interval);
PageH5.scrollScreen.config._interval = undefined;
n = speed;
}
var pos = PageH5.fx.easing[easing](n / speed, n, 0, 1);
target.scrollTop = from + pos * addScrollTop;
},
rate);
},
config: {
animate: true,
enable: false,
enableToAllBtn: false,
wrapperId: 'wrapper',
scrollTop: 0,
safePx: 40,
topSafePx: 40
}
};
})();
(function() {
PageH5.scroll = {
init: function(option) {
this.config.enable = true;
for (var i in option) {
if (option[i] !== undefined && option[i] !== '') {
this.config[i] = option[i];
}
}
this.scr(PageH5.getParamInt('scrollLeft', 0));
},
check: function(button, dir) {
if (!this.config.enable) return;
if (button.restoreScroll) {
this.scr( - this.config.scrollLeft);
return;
}
if (!this.config.enableToAllBtn && !button.scrollScreen) return;
var id = button.id;
var position = document.getElementById(id).getBoundingClientRect();
var wrapperPosition = document.getElementById(this.config.wrapperId).getBoundingClientRect();
var safePx = this.config.safePx;
if (position.right >= (wrapperPosition.right - safePx)) {
this.scr((position.right + safePx - wrapperPosition.right));
} else if (position.left - wrapperPosition.left < safePx) {
this.scr((wrapperPosition.left - position.left + safePx) * -1);
}
},
repair: function() {
if (!this.config.enable) return;
var target = document.getElementById(this.config.wrapperId);
if (PageH5.scroll.config.scrollLeft !== target.scrollLeft) {
target.scrollLeft = PageH5.scroll.config.scrollLeft;
}
},
scr: function(addScrollLeft) {
var target = document.getElementById(this.config.wrapperId);
var form = this.config.scrollLeft;
this.config.scrollLeft += addScrollLeft;
if (enable_animate === false || !this.config.animate || addScrollLeft === 0) {
target.scrollLeft = this.config.scrollLeft;
return;
}
var rate = 13,
speed = 600,
start = Date.now(),
easing = 'swing';
if (this.config._interval) {
clearInterval(this.config._interval);
this.config._interval = undefined;
}
this.config._interval = setInterval(function() {
var n = Date.now() - start;
if (n > speed) {
clearInterval(PageH5.scroll.config._interval);
PageH5.scroll.config._interval = undefined;
n = speed;
}
var pos = PageH5.fx.easing[easing](n / speed, n, 0, 1);
target.scrollLeft = form + pos * addScrollLeft;
},
rate);
},
config: {
animate: true,
enable: false,
enableToAllBtn: false,
wrapperId: 'wrapper',
scrollLeft: 0,
safePx: 40
}
};
})();
(function() {
PageH5.getCurrentURI = function() {
var currentURI = CONFIG.CURRENT_URI || (location.pathname + location.search);
if (!/^\//g.test(currentURI)) currentURI = CONFIG.CONTEXT_PATH + currentURI;
return currentURI + (currentURI.indexOf('?') > 0 ? '': '?1=1');
};
PageH5.go = function(url) {
var backURI = PageH5.getCurrentURI() + '&f=' + PageH5.btn.current.id;
if (PageH5.scrollScreen && PageH5.scrollScreen.config.enable) backURI += ('&scrollTop=' + PageH5.scrollScreen.config.scrollTop);
if (PageH5.scroll && PageH5.scroll.config.enable) backURI += ('&scrollLeft=' + PageH5.scroll.config.scrollLeft);
var backUriList = eval("(" + unescape(PageH5.cookie.get('back_page_list', '[]')) + ")");
backUriList.push(backURI);
var jStr = "";
for (var i = 0,
length = backUriList.length; i < length; i++) {
jStr += '"' + backUriList[i] + '",';
}
jStr = "[" + jStr.slice(0, -1) + "]";
PageH5.cookie.set('back_page_list', escape(jStr));
location.href = CONFIG.CONTEXT_PATH + url;
};
PageH5.getBackURI = function() {
var backUriList = eval("(" + unescape(PageH5.cookie.get('back_page_list', '[]')) + ")");
var backURI = backUriList.pop() || (CONFIG.CONTEXT_PATH + 'index.html');
var jStr = "";
for (var i = 0,
length = backUriList.length; i < length; i++) {
jStr += '"' + backUriList[i] + '",';
}
jStr = "[" + jStr.slice(0, -1) + "]";
PageH5.cookie.set('back_page_list', escape(jStr));
return backURI;
};
PageH5.goPlayVideo = function(url) {
var playEndURI = PageH5.getCurrentURI() + '&f=' + PageH5.btn.current.id;
if (PageH5.scrollScreen && PageH5.scrollScreen.config.enable) playEndURI += ('&scrollTop=' + PageH5.scrollScreen.config.scrollTop);
PageH5.cookie.set('play_end_page', escape(playEndURI));
location.href = CONFIG.CONTEXT_PATH + url;
};
PageH5.getPlayEndURI = function() {
var playEndURI = unescape(PageH5.cookie.get('play_end_page', CONFIG.CONTEXT_PATH + 'index.html'));
return playEndURI;
};
})();
PageH5.getParam = function(name, defaultValue) {
defaultValue = defaultValue === undefined ? '': defaultValue;
var result = new RegExp('(\\?|&)' + name + '=(.*?)(&|$)', 'g').exec(location.search);
return result ? result[2] : defaultValue;
};
PageH5.getParamInt = function(name, defaultValue) {
defaultValue = defaultValue === undefined ? 0 : defaultValue;
return parseInt(PageH5.getParam(name, defaultValue));
};
PageH5.focusHandler = function() {
PageH5.marquee.start();
};
PageH5.blurHandler = function() {
PageH5.marquee.stop();
};
(function() {
var aimg = document.createElement('img');
aimg.setAttribute('src', CONFIG.SPACER);
var atag = document.createElement('a');
atag.id = 'myDefaultLink';
atag.setAttribute('href', '#');
atag.appendChild(aimg);
document.body.appendChild(atag);
document.getElementById('myDefaultLink').focus();
})();