不要再问我js和jq中三大家族的区别了~~

最近一些小伙伴纷纷开了个人博客,鄙人也来凑个热闹,简单的记录一些个人学习、工作的心得体会和技术点。进驻掘金的第一篇,献给前端核心元老javascript! 

                

一提到三大家族,不少小伙伴就头疼,这几天又碰到几个搞不清js和jq中三大家族区别的小伙伴,我只想说,都9102年了,怎么还在研究三大家族,不要再问我他们的区别和联系了。。。开个玩笑,基础毕竟是基础,还是要扎扎实实地掌握的。本文将常用的三大家族方法都列出来,并标出他们的区别和联系,不常用的直接略过。

      废话不多说,直接上代码和结论。

一、JS中的offset家族

J.1 offsetWidth与offsetHeight

这俩获取的是元素的实际宽高 即

width + border + padding复制代码

注意点:

1.可以获取行内及内嵌的宽高

2.获取到的值是一个number类型,不带单位

3.获取的宽高包含border

4.只能读取,不能设置

5.对应jq中outerWidth( )和outerHeight()不传参时的用法

对应jq中:

Q.1.1 width()/height()方法:获取到的是不带边框以及内边距的宽高 

注意点:

1.获取到的就是内容的宽高,不带px的number类型的值

2.获取时不需要传参

3.传参代表的是设置内容的宽高。强调一下,可以设置!

Q.1.2  innerWidth()/innerHeight()

注意点:

1.获取到的是 内容content+padding的宽高,这是一个number类型的值

2.获取时不需要传参

3.传参代表的是设置内容的宽高,但是注意这里不会改变border的大小

Q.1.3 outerWidth ( true ) / outerHeight ( true ) 

注意点:

1.获取到的是 

width+padding+border+margin 复制代码

的宽高

2.不传参代表的是获取。获取到的是内容+padding+border 的宽高. 此时等于js中的offsetWidth或者offsetHeight

3.传的参数是true,获取到的是内容+padding+border+margin 的宽高


J.2   js中offsetLeft与offsetTop

offsetLeft:获取自己左外边框与offsetParent的左内边框的距离

offsetTop:获取自己上外边框与offsetParent的上内边框的距离

对应jq中:

Q.2.1  position方法

注意点:

1.获取的是元素距离有定位的父元素(offsetParent)的位置 

2.获取到的是一个对象,包含top和left值. 无单位

3.不能进行设置

4.可以分别获取position().left;和position().top;得到两个number类型值


J.3 js中offsetParent

获取最近的定位父元素 (自己定位参照的父元素)

注意点:
1.如果元素自身是固定定位(fixed),则定位父级是null
2.如果元素自身是非固定定位,并且所有的父元素都没有定位,那么他的定位父级是body
3.body的定位父级是null

对应jq中:

Q.3 offsetParent()

二、JS中的scroll家族 

一、scrollwidth与scrollHeight:

获取元素内容的真实宽高,这里是内容,不包括内边距以及border

1、scrollHeight表示元素的总高度,包括由于溢出而无法展示在网页的不可见部分

2、scrollWidth表示元素的总宽度,包括由于溢出而无法展示在网页的不可见部分

3、scrollTop:onscroll事件发生时,元素向上卷曲出去的距离。常用

4、scrollLeft:onscroll事件发生时,元素向左卷曲出去的距离。常用

简单的封装一段新老浏览器中获取屏幕卷曲距离的兼容代码:

function getScroll() {
  var obj = {
      top:  document.documentElement.scrollTop || window.pageYOffset || 
            document.body.scrollTop || 0, 
      left: document.documentElement.scrollLeft || window.pageXOffset || 
            document.body.scrollLeft      
  };    
  return obj; 
}   
 // 验证:
window.onscroll = function () { 
   console.log(getScroll().top);
 };复制代码

其中window.pageYOffset是目前新式浏览器普遍支持的主流写法。

在9102年,jq都要过时的年代,前端工程师们实在不应该再在以ie6为代表的一些低版本浏览器的兼容性上浪费生命。借用一句话,人生苦短,我用jquery。

jQuery中scrollTop()与scrollLeft()

jQuery中的scrollLeft与scrollTop的方法和原生的js中老版本的一样。

注意点:

1、获取页面被卷曲的高度

$(window).scrollTop();//可以获取和设置复制代码

2、获取页面被卷曲的宽度

 $(window).scrollLeft();//可以获取和设置复制代码

3. 有时候需要给页面设置滚动动画,不可以给window设置,要给html和body设置,例如

$('html,body').animate({scrollTop:0},400)//兼容不同浏览器的写法复制代码


三、JS中的client家族

1、clientWidth/clientHeight:获取可视区域或者元素的width/height+padding。常用。配合resize事件。

2、clientTop/clientLeft:不常用,其实就是左边框border-left和上边框border-top。

既然为scroll家族封装了兼容代码,不好厚此薄彼,给client家族也封装一套吧:

获取页面可视区域的宽高

getClientSize = function () {
      return {  
          clientWidth : window.innerWidth || document.documentElement.clientWidth ||
                        document.body.clientWidth || 0,  
          clientHeight : window.innerHeight || document.documentElement.clientHeight ||
                         document.body.clientHeight || 0
      }
}
 复制代码

其中新版浏览器获取,常用window.innerWidth

对应jq中:

宽度 (window).innerWidth()

高度(window).innerHeight()


以上。至此,三大家族给了一个简单的总结,写的不对的地方,恳请指出,感谢。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值