offset系列,client系列,scroll系列回顾

一 scroll系列属性      ——滚动
1 scrollHeight/scrollWidth 标签内部实际内容的高度/宽度
ele.scrollHeight 有两种情况,
当内容超出盒子范围后,返回的是内容的高度,包括padding,从顶部内侧到内容的最外部分。
当内容不超出盒子范围时,返回的是盒子的高度,就是 ele.scrollHeight == ele.clientHeight,最小值就是ele.clientHeight
ele.scrollWidth 情况同 ele.scrollHeight一样。
当内容超出盒子范围后,返回的是内容的宽度,包括padding,从左边内侧到内容的最外部分。
当内容不超出盒子范围时,返回的是盒子的宽度,就是 ele.scrollWidth == ele.clientWidth,最小值就是ele.clientHeight
各个浏览器说法不一:
IE、Opera 认为 scrollHeight 是网页内容实际高度,可以小于 clientHeight。
NS、FF 认为 scrollHeight 是网页内容高度,不过最小值是 clientHeight。
2 scrollTop/scrollLeft
ele.scrollTop  滚动时返回的是被卷去部分的顶部到可视区域的顶部,看图
ele.scrollLeft  滚动时返回的是被卷去部分的左侧到可视区域的左侧,看图
函数封装    ----获取卷曲的宽度和高度
function myScroll() {return {top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0,left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0  }
}
eg:document.documentElement-----html标签
       document.body            ------body内部
ps! 想要实时获取页面卷曲的高度或宽度,必须在事件内进行
window.onscroll = function(){}
3 scrollTo
window.scrollTo(1500,2000);//参数1 表示横向滚动到的位置 //参数2 表示纵向滚动到的位置
二 client系列属性        ——可视

1.  clientWidth/clientHeight  
ele.clientWidth 返回元素内部空间的宽度(width+padding),是一个只读属性。不包含border和margin以及纵向滚动条。
(ele.clientWidth = width + padding - 滚动条的高度)
ele.clientHeight 返回元素内部空间的高度(height+padding),是一个只读属性。不包含border和margin以及横向滚动条。
(Ele.clientHeight = height + padding - 滚动条的宽度)
@ 和offsetWidth/offsetHeight 的区别:
offsetWidth包含border,而clientWidth不包含border。
scrollHeight的最小值和clientHeight相同
  2  clientTop/clientLeft
ele.clientTop 表示一个元素的左边框的宽度,以像素表示。是一个只读属性
如果元素的文本方向是从右向左(RTL, right-to-left),并且由于内容溢出导致左边出现了一个垂直滚动条,则该属性包括滚动条的宽度(默认17px)。
clientLeft 不包括左外边距和左内边距
(ele.clientLeft = border-left-width + 滚动条的宽度)
ele.clientLeft 一个元素顶部边框的宽度(以像素表示)。不包括顶部外边距或内边距。
(ele.clientTop = border-top-width) 
函数封装:
function myClient() {return {width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0,height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0}
}

 

三  offset系列的属性
 1.  offsetWidth/offsetHeight  
ele.offsetWidth    它返回该元素的像素宽度,(box-sizing:content-box)默认情况下:宽度包含该元素的水平内边距和边框,(除了margin以外:border+padding+width)且是一个整数         ele.offsetHeight   它返回该元素的像素高度 (box-sizing:content-box)默认情况下:高度包含该元素的垂直内边距和边框,(除了margin以外:border+padding+width)且是一个整数       
ps:元素的offsetHeight,offsetWidth是一种元素CSS高度的衡量标准,包括元素的边框、内边距和元素的水平滚动条或纵向滚动条(如果存在且渲染的话),不包含:before或:after等伪类元素的高度
offsetWidth和offsetHeight是用来得到元素的大小
@offsetHeight 和 style.height的区别
demo.style.height只能获取行内样式,如果样式写到了其他地方,甚至根本就没写,便无法获取
style.height是字符串(而且带单位),offsetHeight是数值
demo.style.height可以设置行内样式,offsetHeight是只读属性
2.  offsetLeft/offsetTop    
ele.offsetLeft     到距离自身最近的(带有定位的)父元素的 左侧 的距离,如果所有父级都没有定位则以body 为准.
offsetLeft 是自身border左侧到父级padding左侧的距离  -----数值
ele.offsetTop      到距离自身最近的(带有定位的)父元素的 顶侧 的距离,如果所有父级都没有定位则以body 为准.      ----数值
offsetLeft和offsetTop是用来得到元素的位置
@offsetLeft和style.left的区别
style.left只能获取行内样式
offsetLeft只读,style.left可读可写
offsetLeft是数值,style.left是字符串并且有单位px
如果没有加定位,style.left获取的数值可能是无效的
最大区别在于offsetLeft以border左上角为基准,style.left以margin左上角为基准
计算方式:从定位的父盒子的边框内部,计算到子盒子的边框外部(边框到边框)
特点:
1、offsetLeft属性没有单位,是纯数值
2、offsetLeft属性是只读的,不可修改
3、offsetLeft属性若有小数,会四舍五入进位
 3.offsetParent   获取到当前元素外面的定位父盒子
