forked from WangJia-mm/JavaScript201708
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.js
More file actions
106 lines (97 loc) · 3.24 KB
/
utils.js
File metadata and controls
106 lines (97 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
var utils = (function () {
//->toArray:把类数组转换为数组
function toArray(likeAry) {
var ary = [];
try {
ary = [].slice.call(likeAry);
} catch (e) {
for (var i = 0; i < likeAry.length; i++) {
ary[ary.length] = likeAry[i];
}
}
return ary;
}
//->toJSON:把JSON字符串变为对象
function toJSON(str) {
return 'JSON' in window ? JSON.parse(str) : eval('(' + str + ')');
}
//->setCss:设置元素的样式
function setCss(curEle, attr, value) {
if (attr.toLowerCase() === 'opacity') {
curEle.style.opacity = value;
curEle.style.filter = 'alpha(opacity=' + value * 100 + ')';
return;
}
var unitReg = /^(width|height|((margin|padding)?(top|left|right|bottom)?))$/i;
unitReg.test(attr) && !isNaN(value) ? value += 'px' : null;
curEle['style'][attr] = value;
}
//->setGroupCss:批量设置元素的样式
function setGroupCss(curEle, options) {
if (Object.prototype.toString.call(options) !== '[object Object]') return;
for (var attr in options) {
if (options.hasOwnProperty(attr)) {
setCss(curEle, attr, options[attr]);
}
}
}
//->getCss:获取元素的样式属性值
function getCss(curEle, attr) {
var val = null,
reg = null;
if ('getComputedStyle' in window) {
val = window.getComputedStyle(curEle, null)[attr];
} else {
if (attr.toLowerCase() === 'opacity') {
val = curEle.currentStyle['filter'];
reg = /^alpha\(opacity=(.+)\)$/i;
val = reg.test(val) ? reg.exec(val)[1] / 100 : 1;
} else {
val = curEle.currentStyle[attr];
}
}
reg = /^-?\d+(\.\d+)?(px|em|rem)?$/i;
reg.test(val) ? val = parseFloat(val) : null;
return val;
}
//->css:实现获取、单独设置、批量设置元素的样式属性
function css() {
var arg = arguments,
fn = getCss;
if (arg.length >= 3) fn = setCss;
if (arg.length === 2 && typeof arg[1] === 'object') fn = setGroupCss;
return fn.apply(null, arg);
}
//->offset:获取当前元素距离BODY的偏移量
function offset(curEle) {
var l = curEle.offsetLeft,
t = curEle.offsetTop,
p = curEle.offsetParent;
while (p) {
if (!/MSIE 8/i.test(navigator.userAgent)) {
l += p.clientLeft;
t += p.clientTop;
}
l += p.offsetLeft;
t += p.offsetTop;
p = p.offsetParent;
}
return {left: l, top: t};
}
//->win:设置或者获取浏览器的JS盒子模型属性
function win(attr, value) {
if (typeof value !== 'undefined') {
document.documentElement[attr] = value;
document.body[attr] = value;
return;
}
return document.documentElement[attr] || document.body[attr];
}
return {
toArray: toArray,
toJSON: toJSON,
css: css,
offset: offset,
win: win
};
})();