美文网首页
看api.js源码学习笔记!

看api.js源码学习笔记!

作者: duziten | 来源:发表于2018-01-17 10:07 被阅读0次

    框架的主体结构

    //自执行函数,将window作为参数传入
    (function(window){
     var u={}//定义一个空对象,在对象上挂载静态方法
      ...
      window.$api = u; //将对象赋值给window对象上的一个全局属性
    }(window))
    

    判断是否是元素节点,利用节点类型

      obj && obj.nodeType == 1
    

    注册只触发一次事件监听

    内部利用函数封装,绑定只调用一次的函数,然后移除事件。

    u.one = function(el, name, fn, useCapture){
            if(!u.isElement(el)){
                console.warn('$api.one Function need el param, el param must be DOM Element');
                return;
            }
            useCapture = useCapture || false;
            var that = this;
            var cb = function(){
                fn && fn();
                that.rmEvt(el, name, cb, useCapture);
            };
            that.addEvt(el, name, cb, useCapture);
        };
    

    移除元素

    利用父节点移除子元素

      u.remove = function(el){
            if(el && el.parentNode){
                el.parentNode.removeChild(el);
            }
        };
    

    修改class

    使用了classList的add,remove,toggle方法

       if('classList' in el){
             el.classList.add(cls);
         }else{
             var preCls = el.className;
             var newCls = preCls +' '+ cls;
             el.className = newCls;
         }
        return el;
    

    获取表单元素的value

    selectedIndex 属性可设置或返回下拉列表中被选选项的索引号.
    下拉菜单SELECT使用了

    el.options[el.selectedIndex].value;
    

    插入html

    使用了insertAdjacentHTML();

    u.prepend = function(el, html){
            if(!u.isElement(el)){
                console.warn('$api.prepend Function need el param, el param must be DOM Element');
                return;
            }
            el.insertAdjacentHTML('afterbegin', html);
            return el;
        };
    

    设置css

    使用了cssText,兼容性

    el.style && (el.style.cssText += ';' + css);//此处的分号是因为ie会去掉末尾的;
    

    一些小技巧

    兼容处理:

    var sl = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
    var st = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
    //使用&&和||短路特性
    el.style && (el.style.cssText += ';' + css);
    time = time || 500;
    

    相关文章

      网友评论

          本文标题:看api.js源码学习笔记!

          本文链接:https://www.haomeiwen.com/subject/areyoxtx.html