HTMLElement.offsetParent 是一个只读属性,返回一个指向最近的(closest,指包含层级上的最近)包含该元素的定位元素。如果没有定位的元素,则 offsetParent 为最近的 table, table cell 或根元素(标准模式下为 html;quirks 模式下为 body)。当元素的 style.display 设置为 "none" 时,offsetParent 返回 null。
(offsetParent 很有用,因为 offsetTop 和 offsetLeft 都是相对于其内边距边界的。)
@ offsetParent和parentNode的区别
父元素parentNode,一定是亲爹,外面紧挨着的元素
定位父盒子offsetParent,干爹(有可能是亲爹,也可能不是亲爹)
 方法:
// 获取所选元素到浏览器最左边的距离
var getOffsetLeft = function(obj){var tmp = obj.offsetLeft;var val = obj.offsetParent;while(val != null){tmp += val.offsetLeft;val = val.offsetParent;}return tmp;
}

  

//获取所选元素到浏览器最上边的距离
var getOffsetTop = function(obj){var tmp = obj.offsetTop;var val = obj.offsetParent;while(val != null){tmp += val.offsetTop;val = val.offsetParent;}return tmp;
}

转载于:https://www.cnblogs.com/sqh17/p/10217159.html

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

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

相关文章

项目开发中的自我总结

最近忙的要死,因为新开发了两个项目.现在已经测试完毕了,准备部署到线上了. 然后不能白忙活吧,忙活完也得写点总结和经验吧,以后也有个记录. 1.一个bootstrapjquerylayuilaravel 5.4开发的一个后台系统 比较朴素 2.一个前后端分离的vuelaravel 5.4 开发的商家系统 我只负责后端…

webpack.config.js 参数详解

