pox 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +29 -0
- data/Rakefile +10 -0
- data/lib/pox.rb +2 -0
- data/lib/pox/engine.rb +8 -0
- data/lib/pox/version.rb +3 -0
- data/pox.gemspec +20 -0
- data/vendor/assets/javascripts/agent/adaptor-cos.js +94 -0
- data/vendor/assets/javascripts/agent/adaptor-default.js +175 -0
- data/vendor/assets/javascripts/agent/adaptor-ipanel.js +127 -0
- data/vendor/assets/javascripts/agent/adaptor-vision.js +100 -0
- data/vendor/assets/javascripts/agent/core.js +12 -0
- data/vendor/assets/javascripts/build-in.js +161 -0
- data/vendor/assets/javascripts/pox.js +24 -0
- data/vendor/assets/javascripts/pox/ajax.js +68 -0
- data/vendor/assets/javascripts/pox/all.js +1 -0
- data/vendor/assets/javascripts/pox/animate.js +211 -0
- data/vendor/assets/javascripts/pox/browser.js +33 -0
- data/vendor/assets/javascripts/pox/core.js +289 -0
- data/vendor/assets/javascripts/pox/debugger.js +54 -0
- data/vendor/assets/javascripts/pox/dom.js +261 -0
- data/vendor/assets/javascripts/pox/transition.js +316 -0
- metadata +85 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
//= require ./core
|
2
|
+
|
3
|
+
(function() {
|
4
|
+
"use strict";
|
5
|
+
|
6
|
+
/**
|
7
|
+
* @namespace
|
8
|
+
*/
|
9
|
+
Pox.Browser = (
|
10
|
+
/**
|
11
|
+
* @lends Pox.Browser
|
12
|
+
*/
|
13
|
+
{
|
14
|
+
/**
|
15
|
+
* 是否支持 WebkitTransition
|
16
|
+
* @type boolean
|
17
|
+
*/
|
18
|
+
supportWebkitTransition: false,
|
19
|
+
|
20
|
+
/**
|
21
|
+
* 是否支持 WebkitTransform
|
22
|
+
* @type boolean
|
23
|
+
*/
|
24
|
+
supportWebkitTransform: false
|
25
|
+
})
|
26
|
+
|
27
|
+
if ('WebKitTransitionEvent' in window) {
|
28
|
+
Pox.extend(Pox.Browser, {
|
29
|
+
supportWebkitTransition: true,
|
30
|
+
supportWebkitTransform: true
|
31
|
+
})
|
32
|
+
}
|
33
|
+
})()
|
@@ -0,0 +1,289 @@
|
|
1
|
+
//= require_self
|
2
|
+
//= require ./debugger
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Pox 基础类
|
6
|
+
* @namespace Pox
|
7
|
+
*/
|
8
|
+
window.Pox = {};
|
9
|
+
|
10
|
+
(function() {
|
11
|
+
"use strict";
|
12
|
+
|
13
|
+
/** @lends Pox */
|
14
|
+
var Basic = {
|
15
|
+
/**
|
16
|
+
* @param {object} target
|
17
|
+
* @param {object} exts
|
18
|
+
* @returns {object} target
|
19
|
+
*/
|
20
|
+
extend: function(target, exts) {
|
21
|
+
exts = exts || {};
|
22
|
+
for(var m in exts) {
|
23
|
+
target[m] = exts[m];
|
24
|
+
}
|
25
|
+
return target;
|
26
|
+
},
|
27
|
+
|
28
|
+
/**
|
29
|
+
* 注册在 window 对象 onload 完成后执行的回调
|
30
|
+
* @param {function} callback
|
31
|
+
*/
|
32
|
+
ready: function(callback) {
|
33
|
+
if (this._doReadyed) {
|
34
|
+
callback();
|
35
|
+
} else {
|
36
|
+
this._readyCallbacks = this._readyCallbacks || [];
|
37
|
+
this._readyCallbacks.push(callback);
|
38
|
+
}
|
39
|
+
},
|
40
|
+
|
41
|
+
/**
|
42
|
+
* 执行在 window 对象 onload 事件上绑定的回调
|
43
|
+
* @example <caption>Example usage of doReady.</caption>
|
44
|
+
* <pre><body onload="Pox.doReady()">
|
45
|
+
* </body></pre>
|
46
|
+
*/
|
47
|
+
doReady: function() {
|
48
|
+
this._doReadyed = true;
|
49
|
+
if (this._readyCallbacks) {
|
50
|
+
for(var i = 0; i < this._readyCallbacks.length; i++) {
|
51
|
+
this._readyCallbacks[i]();
|
52
|
+
this._readyCallbacks[i] = null;
|
53
|
+
}
|
54
|
+
|
55
|
+
this._readyCallbacks = null;
|
56
|
+
}
|
57
|
+
},
|
58
|
+
|
59
|
+
/**
|
60
|
+
* 在 window 对象 unload 完成后执行的回调
|
61
|
+
* @param {function} callback
|
62
|
+
*/
|
63
|
+
leave: function(callback) {
|
64
|
+
this._unloadCallbacks = this._unloadCallbacks || [];
|
65
|
+
this._unloadCallbacks.push(callback);
|
66
|
+
},
|
67
|
+
|
68
|
+
doLeave: function() {
|
69
|
+
this._unloadCallbacks = this._unloadCallbacks || [];
|
70
|
+
for(var i = 0; i < this._unloadCallbacks.length; i++) {
|
71
|
+
this._unloadCallbacks[i]();
|
72
|
+
}
|
73
|
+
},
|
74
|
+
|
75
|
+
|
76
|
+
/**
|
77
|
+
* 页面跳转
|
78
|
+
* @param {String} url
|
79
|
+
*/
|
80
|
+
goto: function(url) {
|
81
|
+
if (url.indexOf("://")) {
|
82
|
+
location.href = url;
|
83
|
+
} else {
|
84
|
+
var fullUrl = location.protocol + "//" + location.hostname + ":" + location.port + url;
|
85
|
+
location.href = fullUrl;
|
86
|
+
}
|
87
|
+
},
|
88
|
+
|
89
|
+
|
90
|
+
/**
|
91
|
+
* 根据 Class 创建类
|
92
|
+
* @param {Class} fn1
|
93
|
+
* @param {Class} fn2
|
94
|
+
* @param {Class} fn3
|
95
|
+
* @param {...Class} fnN
|
96
|
+
* @returns {Function}
|
97
|
+
*/
|
98
|
+
|
99
|
+
clazz: function(fn1, fn2, fn3, fn4, fn5, fn6) {
|
100
|
+
// ipanel don't full support "arguments" object
|
101
|
+
var clz = function(pm1, pm2, pm3, pm4, pm5, pm6) {
|
102
|
+
if (this.init) {
|
103
|
+
this.init.call(this, pm1, pm2, pm3, pm4, pm5, pm6);
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
107
|
+
var args = [ fn1, fn2, fn3, fn4, fn5, fn6 ];
|
108
|
+
for (var i = 0; i < args.length; i++) {
|
109
|
+
var obj = args[i];
|
110
|
+
if (obj == null) { continue; }
|
111
|
+
|
112
|
+
if (this.isFunction(obj)) {
|
113
|
+
this.extend(clz.prototype, obj.prototype);
|
114
|
+
} else {
|
115
|
+
this.extend(clz.prototype, obj);
|
116
|
+
}
|
117
|
+
};
|
118
|
+
|
119
|
+
return clz;
|
120
|
+
},
|
121
|
+
|
122
|
+
/**
|
123
|
+
* 根据 Class 创建对象
|
124
|
+
* @param {Class} fn1
|
125
|
+
* @param {Class} fn2
|
126
|
+
* @param {Class} fn3
|
127
|
+
* @param {...Class} fnN
|
128
|
+
* @returns {object}
|
129
|
+
*/
|
130
|
+
instance: function(fn1, fn2, fn3, fn4, fn5, fn6) {
|
131
|
+
var ins = {};
|
132
|
+
// ipanel don't full support "arguments" object
|
133
|
+
var args = [ fn1, fn2, fn3, fn4, fn5, fn6 ];
|
134
|
+
for (var i = 0; i < args.length; i++) {
|
135
|
+
var obj = args[i];
|
136
|
+
if (obj == null) { continue; }
|
137
|
+
|
138
|
+
if (this.isFunction(obj)) {
|
139
|
+
this.extend(ins, obj.prototype);
|
140
|
+
} else {
|
141
|
+
this.extend(ins, obj);
|
142
|
+
}
|
143
|
+
};
|
144
|
+
|
145
|
+
return ins;
|
146
|
+
},
|
147
|
+
|
148
|
+
/**
|
149
|
+
* 判断是否为函数
|
150
|
+
* @param {object} obj
|
151
|
+
* @returns {boolean}
|
152
|
+
*/
|
153
|
+
isFunction: function(obj) {
|
154
|
+
return typeof obj == "function";
|
155
|
+
},
|
156
|
+
|
157
|
+
/**
|
158
|
+
* 绑定函数的执行对象
|
159
|
+
* @param {object} context
|
160
|
+
* @param {Function} fn
|
161
|
+
* @returns {Function}
|
162
|
+
*/
|
163
|
+
proxy: function(context, fn) {
|
164
|
+
return function() {
|
165
|
+
fn.apply(context, arguments);
|
166
|
+
}
|
167
|
+
},
|
168
|
+
|
169
|
+
/**
|
170
|
+
* 当前时间
|
171
|
+
* @returns {Date} returns date.
|
172
|
+
*/
|
173
|
+
now: function() {
|
174
|
+
if (this._nowBaseLine) {
|
175
|
+
var current = new Date();
|
176
|
+
var offset = current.getTime() - this._nowActual.getTime();
|
177
|
+
var time = this._nowBaseLine.getTime() + offset;
|
178
|
+
var result = new Date();
|
179
|
+
result.setTime(time);
|
180
|
+
return result;
|
181
|
+
}
|
182
|
+
return new Date();
|
183
|
+
},
|
184
|
+
|
185
|
+
nowBaseline: function(dateStr) {
|
186
|
+
this._nowActual = new Date();
|
187
|
+
this._nowBaseLine = this.parseIso8601(dateStr);
|
188
|
+
},
|
189
|
+
|
190
|
+
/**
|
191
|
+
* 把格式为iso8601的字符串转换为Date对象
|
192
|
+
* @param {string} str
|
193
|
+
* @returns {Date}
|
194
|
+
*/
|
195
|
+
parseIso8601: function(str) {
|
196
|
+
var block = str.split("T")
|
197
|
+
var dateStr = block[0];
|
198
|
+
var timeWithZoneStr = block[1];
|
199
|
+
|
200
|
+
var year = 0;
|
201
|
+
var month = 0;
|
202
|
+
var day = 1;
|
203
|
+
|
204
|
+
if (dateStr) {
|
205
|
+
var d = dateStr.split("-");
|
206
|
+
year = parseInt(d[0] || "0", 10);
|
207
|
+
month = parseInt(d[1] || "1", 10) - 1;
|
208
|
+
day = parseInt(d[2] || "1", 10);
|
209
|
+
}
|
210
|
+
|
211
|
+
var hours = 0;
|
212
|
+
var minutes = 0;
|
213
|
+
var seconds = 0;
|
214
|
+
var milliseconds = 0;
|
215
|
+
var minutesOffset = 0;
|
216
|
+
|
217
|
+
if (timeWithZoneStr) {
|
218
|
+
var m = timeWithZoneStr.match(/([^\+\-|Z]+)(Z|[\-\+].+)?/)
|
219
|
+
var time = m[1];
|
220
|
+
var zone = m[2];
|
221
|
+
|
222
|
+
var t = time.match(/(\d{2}):?(\d{2})?:?(\d{2})?(\.\d+)?/)
|
223
|
+
if (t[1]) {
|
224
|
+
hours = parseInt(t[1] || "0", 10);
|
225
|
+
}
|
226
|
+
if (t[2]) {
|
227
|
+
minutes = parseInt(t[2] || "0", 10);
|
228
|
+
}
|
229
|
+
if (t[3]) {
|
230
|
+
seconds = parseInt(t[3] || "0", 10);
|
231
|
+
}
|
232
|
+
if (t[4]) {
|
233
|
+
milliseconds = parseInt(t[4].substing(1) || "0", 10);
|
234
|
+
}
|
235
|
+
|
236
|
+
if (zone && zone[0] != "Z") {
|
237
|
+
var z = zone.match(/([\+\-])(\d{2}):?(\d+)/);
|
238
|
+
minutesOffset = parseInt(z[2], 10) * 60 + parseInt(z[3] || "0", 10);
|
239
|
+
if (z[1] == "+") {
|
240
|
+
minutesOffset = 0 - minutesOffset;
|
241
|
+
}
|
242
|
+
}
|
243
|
+
}
|
244
|
+
|
245
|
+
var localMinutesOffset = minutesOffset - new Date().getTimezoneOffset();
|
246
|
+
var date = new Date(year, month, day, hours, minutes, seconds)
|
247
|
+
var time = date.getTime() + localMinutesOffset * 60 * 1000;
|
248
|
+
date.setTime(time);
|
249
|
+
return date;
|
250
|
+
},
|
251
|
+
|
252
|
+
/**
|
253
|
+
* 判断数组是否含有该对象
|
254
|
+
* @param {array} array
|
255
|
+
* @param {object} obj
|
256
|
+
* @returns {boolean}
|
257
|
+
*/
|
258
|
+
contains: function(array, obj) {
|
259
|
+
for(var i=0; i < array.length; i++){
|
260
|
+
if (array[i] == obj) {
|
261
|
+
return true;
|
262
|
+
}
|
263
|
+
}
|
264
|
+
return false;
|
265
|
+
},
|
266
|
+
|
267
|
+
/**
|
268
|
+
* 判断对象是否为空
|
269
|
+
* @todo 需要支持数组
|
270
|
+
* @param {object} hash
|
271
|
+
* @returns {boolean}
|
272
|
+
*/
|
273
|
+
isEmpty: function(hash) {
|
274
|
+
for (var name in hash) {
|
275
|
+
return false;
|
276
|
+
}
|
277
|
+
|
278
|
+
return true;
|
279
|
+
},
|
280
|
+
|
281
|
+
debug: function(msg) {
|
282
|
+
|
283
|
+
}
|
284
|
+
}
|
285
|
+
|
286
|
+
|
287
|
+
|
288
|
+
Basic.extend(Pox, Basic);
|
289
|
+
})();
|
@@ -0,0 +1,54 @@
|
|
1
|
+
(function() {
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
var Debugger = {
|
5
|
+
messages: [],
|
6
|
+
ready: false,
|
7
|
+
enabled: true,
|
8
|
+
element: null,
|
9
|
+
sequence: 1,
|
10
|
+
|
11
|
+
debug: function(msg) {
|
12
|
+
if (this.enabled) {
|
13
|
+
var message = "<li>" + this.sequence + " : " + (msg || "") + "</li>";
|
14
|
+
this.sequence += 1;
|
15
|
+
this.messages.unshift(message);
|
16
|
+
this.flush();
|
17
|
+
}
|
18
|
+
},
|
19
|
+
|
20
|
+
disable: function() {
|
21
|
+
this.enabled = false;
|
22
|
+
this.messages = [];
|
23
|
+
},
|
24
|
+
|
25
|
+
flush: function() {
|
26
|
+
if (!this.ready) { return; }
|
27
|
+
|
28
|
+
var output = Array.prototype.slice.call(this.messages, 0, 20);
|
29
|
+
this.element.innerHTML = output.join("\n");
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
Pox.ready(function() {
|
34
|
+
var box = Pox.getById("debug");
|
35
|
+
if (box) {
|
36
|
+
Debugger.element = box;
|
37
|
+
Debugger.ready = true;
|
38
|
+
Debugger.flush();
|
39
|
+
} else {
|
40
|
+
Debugger.disable();
|
41
|
+
}
|
42
|
+
});
|
43
|
+
|
44
|
+
/** @lends Pox */
|
45
|
+
Pox.extend(Pox, {
|
46
|
+
/**
|
47
|
+
* 输出调试日志
|
48
|
+
* @param {string} msg
|
49
|
+
*/
|
50
|
+
debug: function(msg) {
|
51
|
+
Debugger.debug(msg);
|
52
|
+
}
|
53
|
+
});
|
54
|
+
})();
|
@@ -0,0 +1,261 @@
|
|
1
|
+
//= require ./core
|
2
|
+
(function() {
|
3
|
+
"use strict";
|
4
|
+
|
5
|
+
/** @lends Pox */
|
6
|
+
var PoxDom = {
|
7
|
+
|
8
|
+
/**
|
9
|
+
* 增加 dom 对象的 样式
|
10
|
+
* @param {HTMLElement} element
|
11
|
+
* @param {string} className
|
12
|
+
*/
|
13
|
+
addClassName: function(element, className) {
|
14
|
+
if (this.hasClassName(element, className)) { return; }
|
15
|
+
|
16
|
+
var classNames = element.className || "";
|
17
|
+
classNames += " " + className;
|
18
|
+
element.className = classNames;
|
19
|
+
},
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
/**
|
24
|
+
* 删除 dom 对象的 样式
|
25
|
+
* @param {HTMLElement} element
|
26
|
+
* @param {string} className
|
27
|
+
*/
|
28
|
+
removeClassName: function(element, className) {
|
29
|
+
var classList = this.getClassNames(element);
|
30
|
+
var newClassList = [];
|
31
|
+
for (var i = 0; i < classList.length; i++) {
|
32
|
+
var theClassName = classList[i];
|
33
|
+
if (theClassName != "" && theClassName != className) {
|
34
|
+
newClassList.push(theClassName)
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
element.className = newClassList.join(" ");
|
39
|
+
},
|
40
|
+
|
41
|
+
/**
|
42
|
+
* @param {HTMLElement} element
|
43
|
+
* @param {string} className
|
44
|
+
* @param {boolean} toggle
|
45
|
+
*/
|
46
|
+
toggleClassName: function(element, className, toggle) {
|
47
|
+
if (toggle) {
|
48
|
+
this.addClassName(element, className);
|
49
|
+
} else {
|
50
|
+
this.removeClassName(element, className);
|
51
|
+
}
|
52
|
+
},
|
53
|
+
|
54
|
+
/**
|
55
|
+
* 获取dom对象的样式
|
56
|
+
* @param {HTMLElement} element
|
57
|
+
* @param {string} className
|
58
|
+
* @param {boolean} toggle
|
59
|
+
* @returns {string}
|
60
|
+
*/
|
61
|
+
getClassNames: function(element) {
|
62
|
+
var classNames = element.className || "";
|
63
|
+
return classNames.split(" ");
|
64
|
+
},
|
65
|
+
|
66
|
+
/**
|
67
|
+
* 判断dom对象是否含有该样式
|
68
|
+
* @param {HTMLElement} element
|
69
|
+
* @param {string} className
|
70
|
+
* @returns {boolean}
|
71
|
+
*/
|
72
|
+
hasClassName: function(element, className) {
|
73
|
+
var classList = this.getClassNames(element);
|
74
|
+
for (var i = 0; i < classList.length; i++) {
|
75
|
+
if (classList[i] == className) {
|
76
|
+
return true;
|
77
|
+
}
|
78
|
+
}
|
79
|
+
return false;
|
80
|
+
},
|
81
|
+
|
82
|
+
/**
|
83
|
+
* 删除dom对象
|
84
|
+
* @param {HTMLElement} element
|
85
|
+
* @returns {object}
|
86
|
+
*/
|
87
|
+
remove: function(element) {
|
88
|
+
element.parentNode.removeChild(element);
|
89
|
+
},
|
90
|
+
|
91
|
+
/**
|
92
|
+
* 通过class查询dom元素
|
93
|
+
* @param {HTMLElement} element
|
94
|
+
* @param {string} className
|
95
|
+
* @returns {Array}
|
96
|
+
*/
|
97
|
+
queryByClass: function(element, className) {
|
98
|
+
if (element.getElementsByClassName) {
|
99
|
+
return element.getElementsByClassName(className);
|
100
|
+
}
|
101
|
+
|
102
|
+
var tags = element.getElementsByTagName("*");
|
103
|
+
var result = [];
|
104
|
+
|
105
|
+
for (var i = 0; i < tags.length; i++) {
|
106
|
+
if (this.hasClassName(tags[i], className)) {
|
107
|
+
result.push(tags[i]);
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
return result;
|
112
|
+
},
|
113
|
+
|
114
|
+
/**
|
115
|
+
* 通过class查询第一个符合条件的dom元素
|
116
|
+
* @param {HTMLElement} element
|
117
|
+
* @param {string} className
|
118
|
+
* @returns {HTMLElement}
|
119
|
+
*/
|
120
|
+
findByClass: function(element, className) {
|
121
|
+
var els = this.queryByClass(element, className) || [];
|
122
|
+
return els[0];
|
123
|
+
},
|
124
|
+
|
125
|
+
/**
|
126
|
+
* 通过id查询dom元素
|
127
|
+
* @param {string} id
|
128
|
+
* @returns {HTMLElement}
|
129
|
+
*/
|
130
|
+
getById: function(id) {
|
131
|
+
return document.getElementById(id);
|
132
|
+
},
|
133
|
+
|
134
|
+
/**
|
135
|
+
* 切换dom元素的显示与隐藏状态
|
136
|
+
* @param {HTMLElement} element
|
137
|
+
* @param {boolean} flag
|
138
|
+
*/
|
139
|
+
toggle: function(element, flag){
|
140
|
+
if (flag) {
|
141
|
+
element.style.display = "block";
|
142
|
+
} else {
|
143
|
+
element.style.display = "none";
|
144
|
+
}
|
145
|
+
},
|
146
|
+
|
147
|
+
/**
|
148
|
+
* <del>获得style的属性值</del>
|
149
|
+
* @deprecated 因为有些机顶盒会返回非 string 类型的值, 所以请用 {@linkcode Pox.getComputedStyle getComputedStyle} 代替
|
150
|
+
* @param {HTMLElement} element
|
151
|
+
* @param {string} cssProperty
|
152
|
+
* @returns {*}
|
153
|
+
*/
|
154
|
+
getStyle: function(element, cssProperty) {
|
155
|
+
if (!element) {
|
156
|
+
return null;
|
157
|
+
}
|
158
|
+
|
159
|
+
if (element.currentStyle) {
|
160
|
+
return element.currentStyle[cssProperty];
|
161
|
+
} else {
|
162
|
+
return window.getComputedStyle(element)[cssProperty];
|
163
|
+
}
|
164
|
+
},
|
165
|
+
|
166
|
+
/**
|
167
|
+
* 获得计算后的属性值
|
168
|
+
* @param {HTMLElement} element
|
169
|
+
* @param {string} cssProperty
|
170
|
+
* @returns {string}
|
171
|
+
*/
|
172
|
+
getComputedStyle: function(element, cssProperty) {
|
173
|
+
var value = this.getStyle(element, cssProperty);
|
174
|
+
|
175
|
+
if (cssProperty == "opacity" && typeof value == "number") {
|
176
|
+
return (value / 100.0).toString();
|
177
|
+
}
|
178
|
+
|
179
|
+
if (typeof value == "number") {
|
180
|
+
if (value > 100000000) { //茁壮盒子会将auto返回为undefined,百分比返回一个很大的数字
|
181
|
+
return null;
|
182
|
+
}
|
183
|
+
|
184
|
+
return value + "px";
|
185
|
+
}
|
186
|
+
|
187
|
+
return value;
|
188
|
+
},
|
189
|
+
|
190
|
+
/**
|
191
|
+
* 设置style的属性值
|
192
|
+
* @param {HTMLElement} element
|
193
|
+
* @param {string} cssProperty
|
194
|
+
* @param {string} cssValue
|
195
|
+
*/
|
196
|
+
setStyle: function(element, cssProperty, cssValue) {
|
197
|
+
if (!element) {
|
198
|
+
return null;
|
199
|
+
}
|
200
|
+
|
201
|
+
element.style[cssProperty] = cssValue;
|
202
|
+
},
|
203
|
+
|
204
|
+
|
205
|
+
/**
|
206
|
+
* @typedef {object} DimensionReturn
|
207
|
+
* @property {number} top
|
208
|
+
* @property {number} left
|
209
|
+
* @property {number} width
|
210
|
+
* @property {number} height
|
211
|
+
*/
|
212
|
+
/**
|
213
|
+
* 获得element相对于屏幕的座标和高宽
|
214
|
+
* @param {HTMLElement} element
|
215
|
+
* @returns {DimensionReturn}
|
216
|
+
*/
|
217
|
+
getScreenDimension: function(element) {
|
218
|
+
var dimension = {
|
219
|
+
top: element.offsetTop,
|
220
|
+
left: element.offsetLeft,
|
221
|
+
width: element.offsetWidth,
|
222
|
+
height: element.offsetHeight
|
223
|
+
}
|
224
|
+
|
225
|
+
var parentElement = element.offsetParent;
|
226
|
+
while (parentElement) {
|
227
|
+
dimension.top += parentElement.offsetTop;
|
228
|
+
dimension.left += parentElement.offsetLeft;
|
229
|
+
parentElement = parentElement.offsetParent;
|
230
|
+
}
|
231
|
+
|
232
|
+
return dimension;
|
233
|
+
},
|
234
|
+
|
235
|
+
/**
|
236
|
+
* 创建dom对象
|
237
|
+
* @param {string} html
|
238
|
+
* @returns {HTMLElement}
|
239
|
+
*/
|
240
|
+
createElement: function(html) {
|
241
|
+
var div = document.createElement('div')
|
242
|
+
div.innerHTML = html
|
243
|
+
return div.children[0];
|
244
|
+
},
|
245
|
+
|
246
|
+
/**
|
247
|
+
* 切换是否隐藏
|
248
|
+
* @param {HTMLElement} element
|
249
|
+
* @param {boolean} toggle
|
250
|
+
*/
|
251
|
+
toggleVisibility: function(element, toggle) {
|
252
|
+
if (toggle) {
|
253
|
+
element.style.visibility = "visible";
|
254
|
+
} else {
|
255
|
+
element.style.visibility = "hidden";
|
256
|
+
}
|
257
|
+
}
|
258
|
+
}
|
259
|
+
|
260
|
+
Pox.extend(Pox, PoxDom);
|
261
|
+
})();
|