You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

309 lines
9.6 KiB
JavaScript

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
* ai是一个提供基础常用函数的单体。各个函数的功能见各个函数的注释。
* @version 3.0.1
*/
var ai = {
touchClick: function(obj, fun) {
/**
* 该方法用于绑定点击事件比一般的click事件反应速度快2倍。
* @param {对象字面量} obj 要绑定的dom对象
* @param {对象字面量} fun 事件触发的函数
*/
var start_x = 0,
start_y = 0;
obj.addEventListener('touchstart',function(e){
start_x = e.touches[0].clientX;
start_y = e.touches[0].clientY;
document.addEventListener('touchend', touEnd, false);
});
function touEnd(e){
var endX = e.changedTouches[0].clientX;
var endY = e.changedTouches[0].clientY;
if(Math.abs(endX - start_x) < 5 && Math.abs(endY - start_y) < 5) {
fun.call(obj,e);
}
document.removeEventListener('touchend', touEnd, false);
};
},
ovb: {
/**
* 该对象用于判断系统系统版本浏览器苹果设备等等功能。ovb是单词 Os Version Browser 的头字母缩写。
*/
_version_value: false,
_bversion_value: false,
_ua: navigator.userAgent,
android: function() {
/**
* 该方法用于判断是否为安卓平台如果是返回ture 否 返回 false
* @author 黄浩明
* @return ture或者false
*/
var regular_result = this._ua.match(/(Android)\s+([\d.]+)/),
os_boolean = !!regular_result;
if(!this._version_value && os_boolean){
this._version_value = regular_result[2];
}
this.android = function(){return os_boolean;};
return os_boolean;
},
ios: function() {
/**
* 该方法用于判断是否为iOS平台如果是返回ture 否 返回 false
* @return ture或者false
*/
var regular_result = this._ua.match(/.*OS\s([\d_]+)/),
os_boolean = !!regular_result;
if(!this._version_value && os_boolean){
this._version_value = regular_result[1].replace(/_/g, '.');
}
this.ios = function(){return os_boolean;};
return os_boolean;
},
ipod: function() {
/**
* 该方法用于判断是否为ipod设备如果是返回ture 否 返回 false
* @return ture或者false
*/
var regular_result = this._ua.match(/(iPod).*OS\s([\d_]+)/),
os_boolean = !!regular_result;
if(!this._version_value && os_boolean){
this._version_value = regular_result[2].replace(/_/g, '.');
}
this.ipod = function(){return os_boolean;};
return os_boolean;
},
ipad: function() {
/**
* 该方法用于判断是否为ipad设备如果是返回ture 否 返回 false
* @return ture或者false
*/
var regular_result = this._ua.match(/(iPad).*OS\s([\d_]+)/),
os_boolean = !!regular_result;
if(!this._version_value && os_boolean){
this._version_value = regular_result[2].replace(/_/g, '.');
}
this.ipad = function(){return os_boolean;};
return os_boolean;
},
iphone: function() {
/**
* 该方法用于判断是否为iphone设备如果是返回ture 否 返回 false
* @return ture或者false
*/
var regular_result = this._ua.match(/(iPhone);.*OS\s([\d_]+)/),
os_boolean = !!regular_result;
if(!this._version_value && os_boolean){
this._version_value = regular_result[2].replace(/_/g, '.');
}
this.iphone = function(){return os_boolean;};
return os_boolean;
},
kindle: function() {
/**
* 该方法用于判断是否为kindle设备如果是返回ture 否 返回 false
* @return ture或者false
*/
var regular_result = this._ua.match(/Kindle\/([\d.]+)/),
os_boolean = !!regular_result;
if(!this._version_value && os_boolean){
this._version_value = regular_result[1];
}
this.kindle = function(){return os_boolean;};
return os_boolean;
},
webkit: function() {
/**
* 该方法用于判断是否为webkit内核的浏览器如果是返回ture 否 返回 false
* @return ture或者false
*/
var regular_result = this._ua.match(/WebKit\/([\d.]+)/),
os_boolean = !!regular_result;
if(!this._version_value && os_boolean){
this._bversion_value = regular_result[1];
}
this.webkit = function(){return os_boolean;};
return os_boolean;
},
uc: function() {
/**
* 该方法用于判断是否为UC内核的浏览器如果是返回ture 否 返回 false
* @return ture或者false
* @tip 该函数只在安卓平台能正常判断,慎用!
*/
var regular_result = this._ua.match(/UC/),
os_boolean = !!regular_result;
this.uc = function(){return os_boolean;};
return os_boolean;
},
opera: function() {
/**
* 该方法用于判断是否为opera浏览器如果是返回ture 否 返回 false
* @return ture或者false
*/
var regular_result = this._ua.match(/Opera/),
os_boolean = !!regular_result;
this.opera = function(){return os_boolean;};
return os_boolean;
},
safari: function() {
/**
* 该方法用于判断是否为safari浏览器如果是返回ture 否 返回 false
* @return ture或者false
* @tip 该函数在一些不知名的浏览器如遨游之类上不能正常判断
*/
var regular_result = this._ua.match(/Version.*Safari/),
os_boolean = !!regular_result;
this.safari = function(){return os_boolean;};
return os_boolean;
},
silk: function() {
/**
* 该方法用于判断是否为silk浏览器如果是返回ture 否 返回 false
* @return ture或者false
*/
var regular_result = this._ua.match(/Silk/),
os_boolean = !!regular_result;
this.silk = function(){return os_boolean;};
return os_boolean;
},
version: function() {
/**
* 该方法返回系统的版本
* @return 系统版本号例如 5.5.1
*/
return this._version_value;
},
bVersion: function() {
/**
* 该方法返回webkit浏览器的版本
* @return 系统版本号例如 5.5.1
*/
return this._bversion_value;
}
},
a: function(s) {
return document.querySelectorAll(s);
},
q: function(s) {
return document.querySelector(s);
},
i: function(id) {
return document.getElementById(id);
},
c: function(klass) {
return document.getElementsByClassName(klass);
},
hideUrl: function() {
/**
* 该方法用于在ios上隐藏导航条
*/
//setTimeout(scrollTo,0,0,0);
setTimeout(function() {
window.scrollTo(0, 1);
},
200)
},
wh: function() {
/**
* 该方法用于取得可视区域的高度
* @return 可视区域的高度
*/
return document.documentElement.clientHeight;
},
ww: function() {
/**
* 该方法用于取得可视区域的宽
* @return 可视区域的宽
*/
return document.documentElement.clientWidth;
},
hv: function() {
/**
* 该方法用于判断当前状态时横屏还是竖屏
* @return 如果为竖屏返回否则返回false
*/
if(this.wh()/this.ww()>1){
return true;
}else{
return false;
}
},
resize: function(fun) {
/**
* 该方法用于绑定手机横屏竖屏的动作之所以写了那么多代码是因为该动作在安卓上会在转屏的时候出发2次所以将间隔小于200秒的去掉。
* @param {函数} 事件触发时要执行的函数。
*/
//var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';
this.resize_time = Date.now();
window.addEventListener('resize', function(){
if(Date.now() - this.resize_time < 200 ){
this.resize_time = Date.now();
}else{
fun();
this.resize_time = Date.now();
}
}, false);
},
clone: function(object) {
/**
   * 该方法用于原型式继承
   * @param {对象字面量} object 父对象
* @return 返回一个继承了 object 的对象
   */
function f() {}
f.prototype = object;
return new f;
},
extend: function(subClass, superClass) {
/**
* 该方法用于类式继承
* @param {对象字面量} subClass 子对象
* @param {对象字面量} superClass 父对象
*/
var f = function() {};
f.prototype = superClass.prototype;
subClass.prototype = new f();
subClass.prototype.constructor = subClass;
subClass.superclass = superClass.prototype;
if(superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
},
styleLoad: function(url,fun) {
/**
* 该方法用于动态加载css文件
* @param {对象字面量} url 目标style文件的url
* @param {对象字面量} fun style文件载入后执行的函数
*/
var A = document.createElement("style");
A.type = "text/css";
A.src = url;
document.head.appendChild(A)
A.onload = function(){fun()};
},
scriptLoad: function(url,fun) {
/**
* 该方法用于动态加载js文件
* @param {对象字面量} url 目标js文件的url
* @param {对象字面量} fun js文件载入后执行的函数
*/
var A = document.createElement("script");
A.type = "text/javascript";
A.src = url;
document.head.appendChild(A);
A.onload = function(){fun()};
},
touchMovePreventDefault: function(obj) {
/**
* 该方法用于取消目标DOM上touchMove的默认事件
* @param {DOM对象}obj 目标DOM
*/
obj.addEventListener("touchmove", function(e) {
e.preventDefault();
}, false);
}
}