// 扩展Vue的公共方法
Vue.prototype.Fn = {
//添加事件绑定
addEventHandler: function (target, type, fn) {
if (target.addEventListener) {
target.addEventListener(type, fn, false);
} else if (target.attachEvent) {
target.attachEvent("on" + type, fn);
}
},
//移除事件绑定
removeEventHandler: function (target, type, fn) {
if (target.removeEventListener) {
target.removeEventListener(type, fn);
} else {
target.detachEvent(type, fn);
}
},
// 阻止默认事件
preventDefault: function (event) {
var e = event || window.event;
if (event.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
},
// 阻止冒泡事件
stopPropagation: function (event) {
var e = event || window.event;
if (e.stopPropagation) {
e.stopPropagation();
} else {
e.canceBubble = true;
return false;
}
},
//判断Object类型
isObjectType: function (obj) {
var types = ["Object", "Array", "String", "Function", "Boolean", "Number", "Undefined", "Null", "Window", "Date", "RegExp", "HTMLDocument"];
for (var i = 0; i < types.length; i++) {
var type = types[i];
if (Object.prototype.toString.call(obj) === "[object " + type + "]") return type
}
},
//数组与纯对象的深拷贝
copy: function (obj, deep) {//默认false,即浅拷贝,若要深拷贝rdeep传值为true即可
if (this.isObjectType(obj) === "Object") {
var target = {},
deep = (this.isObjectType(deep) === "Boolean") ? deep : false;
for (var key in obj) {
target[key] = (deep && this.isObjectType(obj[key]) === "Object") ? this.clone(obj[key], deep) : obj[key];
}
return target
} else if (this.isObjectType(obj) === "Array") {
return obj.concat()
} else {
throw new Error("拷贝对象类型错误!")
}
},
//对象数组按指定属性排序
sortBy: function (arr, prop, rev) {//默认升序,若要降序rev传值为true即可
var rev = !rev ? 1 : -1;
arr.sort(function (a, b) {
a = a[prop];
b = b[prop];
if (a > b) return rev * 1;
if (a < b) return rev * -1;
return 0
});
return arr
},
//获取随机数
getRandom: function (min, max) {
return Math.round(Math.random() * (max - min) + min)
},
// 判断是否是DOM对象
isDOM: function (obj) {
if (typeof HTMLElement === 'object') {
return obj instanceof HTMLElement
} else {
return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string'
}
},
/*********************************************************我是分割线***************************************************************/
// 查询一个字符串出现的最多次的字符
queryMostChar: function queryMostChar(str) {
var temp = {},
result = {};
for (var i = 0; i < str.length; i++) {
var char = str.charAt(i);
if (temp[char]) {
temp[char]++
} else {
temp[char] = 1
}
};
var max = 0, mostChar;
for (key in temp) {
if (max < temp[key]) {
max = temp[key];
mostChar = key;
}
}
result[mostChar] = max;
return result
},
// 获取window窗口内容大小
getInnerClient: function () {
if (window.innerWidth) {
return {
width: window.innerWidth,
height: window.innerHeight
}
} else {
return {
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight
}
}
},
// 模仿jQuery封装鼠标hover事件
mouseHover: function (obj, enter, leave) {
obj.onmouseenter = enter;
obj.onmouseleave = leave;
},
// 原生JS获取DOM,不推荐,既然用Vue就可以用ref传递了
getElement: function (el) {
if (typeof el === "string") {
if (el.indexOf("#") == 0) {
return document.getElementById(el.replace("#", ""))
} else if (el.indexOf(".") == 0) {
return document.getElementsByClassName(el.replace(".", ""))
} else {
return document.getElementsByTagName(el)
}
}
}
}
extend.js
猜你喜欢
转载自my.oschina.net/u/3288561/blog/1558263
今日推荐
周排行