webpack.config.js文件通常放在项目的根目录中,它本身也是一个标准的Commonjs规范的模块。 var webpack require(webpack); module.exports {entry: [webpack/hot/only-dev-server,./js/app.js],output: {path: ./build,filename: bundle.js},module: {loaders: …

数组黑科技(偏性能方面)未完待更新...

数组去重最优解:Array.prototype.unique function () {var tmp new Map();return this.filter(item > {return !tmp.has(item) && tmp.set(item,1);})}搭配使用 Array.from(foo); // ["f", "o", "o"]let s new Set([f…

控制台添加log4net

1.添加nuget包 log4net 2.app.config配置 <?xml version"1.0" encoding"utf-8"?> <configuration> <configSections><section name"log4net" type"log4net.Config.Log4NetConfigurationSectionHandler, log4net&quo…

记一次vue 普通异步请求微信二进制二维码 乱码 问题解决然后渲染

后端压力大&#xff0c;前端分忧。 /*用微信小程序token拿二维码*/ async fetchMINIQRcode({commit,state},params){var instance axios.create({responseType: blob, //返回数据的格式&#xff0c;可选值为arraybuffer,blob,document,json,text,stream&#xff0c;默认值为js…

vue-cli项目中.postcssrc.js

module.exports {"plugins": {"postcss-import": {}, //用于import导入css文件"postcss-url": {}, //路径引入css文件或node_modules文件"postcss-aspect-ratio-mini": {}, //用来处理元素容器宽高比"postcss-…

本地存储cookie和localStorage区别特点

一、cookie cookie算是比较早的技术&#xff0c;最初是为了记录http的状态&#xff0c;提高访问速度。cookie是服务器"种植"在客户端的key-value形式文本文件。但同时客户端也能操作cookie。特点&#xff1a; 大小&#xff1a;cookie的大小限制在4k。每个域名下cooki…

VUE 中 使用 iview Form组件 enter键防止页面刷新

<Form :label-width"100" inline label-positionleft keydown.native.enter.prevent "()>{}">或者使用官方的 submit.native.prevent转载于:https://www.cnblogs.com/smzd/p/9197915.html

mybatis中#和$区别

在Mybtis中的Mapper映射文件中&#xff0c;sql语句传参有两种方式#{}和${} 一般来说&#xff0c;我们通常使用的是#{}&#xff0c;这里采用的是预编译机制&#xff0c;防止SQL注入&#xff0c;将#{}中的参数转义成字符串&#xff0c;例如&#xff1a; 执行SQL&#xff1a;Selec…

mysql 字段存储多个值 ,判断一个值是否在其中

表C_file,其中有个字段是spile&#xff0c;他存的是字符形式&#xff0c;例如&#xff1a; id spile 1 2,10,11 2 2,3,20,22 3 1,6,8 4 5,6,1,9 select * from C_file where spile LIKE %1% 如果这样查询的话&#xff0c;会查询出ID为1、3、4&#xff0c;但正确的应该是3、…

touchWX 自定义组件以及传值

创建如图文件 index.wxc: <template><view class"wx-test" bindtap"handleTap">{{ msg }}{{dataIndex}}</view> </template> <script>export default {properties: {dataIndex: {type: String,value: default value,}},data…

vue 初始框架

VueJs讲解初始框架 一、启动项目 第一步&#xff1a;cmd进入项目文件里&#xff0c;运行npm run dev 启动项目 这里说明启动端口号是8080 第二步&#xff1a;往页面输入&#xff1a;localhost:8080 二、解析渲染步骤 先看整体框架样式和index.html&#xff1a; 从上面我…

Codeforces 914D - Bash and a Tough Math Puzzle 线段树,区间GCD

题意: 两个操作, 单点修改 询问一段区间是否能在至多一次修改后,使得区间$GCD$等于$X$ 题解: 正确思路; 线段树维护区间$GCD$,查询$GCD$的时候记录一共访问了多少个$GCD$不被X整除的区间即可,大于一个就NO 要注意的是,如果真的数完一整个区间,肯定会超时,因此用一个外部变量存储…

Country Road Aizu - 2104

题目链接&#xff1a; https://vjudge.net/problem/Aizu-2104 题解&#xff1a; 咋说啊&#xff0c;一言难尽&#xff0c;花了半小时写出来的&#xff0c;卡了十分钟才恍然大明白是排序。 具体就是让每个村子都通上电&#xff0c;变压器在的村子&#xff0c;与变压器连线点线长…

touchWX使用 echarts

<button bindtap"init" wx:if"{{!isLoaded}}">加载图表</button><button bindtap"dispose" wx:if"{{isLoaded && !isDisposed}}">释放图表</button><ec-canvas het"200" classmy_echart…

vue init webpack vue-demo01复杂安装的详解

终端cmd,在项目中输入下面命令&#xff1a; E:\Vue>vue init webpack vuedemo02 接着就会让你输入或者选择一些是不是要的东西 ? Project name vuedemo02(项目名称) ? Project description A Vue.js project(描述&#xff0c;我默认了) ? Author simalinjia(作者名称) ?…

JAVA EE 基本了解

1、 为什么需要JavaEE 我们编写的JSP代码中&#xff0c;由于大量的显示代码和业务逻辑混淆在一起&#xff0c;彼此嵌套&#xff0c;不利于程序的维护和扩展。当业务需求发生变化的时候&#xff0c;对于程序员和美工都是一个很重的负担。 为了程序的易维护性和可扩展性&#xf…

vue-cli中config目录下的index.js文件详解

// see http://vuejs-templates.github.io/webpack for documentation. // path是node.js的路径模块&#xff0c;用来处理路径统一的问题 var path require(path)module.exports { // 下面是build也就是生产编译环境下的一些配置build: { // 导入prod.env.js配置文件&#xf…

Business Intelligence——SSIS项目从创建到部署的简单总结(二)

在上一篇博客中&#xff0c;我们成功的把包导进了SQL Server中&#xff0c;那么接下来我们就为其创建作业&#xff0c;使数据库能够自动执行我们的任务。首先&#xff0c;我们需要启动“SQL Server 代理”。如图1&#xff1a;图1在“SQL Server 代理”的子节点中&#xff0c;选…

我的vscode配置 利用Settings Sync一键安装

{"prettier.eslintIntegration": true, // 点击保存时&#xff0c;根据 eslint 规则自定修复&#xff0c;同时集成 prettier 到 eslint 中"prettier.semi": false, //去掉代码结尾的分号"prettier.singleQuote": true, //使用带引号替代双引号&q…