php js offset,获取元素的偏移量offset实例详解

问题:如果获取元素距离文档顶部的距离?[javascript] view plain copy

var rect=$('#elem')[0].getBoundingClientRect();

//获取元素距离文档顶部的距离

var top=rect.top+(window.pageYOffset||document.documentElement.scrollTop)-(document.documentElement.clientTop||0);

var left=rect.left+(window.pageXOffset||document.documentElement.scrollLeft)-(document.documentElement.clientLeft||0);

该方法的思路来自己jQuery的offset方法

null和undefined都代表没有,但是null是属性存在值不存在,undefined是连这个属性都不存在

//例如document.parentNode//浏览器天生自带的一个属性:父亲节点的属性 null (因为一个页面中的document已经是最顶级元素了,它没有父亲)document.parentnode//undefined (因为没有parentnode这个属性)

1、parentNode:父亲节点 HTML结构层级关系中的上一级元素

var outer = document.getElementById('outer');var inner = document.getElementById('inner');var center = document.getElementById('center');

center.parentNode //inner

2、offsetParent:父级参照物 在同一个平面中,最外层的元素是里面所有元素的父级参照物(和HTML层级结构没有必然的联系)

一般来说一个页面中所有元素的父级参照物都是body

document.body.offsetParent // null

想要改变父级参照物需要通过position定位来进行改变(absolute relative fixed 都可以进行改变 )

Document

*{

margin:0;

padding:0;

}

#outer{

width:180px;

height:180px;

margin:50px auto;

border:10px solid #000;

background:orange;

padding:50px;

}

#inner{

width:80px;

height:80px;

padding:50px;

border:10px solid #000;

background:green;

}

#center{

width:50px;

height:50px;

border:10px solid #000;

background:red;

}

outer.style.position = "relative";//这样inner和center的参照物都是outercenter.offsetParent//outerinner.offsetParent//outerouter.offsetParent//bodyouter.style.position = "relative";// inner.style.position = "relative";

center.offsetParent//innerinner.offsetParent//outerouter.offsetParent//body

3、offsetTop/offsetLeft :当前元素(外边框)距离其父级参照物(内边框)的偏移距离

具体如下图所示:

1e487470430b3689419c09b001892cb4.png

下面是一个offset方法:等同于jQuery中的offset方法,实现获取页面中任意一个元素,距离body的偏移(包含左偏移和上偏移),不管当前元素的父级参照物是谁。获取的一个结果是一个对象{left:距离body的左偏移,top:距离body的上偏移}

在标准的IE8浏览器中,我们使用offsetLeft/offsetTop其实是把父级参照物的边框已经算在内了。所以我们不需要自己在单独加边框了

代码如下:

function offset(curEle){var totalLeft = null,totalTop = null,par = curEle.offsetParent;//首先加自己本身的左偏移和上偏移totalLeft+=curEle.offsetLeft;

totalTop+=curEle.offsetTop//只要没有找到body,我们就把父级参照物的边框和偏移也进行累加while(par){if(navigator.userAgent.indexOf("MSIE 8.0")===-1){//累加父级参照物的边框totalLeft+=par.clientLeft;

totalTop+=par.clientTop

} //累加父级参照物本身的偏移totalLeft+=par.offsetLeft;

totalTop+=par.offsetTop

par = par.offsetParent;

}return{

left:totalLeft,

top:totalTop

}

}

console.log(offset(center).left)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python文件下载速度 装饰器_python学习笔记之---装饰器

# -*- coding:utf-8 -*-示例1: 最简单的函数,表示调用了两次def myfunc():print ("myfunc() called.")myfunc()myfunc()E:\>py -3 a.pymyfunc() called.myfunc() called.第二步:使用装饰函数在函数执行前和执行后分别附加额外功能示例2: 替换函数(装饰…

php 日期 间隔,PHP实现计算日期间隔天数的方法

这篇文章主要介绍了PHP编程计算日期间隔天数的方法,涉及php日期与时间的转换与运算相关操作技巧,需要的朋友可以参考下刚开始在没有查PHP手册的情况下,用比较老套方法也折腾出来了,代码是这样子实现的:$date_1 date(Y-m-d);$date_2 2012-07-…

Vue02 -- 生命周期

<!DOCTYPE html> <html> <head><title>Vue --- 生命周期</title></head><body><div id"app"><input type"text" name"" v-model"a" placeholder"你的名字"><h1&g…

php 删除上传文件,php实现文件上传、下载和删除的方法

这篇文章主要为大家详细介绍了php文件上传、下载和删除示例,具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下php文件上传、下载和删除示例大体思路如下&#xff0c;具体内容如下一.文件上传1.把上传文件的区域做出来p12.把显示文件的区域做出来p23.提交表单&#…

软件工程详细设计说明书_软件工程导论知识点梳理之简答题

1. 软件危机的表现形式对软件开发成本和进度估计不准确已完成的软件不符合用户需求软件产品质量差&#xff0c;可靠性得不到保证软件产品可维护性差软件成本在计算机总成本中的比例逐渐变大软件开发生产率提高速度比不上计算机应用速度2. 产生软件危机的原因(1)软件是计算机系统…

css中absolute设置问题和如何让div居中

今天设置多个div到页面正中间的时候&#xff0c;在第一层<div class"map">中设置如下&#xff1a; .map{ position&#xff1a;absolute&#xff1b; top:50%; left:50% transform: translate(-50%, -50%); } 该div就移到页面的正中间&#xff0c;达到预定效果…

