关于封装框架总结

关于封装框架总结

常见的框架

  • 1、常见的框架
    学习前端的都知道,前端有很多的丰富的框架。例如:通用框架:jQuery、bootstarp、zepto...;ui框架:bootstar、layerui、amazeui...MVC框架:angular.js、react.js、veu.js...我们不仅仅要知道怎么用,还需要知道为什么这样用。‘知其然,知其所以然’。
  • 2、以jQuery整体分析:
    (function(global,factory){ /* * * */ })(window,function(global,factory){ //工厂模式 function jQuery(){ return new jQuery.fn.init(selector,context); } jQuery.fn = jQuery.prototype ={ constructor: jQuery } //为什么jQuery在使用的时候 可以使用 $ 和jQuery //结合 jQuery构造函数代码,我们得知jQuery对外暴露的方法是init方法 //所以 整个jQuery的函数入口是init() window.jQuery = window.$ = jQuery; }) })
  • 3、jQuery封装内容
    事件对象、选择器对象、属性对象、样式、内容...

事件框架

事件流

  • 1、页面触发事件的三种方式
    行内执行
    行内调用
    根据id或类定义函数
    行内事件冒泡机制
    无论是DOM标准还是IE,直接写在html里的监听处理函数是事件冒泡传递时调用的,由最里层一直往上传递
  • 2、事件冒泡和捕获的区别
  • 3、IE和标准浏览器的绑定事件
    标准: addeventListener
    IE:attachEvent
  • 4、对象形式封装绑定事件
    (a) On跨浏览器封装
    Event.on(‘div1’,’click’,fn);
    on:function(id,type,fn){ var ele = this.$id(id); if(ele.addEventListener){ ele.addEventListener(type,fn,false) }else{ ele.attchEvent('on'+type,fn); } }
    b) 单独事件封装
    Event.click();
    click:function(id,fn){ this.on(id,'click',fn); }
    Mouseover
    Mouseout
    Hover 模仿jquery
    c) 面向对象 绑定到xx域下
    d) 通过自定义extend方法实现
  • 4、event对象
    (1) IE和标准浏览器的区别
    兼容写法: var e = e || window.event
    (2)框架中获取事件对象
    (3)获取目标元素
    IE: e.srcElement
    标准:e.target
  • 5、阻止默认行为
    兼容问题
    标准:e.preventDefault();
    IE: window.event.returnValue = false;
  • 6、阻止冒泡
    兼容问题
    标准: event.stopPropagation();
    IE: event.cancelBubble = true;
  • 7、事件委托
    可以实现向未来元素绑定事件
    delegate:function(p,target,type,fn){ var targetEle = null; this.on(p,type,function(e){ //目标元素 targetEle = $$.getTarget(e); //给目标元素添加事件 targetEle['on'+type] = function(e){ // 通过call动态改变当前目标元素为触发事件的对象 fn.call(this); $$.preventBubble(e); }; targetEle[type](); }) } });

选择器的封装

基本选择器

* id选择器
  `$id:function(id){
return document.getElementById(id);

}* tag$tagName:function(tName,context){
//如果存在上下文对象 则使用上下文对象 如果不存在 则使用document对象

  var ctx = context?context:document;
  return ctx.getElementsByTagName(tName);
},`
*getElementsByTagName  结果是伪数组。
跟数组一样有length属性,而且能通过下标获取相应位置的值,但不具备数组常有的功能,比如push,sort等*
* class
      `$class:function(cname,context){
      var rs = [];
      var tagAll = this.$tagName('*',context);
      for(var i = 0 ; i < tagAll.length ; i++){
        var classStr = tagAll[i].getAttribute('class');
        if(!classStr) continue;
        var classArr = this.trim(classStr).split(' ');
        for(var j = 0 ; j < classArr.length ;j ++){
          //如果遍历到的标签 存在cname的样式 则添加
            if(classArr[j] === cname){
          rs.push(tagAll[i]);
          //  div div1 red green  r1 r2 r3 r4...
          break;
            }
          }
        }
        return rs;
      },`

多组选择器

* 简单的多组
  例如:(‘.div1,.div2,#div3’)

层次选择器

* 简单的层次
  例如:比如:(‘.div1  #div2  p’);

多组+层次

例如:(‘.div1 #div2,div3 p #p1’)

复杂选择器

sizzle.js
jquery的实现

h5选择器

Document.querySelector(‘’);
Document.querySelectorAll(‘’);

css样式框架

      `css:function(selector,key,value){
      var dom = this.domAllStrict(selector);
      if(value){  //设值
        for(var i = 0 ; i < dom.length ; i++){
          dom[i].style[key] = value;
        }
      }else{  //如果是获取值 跟jq一样 只返回第一个
        //dom[0].style.color ==> 只能取行内样式
        if(dom[0].currentStyle){
          return dom[0].currentStyle[key];
        }else{
          return window.getComputedStyle(dom[0],null)[key];
          }
          }
        }`

Bom 的封装

  • 标签的宽高
    • 元素的高度与宽度
      Width+padding+border --->offset
      Width+padding --->client
      content --->scroll
  • 浏览器的宽高
    • 可视区域宽高
      • document.body.clientHeight (document.documentElement ) (ie和firfox都能用)
      • window.innerHeight (firefox能用)
      • 推荐用innerHeight (忽略滚动条的宽度)
      • 兼容写法: window.innerWidth||this.clientWidth
  • 屏幕宽高
    • window.screen.height
  • 文档宽高
    • document.body.scrollHeight
  • 文档偏移量
    • var scrollTop = window.pageYOffset|| document.documentElement.scrollTop || document.body.scrollTop;
  • event 对象
    • event
      • 兼容获取 var event = e||window.event;
      • pageX/pageY 光标相对于网页的坐标
      • screenX/screenY 相对于屏幕的坐标
      • clientX/clientY 相对于浏览器左上角的坐标
    • pageX/pageY
      • ie不兼容
      • pageY = clientY + div.scrollTop

属性封装

  • Attr
  • addClass
  • removeClass
  • hasClass

内容的封装

  • html
    html:function(selector,html){ var dom = this.domAllStrict(selector); if(html){ //设值 for(var i = 0 ; i < dom.length ;i++){ dom[i].innerHTML = html; } }else{//取值 return dom[0].innerHTML; } }
  • text 步骤同html

ajax封装

    `  ajax:function(json,callBack){
    var xhr = new XMLHttpRequest();
    var method =json.method;//get还是post
    var url =json.url;
    var param = null;  //参数
    xhr.open(method,url);
    if(method.toLowerCase() === 'post'){
    for(var i in json.param){
        param += '$'+i+'='+json.param[i];
    }
    param = param?param.substr(1):null;
      }
      xhr.send(param);
      xhr.onreadystatechange = function(){
    // 404   目标没找到
    // 500    服务器代码错误
    // 200    返回成功
    // 3xx    中转 , 重定向!
    if(xhr.readyState == 4 && xhr.status == 200){
        var data;
        if(json.type.toLowerCase() === 'xml'){
            data = xhr.responseXML;
        }else{
            data = xhr.responseText;
        }
        if(callBack){
          callBack(data);
        }
      }
    }
    },`

动画封装

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容