vjs

  1     var br = (function() {
  2         var ua = navigator.userAgent.toLowerCase();
  3         browser = {
  4             iPhone: /iphone/.test(ua),
  5             iPad: /ipad/.test(ua),
  6             iPod: /ipod/.test(ua),
  7             isLetv: /letv/.test(ua),
  8             Android: /android/.test(ua),
  9             AndroidPad: /android/.test(ua) && !/mobile/.test(ua),
 10             atwin: /win/.test(ua),
 11             opera: /opera/.test(ua),
 12             msie: /msie/.test(ua),
 13             firefox: /firefox/.test(ua),
 14             safari: /safari/.test(ua) && !/chrome/.test(ua),
 15             wph: /windows phone/.test(ua),
 16             ps: /playstation/.test(ua),
 17             uc: /ucbrowser|ucweb/.test(ua),
 18             xiaomi: /xiaomi/.test(ua),
 19             weixin: /MicroMessenger/i.test(ua),
 20             isLetvTv: function() {
 21                 try {
 22                     return typeof LetvFish.getBrowserType == 'function';
 23                 } catch (e) {
 24                     return false;
 25                 }
 26             }
 27         };
 28 
 29         var rwebkit = /(webkit)[ \/]([\w.]+)/,
 30             ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
 31             rmsie = /(msie) ([\w.]+)/,
 32             rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
 33 
 34         var match = rwebkit.exec(ua) ||
 35             ropera.exec(ua) ||
 36             rmsie.exec(ua) ||
 37             ua.indexOf("compatible") < 0 && rmozilla.exec(ua) || [];
 38 
 39         browser.version = match[2] || "0";
 40         return browser;
 41     })();
 42     var $js = (function() {
 43         var undefined, filter = [].filter,
 44             slice = [].slice,
 45             class2type = {},
 46             classSelectorRE = /^\.([\w-]+)$/,
 47             idSelectorRE = /^#([\w-]*)$/,
 48             tagSelectorRE = /^[\w-]+$/;
 49 
 50         var browser = br;
 51 
 52         /**
 53          *  @desc vjs框架入口,实现DOM选择器
 54          *
 55          */
 56         vjs = function(selector, context) {
 57             return new vjs.fn.init(selector, context);
 58         }
 59 
 60         vjs.isPC = false;
 61 
 62         var qsa = function(element, selector) {
 63             var found
 64             try {
 65                 return (isDocument(element) && idSelectorRE.test(selector)) ?
 66                     ((found = element.getElementById(RegExp.$1)) ? [found] : []) :
 67                     (element.nodeType !== 1 && element.nodeType !== 9) ? [] :
 68                     slice.call(
 69                         classSelectorRE.test(selector) ? (
 70                             element.getElementsByClassName ? element.getElementsByClassName(RegExp.$1) : qsc(element, RegExp.$1)) :
 71                         tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) :
 72                         element.querySelectorAll(selector)
 73                     )
 74             } catch (e) {
 75                 return []
 76             }
 77         }
 78 
 79         var Z = function(me, dom, selector) {
 80             dom = dom || []
 81             me.selector = selector || ''
 82             me.length = dom.length
 83             for (var i = 0, j = dom.length; i < j; i++) {
 84                 me[i] = dom[i];
 85             }
 86             return me
 87         }
 88 
 89         var isZ = function(object) {
 90             return object instanceof Z
 91         }
 92 
 93         var qsc = function(parent, id) {
 94             if (parent.getElementsByTagName) {
 95                 var el = parent.getElementsByTagName('*');
 96                 var pattern = new RegExp("(^|\\s)" + id + "(\\s|$)");
 97                 for (var i = 0, j = el.length; i < j; i++) {
 98                     if (pattern.test(el[i].className)) {
 99                         return [el[i]];
100                     }
101                 }
102             }
103             return [];
104         }
105 
106         vjs.fn = {
107             init: function(selector, context) {
108                 if (!selector) return Z(this);
109                 else if (selector.nodeType) return Z(this, [selector])
110                 else {
111                     var dom
112                     if (isArray(selector)) dom = compact(selector)
113                     else if (context !== undefined) return vjs(context).find(selector)
114                     else dom = qsa(document, selector)
115                     return Z(this, dom, selector);
116                 }
117             },
118             find: function(selector) {
119                 var result, me = this;
120                 if (typeof selector == 'object')
121                     result = vjs(selector).filter(function() {
122                         var node = this
123                         return [].some.call(me, function(parent) {
124                             return vjs.contains(parent, node)
125                         })
126                     })
127                 else if (this.length == 1) result = vjs(qsa(this[0], selector))
128                 else result = this.map(function() {
129                     return qsa(this, selector)
130                 })
131                 return result
132             },
133             each: function(callback) {
134                 if ([].every) {
135                     [].every.call(this, function(el, idx) {
136                         return callback.call(el, idx, el) !== false
137                     });
138                 } else {
139                     for (var i = 0, len = this.length; i < len; i++) {
140                         callback.call(this[i], i, this[i]);
141                     }
142                 }
143 
144                 return this
145             },
146             hasClass: function(name) {
147                 var me = this[0];
148                 return new RegExp('(\\s|^)' + name + '(\\s|$)').test(me.className);
149             },
150             addClass: function(name) {
151                 var classNameArray = (name || '').split(/\s+/);
152                 return this.each(function() {
153                     var currClassName = this.className;
154                     for (var i = 0, len = classNameArray.length; i < len; i++) {
155                         if (!vjs(this).hasClass(classNameArray[i])) {
156                             currClassName += ' ' + classNameArray[i];
157                         }
158                     }
159                     this.className = currClassName;
160                 });
161             },
162             removeClass: function(name) {
163                 var classNameArray = (name || '').split(/\s+/);
164                 return this.each(function() {
165                     var currClassName = this.className;
166                     for (var i = 0, len = classNameArray.length; i < len; i++) {
167                         var reg = new RegExp('(\\s|^)' + classNameArray[i] + '(\\s|$)');
168                         currClassName = currClassName.replace(reg, ' ');
169                     }
170 
171                     this.className = vjs.trim(currClassName);
172                 })
173             },
174             on: function(name, callback, context) {
175                 return this.each(function(i, element) {
176                     var evtDelagate = function(e) {
177                         e.target = e.target || e.srcElement;
178                         callback.call(context, e)
179                     }
180                     if (!element['domid']) element['domid'] = String(Math.random()).slice(-4);
181                     var guid = name + '_' + element['domid'];
182                     callback[guid] = evtDelagate;
183 
184 
185                     if (element.addEventListener) {
186                         element.addEventListener(name, evtDelagate, false);
187                     } else if (element.attachEvent) {
188                         element.attachEvent('on' + name, evtDelagate);
189                     }
190 
191                 });
192             },
193             off: function(name, callback, context) {
194                 return this.each(function(i, element) {
195                     var guid = name + '_' + element['domid'],
196                         fn = callback[guid] || callback;
197 
198                     if (element.removeEventListener) {
199                         element.removeEventListener(name, fn, false);
200                     } else if (element.detachEvent) {
201                         element.detachEvent('on' + name, fn);
202                     }
203                 });
204             },
205             getStyle: function(styleName) {
206                 var node = this[0];
207                 if (browser.msie) {
208                     switch (styleName) {
209                         // 透明度
210                         case "opacity":
211                             return ((node.filters['DXImageTransform.Microsoft.Alpha'] ||
212                                     node.filters['alpha'] || {}).opacity ||
213                                 100);
214                             // 浮动
215                         case "float":
216                             styleName = "styleFloat";
217                     }
218                     return node.style[styleName] ||
219                         node.currentStyle ? node.currentStyle[styleName] : 0;
220                 } else {
221                     // 浮动
222                     if (styleName == "float") {
223                         styleName = "cssFloat";
224                     }
225                     return node.style[styleName] ||
226                         (document.defaultView.getComputedStyle(node, "") ? document.defaultView.getComputedStyle(node, "")[styleName] : null) || 0;
227                 }
228             },
229             setStyle: function(styleName, styleValue) {
230                 return this.each(function() {
231                     var node = this;
232                     if (browser.msie) {
233                         switch (styleName) {
234                             case "opacity":
235                                 node.style.filter = "alpha(opacity=" + (styleValue * 100) + ")";
236                                 if (!node.currentStyle || !node.currentStyle.hasLayout) {
237                                     node.style.zoom = 1;
238                                 }
239                                 return;
240                             case "float":
241                                 styleName = "styleFloat";
242                         }
243                     } else {
244                         if (styleName == "float") {
245                             styleName = "cssFloat";
246                         }
247                     }
248 
249                     node.style[styleName] = styleValue;
250                 });
251             },
252             getAttr: function(name) {
253                 var node = this[0];
254                 return node.getAttribute(name);
255             },
256             setAttr: function(name, value) {
257                 return this.each(function() {
258                     var node = this;
259                     node.setAttribute(name, value);
260                 });
261             },
262             offset: function() {
263                 var me = this[0];
264                 var body = document.body,
265                     box = me.getBoundingClientRect();
266 
267                 return {
268                     top: box.top + (window.scrollY || body.parentNode.scrollTop || me.scrollTop) - (document.documentElement.clientTop || body.clientTop || 0),
269                     left: box.left + (window.scrollX || body.parentNode.scrollLeft || me.scrollLeft) - (document.documentElement.clientLeft || body.clientLeft || 0)
270                 };
271             },
272             width: function(num) {
273                 if (typeof num == 'undefined') {
274                     return this[0].offsetWidth;
275                 }
276                 this[0].style.width = parseFloat(num) + 'px';
277             },
278             height: function(num) {
279                 if (typeof num == 'undefined') {
280                     return this[0].offsetHeight;
281                 }
282                 this[0].style.height = parseFloat(num) + 'px';
283             },
284             map: function(fn) {
285                 return vjs(vjs.map(this, function(el, i) {
286                     return fn.call(el, i, el)
287                 }))
288             }
289         }
290 
291         vjs.fn.init.prototype = vjs.fn;
292 
293 
294         function type(obj) {
295             return obj == null ? String(obj) :
296                 class2type[toString.call(obj)] || "object"
297         }
298 
299         function isFunction(value) {
300             return type(value) == "function"
301         }
302 
303         function isDocument(obj) {
304             return obj != null && (obj.nodeType == 9 || obj.nodeType == obj.DOCUMENT_NODE)
305         }
306 
307         function isArray(value) {
308             return value instanceof Array
309         }
310 
311         function likeArray(obj) {
312             return typeof obj.length == 'number'
313         }
314 
315         function compact(array) {
316             return filter.call(array, function(item) {
317                 return item != null
318             })
319         }
320 
321         function className(node, value) {
322             var klass = node.className,
323                 svg = klass && klass.baseVal !== undefined
324 
325             if (value === undefined) return svg ? klass.baseVal : klass
326             svg ? (klass.baseVal = value) : (node.className = value)
327         }
328 
329         function funcArg(context, arg, idx, payload) {
330             return isFunction(arg) ? arg.call(context, idx, payload) : arg
331         }
332 
333 
334         vjs.contains = function(parent, node) {
335             return parent !== node && parent.contains(node)
336         }
337 
338         vjs.map = function(elements, callback) {
339             var value, values = [],
340                 i, key
341             if (likeArray(elements))
342                 for (i = 0; i < elements.length; i++) {
343                     value = callback(elements[i], i)
344                     if (value != null) values.push(value)
345                 } else
346                     for (key in elements) {
347                         value = callback(elements[key], key)
348                         if (value != null) values.push(value)
349                     }
350             return values
351         }
352 
353         vjs.each = function(elements, callback) {
354             var i, key
355             if (likeArray(elements)) {
356                 for (i = 0; i < elements.length; i++)
357                     if (callback.call(this, i, elements[i]) === false) return elements
358             } else {
359                 for (key in elements)
360                     if (callback.call(this, key, elements[key]) === false) return elements
361             }
362 
363             return elements
364         }
365 
366         vjs.trim = function(str) {
367             return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
368         }
369 
370         vjs.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
371             class2type["[object " + name + "]"] = name.toLowerCase()
372         });
373 
374         vjs.extend = function(props) {
375             var init, subObj;
376 
377             props = props || {};
378 
379             init = props['init'] || props.init || this.prototype['init'] || this.prototype.init || function() {};
380 
381             subObj = function() {
382                 init.apply(this, arguments);
383             };
384 
385             subObj.prototype = vjs.create(this.prototype);
386             subObj.prototype.constructor = subObj;
387 
388             if (!props.__proto__) props.__proto__ = subObj.prototype;
389 
390             subObj.extend = vjs.extend;
391 
392             for (var name in props) {
393                 if (props.hasOwnProperty(name)) {
394                     subObj.prototype[name] = props[name];
395                 }
396             }
397 
398             return subObj;
399         }
400 
401         vjs.create = function(obj) {
402             function F() {}
403             F.prototype = obj;
404             return new F();
405         };
406 
407         vjs.getWinWH = function() {
408             var pagerWidth = window.innerWidth,
409                 pagerHeight = window.innerHeight;
410 
411             if (typeof pagerWidth != 'number') {
412                 if (document.compatMode == 'CSS1Compat') {
413                     pagerWidth = document.documentElement.clientWidth;
414                     pagerHeight = document.documentElement.clientHeight;
415                 } else {
416                     pagerWidth = document.body.clientWidth;
417                     pagerHeight = document.body.clientHeight;
418                 }
419             }
420             return {
421                 width: pagerWidth,
422                 height: pagerHeight
423             }
424         }
425 
426         vjs.safari = browser.safari;
427 
428         return vjs;
429     })();
430         var emptyFn = function(){};
431     var lib = {
432         createElement: function(tagName, attributes) {
433             var el = document.createElement(tagName),
434                 attrname;
435             for (attrname in attributes) {
436                 if (attributes.hasOwnProperty(attrname)) {
437                     if (attrname.indexOf("-") !== -1) {
438                         el.setAttribute(attrname, attributes[attrname]);
439                     } else {
440                         el[attrname] = attributes[attrname];
441                     }
442                 }
443             }
444             return el;
445         },
446         removeElem: function(node) {
447             if (node) {
448                 if (node.remove) {
449                     return node.remove();
450                 } else {
451                     return node.parentNode && node.parentNode.removeChild && node.parentNode.removeChild(node);
452                 }
453             }
454         },
455         el: function(p, n) {
456             var elem = n ? $js(p).find(n)[0] : $js(p)[0];
457             if (!elem) {
458                 elem = {
459                     "setAttribute": function() {},
460                     "style": {},
461                     "isnull": true
462                 };
463             }
464 
465             return elem;
466         },
467         //判断是否存在这个元素
468         existEl: function(el) {
469             if (typeof el === 'object') {
470                 if (el.isnull) {
471                     return false;
472                 } else if (el instanceof Array) {
473                     return el.length > 0;
474                 } else {
475                     return true;
476                 }
477             } else if (typeof el === 'string') {
478                 return arguments.callee(this.el(el));
479             }
480             return false;
481         },
482         now: Date.now || function() {
483             return +new Date();
484         },
485         merge: function(obj1, obj2, safe) {
486             if (!obj2) {
487                 obj2 = {};
488             };
489 
490             for (var attrname in obj2) {
491                 if (obj2.hasOwnProperty(attrname) && (!safe || !obj1.hasOwnProperty(attrname))) {
492                     obj1[attrname] = obj2[attrname];
493                 }
494             }
495             return obj1;
496         },
497         wsLog: function(data) {},
498         debug: function(msg, prefix, line) {
499             line = line || " ";
500 
501             if (H5AD.config.DEBUG == true || adTools.getQuery("arkdebug")) {
502                 if (typeof msg == 'object') {
503                     if (prefix) {
504                         console.log("%c" + prefix, "color:#f0d");
505                         this.wsLog(prefix);
506                     }
507                     this.wsLog(msg);
508                     console.log(msg);
509                 } else {
510                     if (msg == undefined) {
511                         console.log("数据空" + line)
512                         return;
513                     }
514                     this.wsLog(msg);
515                     console.log(msg + line);
516                 }
517             }
518         },
519         json: function(data) {
520             try {
521                 if (typeof data === "string") {
522                     if (JSON && JSON.parse) {
523                         return JSON.parse(data);
524                     }
525                     return eval("(" + data + ")");
526                 }
527                 //谨慎使用
528                 return JSON.stringify(data);
529             } catch (ex) {
530                 return 'error';
531             }
532         },
533          // 对象浅复制
534         easyClone: function(raw, target) {
535             for (var prop in target) {
536                 if (target.hasOwnProperty(prop) && typeof target[prop] !== 'object') {
537                     raw[prop] = target[prop];
538                 }
539             }
540         },
541         getJSON: function(param) {
542             var url = param.url,
543                 data = param.data,
544                 success = param.success,
545                 fail = param.fail,
546                 callback = param.callback || 'callback',
547                 timeout = param.timeout || 5000,
548                 maxCount = param.maxCount || 2;
549 
550             var jsonpCallback,
551                 count = -1,
552                 delayID = 0,
553                 s,
554                 self = this,
555                 head = document.head || document.getElementsByTagName('head')[0] || document.documentElement;
556 
557             var tmp = [];
558 
559             if(data) for(var k in data) tmp.push(k + '=' + data[k]);
560 
561             if(!/\?/.test(url)){
562                 url += '?' + tmp.join('&');
563             }else{
564                 url += '&' + tmp.join('&');
565             }
566 
567             var addCb = function(){
568                 var time = self.now(),
569                     jsonpCallback = 'vjs_' + time + Math.floor(Math.random()*100);
570 
571                 window[jsonpCallback] = function(response) {
572                     destroy();
573 
574                     success.call(this, response,{responseTime: self.now()-time, retryCount: count});
575 
576                     window[jsonpCallback] = null;
577                 };
578 
579                 return jsonpCallback;
580             };
581 
582             var destroy = function(){
583                 if(window[jsonpCallback])  window[jsonpCallback] = emptyFn;
584                 clearTimeout(delayID);
585 
586                 if (s && s.parentNode) {
587                     head.removeChild(s);
588 
589                     s.onload = s.onreadystatechange = null;
590 
591                     s = undefined;
592                 }
593             };
594 
595             var load = function() {
596                 destroy();
597                 count++;
598                 if (count >= maxCount){
599                     fail && fail.call(this);
600                     return;
601                 }
602 
603                 jsonpCallback = addCb();
604 
605                 var jsonpUrl = url;
606 
607                 if(/(\=)\?(&|$)/i.test(jsonpUrl)){
608                     jsonpUrl = jsonpUrl.replace(/(\=)\?(&|$)/i,'$1' + jsonpCallback + '$2');
609                 }else{
610                     jsonpUrl += '&' + callback + '=' + jsonpCallback+'&j='+jsonpCallback;
611                 }
612 
613                 if(param.log) param.log.pushLog('lib getJSON===' + jsonpUrl + '===' + jsonpCallback + '====' + count);
614                 s = document.createElement('script');
615                 s.setAttribute('type', 'text/javascript');
616                 s.setAttribute('src', jsonpUrl);
617 
618                 head.insertBefore(s, head.firstChild);
619 
620                 delayID = setTimeout(load, timeout);
621             };
622 
623             load();
624 
625             return {
626                 destroy : destroy
627             }
628         }
629     };
630     /**
631     //以下对lib的使用
632     var url = "http://localhost:3000/reso";
633     lib.getJSON({url:url,success:function(data){
634       alert("nihao");
635     }});
636     //lib  createElement的使用
637     var src = "http://i3.letvimg.com/lc06_iscms/201611/09/23/49/7c2767be74d145a4b9e6eb8f648e46a0.jpg";
638     var img = lib.createElement('img', {
639           src: src
640     });
641     $js(img).on('load', function() {
642         img = null;
643     });
644     */
645     //
646     lib.existEl("box");//这个函数