php模板意思,php中的 是什么意思

php调用类的内部静态成员&#xff0c;或者是类之间调用就要用两个冒号(::)。说明&#xff1a;“::”符号可以认为是与C语言中的“.”相似的&#xff0c;而它更像C中(Perl)的::类范围操作符。示例&#xff1a;{$0;(){//}(){();$;}};/*C语言中的*/a::b::c();//C中的函数$a::b::c;…

程序员为什么老得快_这段 Python 代码让程序员赚 300W,公司已确认!网友:神操作!...

点击上方“Python大本营”&#xff0c;选择“置顶公众号”python大本营 IT人的职业提升平台Python到底还能给人多少惊喜&#xff1f;笔者最近看到了这两天关于Python最热门的话题&#xff0c;关于《地产大佬潘石屹学Python的原因》&#xff0c;结果被这个回答惊到了&#xff1…

Mercedes-Benz won’t start| Step by Step Troubleshooting Guide

Mercedes won’t start or turn over? Are you experiencing Mercedes-Benz no start problems? Key won’t turn at all? Engine turning over but the car will not start? Maybe it finally starts, runs for a few seconds and then dies. These are common Mercedes-…

php如何设置页面布局,excel页面布局怎么调整

excel页面布局调整的方法&#xff1a;首先点击菜单的页面布局&#xff0c;选择纸张大小&#xff1b;然后点击“纸张方向”&#xff0c;单击以选择横向或者纵向&#xff1b;最后点击“页边距”即可。点击菜单——页面布局&#xff0c;工具栏将出现页面布局的许多项目&#xff0c…

无法获取未定义或 null 引用的属性“value”_SpringBoot之Spring@Value属性注入使用详解

在使用Spring框架的项目中&#xff0c;Value是使用比较频繁的注解之一&#xff0c;它的作用是将配置文件中key对应的值赋值给它标注的属性。在日常使用中我们常用的功能都比较简单&#xff0c;本篇文章系统的带大家来了解一下Value的使用方法。Value注入支持形式Value属性注入功…

0x11 栈

【例题】Push,Pop,GetMin 手写一个栈 1 #include <iostream>2 #include <cstdio>3 #include <cmath>4 #include <cstring>5 #include <algorithm>6 #include <queue>7 using namespace std;8 const int maxn1000000;9 int stack[maxn], m[…

java war包合并,使用maven warpath插件合并多module的war包

查看原文&#xff1a;http://www.yeetrack.com/?p899现在java项目一般使用maven、gradle等工具来管理jar包、打包、发布。如果一个项目有很多模块&#xff0c;那般是分成多个module&#xff0c;主目录有个parent&#xff0c;负责包含全部的module&#xff0c;然后目录中多个mo…

儿童编程python入门_儿童编程python入门

经常会有小朋友问我&#xff0c;“我想做个黑客&#xff0c;我该学什么编程语言&#xff1f;”&#xff0c;或者有的小朋友会说&#xff1a;“我要学c&#xff0c;我要做病毒”。其实对于这些小朋友而言他们基本都没有接触过编程语言&#xff0c;只是通过影视或者其他地方看到的…

ARM GNU 常用汇编伪指令介绍

abort.abort: 停止汇编 .align absexpr1, absexpr2: 以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16 或 32. 第 二个表达式值表示填充的值. if...else...endif.if .else .endif: 支持条件预编译 include.include "file": 包含指定的头文件,…

java 同类型转换失败,你们见过java类型转换,自己转自己失败的情况吗?很神奇的操作...

问题就是上面这个问题。List slaughterProducts slaughterForm.getSlaughterProductModelForm();for (SlaughterProductModelForm e : slaughterProducts) {....}居然运行到for的时候出现上面这个错误。很神奇吧&#xff0c;工作这么多年了第一次发现 JAVA自己转自己转不成功。…

python可视化代码_python可视化实现代码

python可视化#导入两个库import numpy as npimport matplotlib.pyplot as plt#第一个参数就是x轴的初始值#第二个参数是x轴的终止值#第三个返回num均匀分布的样本&#xff0c;也就是0-12的区间取多少个点&#xff0c;如果为曲线的最好数值大一点x np.linspace(0, 12, 50)y np…

用户管理与文件权限

一&#xff1a;用户管理 现代操作系统一般属于多用户的操作系统&#xff0c;也就是说&#xff0c;同一台机器可以为多个用户建立账户&#xff0c;一般这些用户都是为普通用户&#xff0c;这些普通用户能同时登录这台计算机&#xff0c;计算机对这些用户分配一定的资源。 普通用…

php中划线,html中下划线、删除线、上划线的样式与用法实例

这篇文章主要介绍了下划线、删除线、上划线等常用的实例&#xff0c;划线是非常常见的一种样式&#xff0c;为了网页中的视觉效果以及对文字的说明&#xff0c;我们经常对文体进行一些划线操作。下面文章就是对各种划线的详细介绍。一. 下划线的详细介绍在我们日常的Web的开发中…

rabbitmq3.7集群搭建实战

环境&#xff1a; 3台 centos7.4rabbitmq3.7erlang 22 1. 有几种方式安装&#xff0c;这里使用的yum安装&#xff08;官方推荐&#xff09;2. 使用rabbitmq时需要安装erlang&#xff0c;在各个节点上使用vim添加两个repo文件**/etc/yum.repos.d/rabbitmq_erlang.repo**[rabbitm…