原生js中获取offset系列值 和 jquery中获取 offset()的区别

一 :关于offset系列的值

http://blog.csdn.net/qq_35809245/article/details/53981843

建议大家先看这篇文章,理解offset取值的问题这里简单介绍下:
1 如果父元素有定位,那么子元素的offset是相对于父元素的border内边界的距离,

2 如果父元素没有定位,那么子元素的offset是相对于文档的边界的距离

3 offset系列在原生js中仅仅可读,不可以设置

4 但是在jquery中 offset( ) 不写参数可以获取top left 两个数字类型的值,单位是px

如果写了参数代表可以设置top left

5 jquery官方文档定义offset : 获取匹配元素在当前视口的相对偏移。所以在jquery中永远都是相对于文档边界,而不论父元素是否定位

二 太晚了 我抓紧撸代码给大家看:

    <style>
    *{
        margin: 0;
        padding: 0;
    }
    div{
        border: 5px solid #000;
        position: absolute;
        top: 100px;
        width: 300px;
        height: 200px;

    }
    p{
        border: 1px solid green;
        width: 200px;
        position: absolute;
    }
</style>
<div><p id="p2">这是一个段落</p></div>
<script src="jquery-1.12.2.js"></script>

script标签1 第一种情况:这种情况证明了在jquery中offset( )无论是获取值还是设置值 都是相对于文档而言的,不会相对于父元素

<script>
    var offset = $("p2").offset();

    //offset() 方法返回值是两个整形数字,一个top一个 left
    //105  p2距离文档上边界105  ,由div 的  top 100  和border组成
    console.log(offset.left);

     //5  border 5
    //写参数可以设置offset的值,基准还是文档的边界
    var offset = $("p2").offset();

    //offset() 方法返回值是两个整形数字,一个top一个 left

    console.log(offset.top); //50   返回的是上一行代码设置的距离
    console.log(offset.left);//30

</script>

script 标签2 第二种情况,大家不要管script1 里面的内容,可以将其注释掉,自己可以试试效果

<script>
//jquery获取offset值,相对于文档
var offset = $("p:last").offset();
console.log(offset.top); //105
console.log(offset.left);//5
 //js获取offset值,相对于父元素
var p2 = document.getElementById("p2");
console.log(p2.offsetLeft);//0  相对于定位的父元素内边界
console.log(p2.offsetTop);//0

</script>

三 总结

1 原生js中通过DOM 操作获取元素的offsetLedt offsetTop 是一个可读的属性,不可设置值,如果父元素定位,那么相对于父元素边界获取offset值,如果父元素没有定位,那么相对于文档边界
2 而在jquery中offset( ) 可以获取:()里面没有参数,也可以设置()里面有top left 的键值对,并且仅仅是相对于文档边界 获取或者设置的,无论父元素是否定位

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值