zoukankan      html  css  js  c++  java
  • 没有jquery的时候,你看看这个

    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              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(/^ss*/, '').replace(/ss*$/, '');
    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                  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");//这个函数
  • 相关阅读:
    Excel导入
    Git 操作命令
    java线程池
    jquery 初始化数据 添加html 第一次玩0.0
    设计模式六大原则之二:里氏替换原则
    升级指令
    strtok和strtok_r(转载)
    docker进阶之路-基础篇 | 二:portainer安装与基本使用
    docker进阶之路-基础篇 | 一:环境搭建
    集群式Quartz定时任务框架实践
  • 原文地址:https://www.cnblogs.com/coding4/p/6057232.html
Copyright © 2011-2022 走看看