原生js offset的使用学习

最近用到了offset这个鬼,但是有不理解的地方,所以测试一下!!
基本用法:找到对象后,使用
offsetLeft \ offsetTop \ offsetWidth \ offsetHeight
就可以得到对象的 宽、高、距离左边的距离,距离右边的距离的具体值。

忘记了,外边的大框框用的position:relative;

搞了两个,里面的灰色块,一个用的定位,一个用的margin;

通过比较,

注意第2、4数据,完全一样,得到的是距离其父元素的左边距和上边距

  function offset(elem){
            var obj={
                left:elem.offsetLeft,
                top:elem.offsetTop,
                width:elem.offsetWidth,
                height:elem.offsetHeight
            }
         
            return obj;
  }

然后加点东西

function offset(elem){
            var obj={
                left:elem.offsetLeft,
                top:elem.offsetTop,
                width:elem.offsetWidth,
                height:elem.offsetHeight
            }
           while(elem != document.body){
                elem = elem.offsetParent ;
                console.log(elem);
                obj.left += elem.offsetLeft ;
                obj.top += elem.offsetTop ;
            }
            return obj;

}

在看第2、4数据时,left和top的值都增加了,这是加上了与元素边距的结果。

得到是元素距离视口的左边距和上边距

是offsetParent起的作用

原因呢???我查查,我也不知道。

总结::

使用offset优先获取到视口的边距,当元素父元素有position定位的时候,获取的是到父元素的边距。

如果使用 elem = elem.offsetParent ;的时候获取的值就是到视口的距离。

描述的有点,呵呵呵呵。。。见谅!!!这个鬼在计算元素位置的时候是很好用的,值可以直接用,没有单位!!!

时间: 2024-11-10 13:11:08

原生js offset的使用学习的相关文章

原生js学习笔记2

知识点: 1:关于this指向问题,如果有函数a(),直接a()那么this指向window,new a()指向函数本身. 2:关于null和undefined.两者如果用“==”则认为两者是相等的,要使用严格相等符号===来区分.typeof null --->object,type of undefined ---->undefined,   在希望值是bool值的地方,它们的值都是假值.它们都不包含任何属性和方法.使用“.”,"[]"来存取这两个值都会产生一个类型错误

defer和async(原生js学习)转

(1) 页面下载过程要干的事情 页面parse完毕----DOMContentLoaded(DOM树建立完毕)----onload(全部资源下完,图片,iframe,flash这些) 注意js脚本要下载并执行完毕,dom树才能出来,因为script标签也属dom的一部分,同时因为js也许有dom的操作,所以必须要等js脚本执行完毕,才能完成dom的构建. parse的过程则可理解为对文档全部扫一遍,知道要干什么,接下来才是整个DOM的构建过程.parse the markup and set t

【学习笔记】——原生js中常用的四种循环方式

一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出"欢迎下次光临" 在网页中弹出框输入1   网页输出"查询中--" 在网页中弹出框输入2   网页输出"取款中--" 在网页中弹出框输入3   网页输出"转账进行中--" 在网页中弹出框输入其他字符   网页输出"无效按键" 四种循环: for循环 while循环 for  in

原生js简单轮播图 代码

在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用面向过程函数式编程去实现,相对于面向对象设计模式,代码难免会显得臃肿冗余.但没有面向对象的抽象却很适合新手理解与学习.已经在BAT的同学看到希望少喷点.另外可以多提意见. 轮播图的原理: 一系列的大小相等的图片平铺,利用CSS布局只显示一张图片,其余隐藏.通过计算偏移量利用定时器实现自动播放,或通过

原生JS封装运动框架

昨天我们说了一下原生JS中常用的兼容性写法,今天我们来说一下运动框架. 正常情况下我们要写一个运动的效果会用到tween.js这么一个插件,这个东西不是一般人写出来的,因为里面涉及的运动效果都是经过一堆数学的函数运算出来的,我们平常人是写不出来的,所有我们就自己封装一个运动框架,有什么问题改起来也方便,下面我们就开始封装. 首先,我们先写一个div,设置一些简单的样式,我们就拿这个div举例子,如下代码: #div{ width: 100px; height: 100px; background

常用原生JS兼容写法

在我们前端开发中,经常会遇到兼容性的问题,因为要考虑用户会使用不同的浏览器来访问你的页面,你要保证你做的网页在任何一个浏览器中都能正常的运行,下面我就举几个常用原生JS的兼容写法: 1:添加事件方法 addHandler:function(element,type,handler){  if(element.addEventListener){//检测是否为DOM2级方法   element.addEventListener(type, handler, false);  }else if (e

原生JS与jQuery操作DOM有什么异同点?

本文和大家分享的主要是原生JS与jQuery操作DOM相关内容,一起来看看吧,希望对大家学习javascript有所帮助. 一.创建元素节点 1.1 原生 JS 创建元素节点 document.createElement("p"); 1.2 jQuery 创建元素节点 $('<p></p>');` 二.创建并添加文本节点 2.1 原生JS创建文本节点 document.createTextNode("Text Content"); 通常创建文

放弃jQuery,使用原生js吧!

转自:http://itakeo.com/blog/2015/07/28/nojq/ 随着IE6.7.8的逐渐淘汰,HTML5的兴起,以及侧重点放在了移动端,jQuery可能变的不在那么重要,原生一样很好用.下面介绍几个原生替换jq的方法. 获取元素 JQuery $('.xxx'); //class获取 $('#xxx'); //id获取 $('.xxx.ccc'); //同时包含xxx和ccc $('.xxx,.zzz'); //多选 $('.xxx div'); //子类 $('.xxx

原生js与jQuery操作DOM的区别

转自网络 一.创建元素节点 1.1 原生JS创建元素节点 ? 1 document.createElement("p"); 1.2 jQuery创建元素节点 ? 1 $('<p></p>');` 二.创建并添加文本节点 2.1 原生JS创建文本节点 ? 1 `document.createTextNode("Text Content"); 通常创建文本节点和创建元素节点配合使用,比如: ? 1 2 3 var textEl = documen