约定:1.<meta name="viewport" content="width=device-width">这种标记简称"wdw"="width=device-width"
约定:2.viewport简称vp
约定:3.常用的属性会有“★”标志
都是只读属性!
其中Chrome或FF没通过的属性标记(未实现)
window对象:
1.★innerHeight:文档(网页)显示区的高度,以像素计。(这里的宽度和高度不包括菜单栏、工具栏以及滚动条等的高度)
2.★innerWidth
对于手机浏览器来说,innerWidth计算的是vp宽度,当没有wdw时候,iphone7的默认vp是980px,所以其innerWidth也是980px;而当加上wdw时,innerWidth值会变成375px,这个值就是wdw的值。(我们认为PC浏览器的vp是个不固定的值,它随着网页宽高的变化而1:1地变化,例如网页900*750px,那么浏览器自动把vp变成900*750px,然后在vp中渲染这个网页,再把vp放入浏览器窗口中给用户看。遇到用户浏览器窗口太小不能完全显示时,则加上滚动条;遇到用户浏览器窗口过大时,放大vp宽至浏览器窗口宽度大小,然后把网页渲染进vp,对于那些百分数的元素放大,对于那些绝对单位值的元素不做放大,最后把vp放入浏览器窗口中,这是布局意义上的放大)
另外,在手机上,如果一网页宽大于wdw设置的值,那么vp的width会等于该网页的宽,渲染完成之后,放入浏览器窗口,会加上水平滚动条。
所以总结一下wdw的所有情况:(约定:网页实际宽简称wtw = webpage true width;不存在wdw时vp宽 = 默认值,如980px;手机浏览器窗口 = mbw = mobile browser window)
一定要时刻记得,wdw用来设置vp的宽,但最后不一定相等!
wtw = wdw:网页刚好完全渲染到vp中,然后vp以1:1放到mbw中
wtw > wdw:vp宽将不等于wdw,它会按照wtw宽适当增加,然后以新宽度渲染网页,最后放入mbw中,但是因为mbw的宽比vp小,所以会加上水平滚动条
wtw < wdw:网页完全渲染到vp中,对于那些设置百分数之类属性的元素会占有更多的空间来补满多出的vp宽,而绝对单位的值的那些元素不做任何放大
3.outerHeight:整个浏览器的高度
4.★pageXOffset pageYOffset(对于整个窗口来说,要对于具体某个元素请看DOMElement对象中的有关属性)
screen对象:
1.availHeight:浏览器可用的屏幕高度,不包括底部任务栏
2.availWidth
3.(未实现)deviceXDPI:屏幕的每英寸水平点数
4.(未实现)deviceYDPI
5.height:屏幕的总高度,相对于availHeight来说这个属性包含了任务栏
6.width:其值和availWidth一样
7.colorDepth:色彩深度,即俗称的颜色多少位(24位就是真彩色)
8.pexelDepth:像素深度
9.(未实现)updateInterval屏幕的刷新率
DOMElement对象:
1.★clientHeight:元素的显示高度(包括内边距,不含边框和外边距)
2.★clientWidth:
对于PC浏览器,它对于网页显示都是1:1的,所以clientWidth获取的总是元素实际的宽度,但是手机浏览器实际上是把网页渲染在vp上再放入浏览器的可见区域中,所以你获取的是元素的实际宽度,但事实上显示出来的宽度要小,因为他已经被缩放过了。
有如下案例:(页面只存在一个div元素,宽高都为40px)
对于iphone7默认vp的宽为980px,那么
不加wdw:document.body.clientWidth=980-8*2=974px(这个获取的是vp宽!),这时获取div的clientWidth是40px,这个值是不会变的,因为就是元素本身的宽度,但是手机上显示出来的显示宽度为22px
加上wdw:document.body.clientWidth=375-8*2=359px,说明这个手机的网页窗口显示宽度为375px,这时候的div显示的宽度是40px(你要知道为什么要设置vp == 手机浏览器窗口大小,就是为了不缩放网页)
3.offsetHeight:clientHeight + 边框
4.offsetWidth
5.offsetTop:元素的上外边框至offsetParent的上内边框之间的像素
6.offsetLeft
7.offsetParent:返回该元素最近的定位父元素
前言:对于一个绝对定位元素,如果一直到body(包括body)都没有在它所有父元素中发现定位(绝对和相对)属性,即该元素不存在定位父元素,那么他将会按照浏览器窗口左上角定位。一般body不设置定位属性(绝对、相对和固定),所以对于offsetParent来说如果返回body,那该元素没有定位父元素,实际上对于没有定位父元素的元素其值应该返回null而不是body。
1.fixed定位元素,返回null(但在ff中返回body,这不符合标准),因为它相对于浏览器窗口定位,对于fixed元素获取的offsetTop和offsetLeft其实就是它的top和left值
2.body的offsetParent永远是null(chrome和ff都是null,测试通过),对body获取其offsetTop和offsetLeft获取的值是相对于浏览器窗口左上角定位
3.static元素永远是最近的拥有relative或absolute的父元素,如果父元素都不存在定位则返回body(实际上应该返回null,表示没有定位父元素,要按照浏览器窗口定位,但是chrome和ff都返回body),这时(这里指如果时的情况)该元素的offsetTop和offsetLeft值是相对于浏览器窗口左上角定位而不是根据返回的body元素进行定位,否则如果存在父元素有定位属性,那么offsetTop和offsetLeft返回的是该父元素左上角定位的值(以自己的边框外部到定位父元素的包括内部)
3.absolute定位元素遵循css定位布局,即最近的拥有relative或absolute的父元素,如果不存在,那么返回body,offsetTop和offsetLeft以浏览器窗口左上角定位
4.relative在css定位布局中不存在定位父元素,但是这里它的offsetParent还是最近的父级定位元素(relative和absolute),如果不存在,返回body,并且offsetTop和offsetLeft以浏览器窗口左上角定位
5.对于absolute & relative,如果父元素都没有定位(绝对和相对)那么就是body,并且offsetTop和offsetLeft以浏览器窗口左上角定位
总结:对于DOMObj.offsetParent返回的值,浏览器不会管DOMObj是static还是absolute还是relative,如果它有定位父元素,那么按照定位父元素左上角定位,否则没有定位父元素的话,那么返回body,并且按照浏览器左上角定位;对于fixed,offsetTop和offsetLeft就是其top和left值。
8.scrollHeight:元素的实际高度(包括内边距,不含边框和外边距)(与clientHeight区别在于:例如一个textarea,宽度为100px,边框宽度1px,当文字太多时显示水平滚动条,这时clientWidth=102px,而scrollWidth=102px + 滚动条滚出去的宽度)
9.scrollWidth
10.scrollLeft:元素(滚动条)滚出的像素
11.scrollTop:scrollHeight=scrollTop+clientHeight
总结:
获取一个元素在窗口左上角定位的信息:
(JS)getBoundingClientRect()
(JQ)offset()
获取一个元素的宽高信息:
(JS)clientWidth clientHeight
说明:包含内边距,不含边框和外边距
(JQ)width() height() innerWidth() innerHeight() outerWidth(false) outerHeight(false)
说明:前两个不含内边距、边框、外边距;中间两个包含内边距,不含边框,外边距;后两个包含内边距,边框,如果为真也会包含外边距
获取鼠标点击位置:
(JS)event.pageX pageY clientX clientY screenX screenY x y
获取触摸点位置:
(JS)event.touches[0].pageX pageY clientX clientY screenX screenY
- 关于Echarts的原生js获取DOM元素与动态加载DOM元素的冲突问题
1.前言: 最近在做的看板项目,因为需要循环加载后台数据,并且用Echarts做数据呈现,所以jQuery和angular等库统统靠边站,Echarts用的是原生js获取DOM元素,至于诸多不兼容等深 ...
- Selenium 定位网页元素
第一 定位元素辅助工具 IE中在元素上右击 -> “检查元素”,或按F12键打开开发者工具: Chrome中在元素上右击 -> “审查元素”,或按F12键打开开发者工具: Firefox ...
- 定位网页元素、透明度、z-index、包裹性和破坏性
一.定位 position属性————规定元素的定位类型,即元素脱离文档流的布局,在页面的任意位置显示 也可以参见以前的总结 <—— 戳 static:默认值,没有定位 relative:相对定 ...
- 利用原生JS实现网页1920banner图滚动效果
内容描述:随着PC设备硬件性能的进步和分辨率的不断提高,现在主流网站逐渐开始采用1920banner图,为适应这一趋势,博主设计了1920banner图的滚动效果,代码利用了原生JS实现了1920ba ...
- 原生js获取Html元素的实际宽度高度
第一种情况就是宽高都写在样式表里,就比如#div1{width:120px;}.这中情况通过#div1.style.width拿不到宽度,而通过#div1.offsetWidth才可以获取到宽度. 第 ...
- 原生JS在网页上复制的所有文字后面自动加上一段版权声明
不少技术博客有这样的处理,当我们复制代码的时候,会自动加上一段本信息版权为XXXX,这是怎么实现的呢? 其实实现的方式很简单,可以在我的网站页面上绑定一个copy事件,当你复制文章内容的时候,自动在剪 ...
- 原生js实现网页触屏滑动
前言: 我有一个html格式的2048游戏,可以用键盘上下左右操作,但是放到手机上就抓瞎了.于是想修改一下代码,将键盘事件改成手机触屏事件. html5 的touch事件 html5支持touch事件 ...
- 通过原生JS实现为元素添加事件
自己写了一个为元素添加事件的方法,并封装到对象中. 说明: id : 目标元素的ID type: 事件的类型,注意的是不能加on fn:事件处理程序 isBubble :规定事件流 代码: var b ...
- 原生js判断某个元素是否有指定的class名的几种方法
[注意]以下方法只对class只有一个值的情况下操作 ************************************************************* 结构部分: <d ...
随机推荐
- 基于逆波兰式的JAVA计算器
请看下方↓↓
- IOS成长之路-用NSXMLParser实现XML解析
再次对xml进行解析,又有了些理解,如果有不对的地方,请给小弟指出,谢谢! <?xml version="1.0" encoding="UTF-8"?&g ...
- MyBatis动态传入表名,字段名参数的解决办法
原文:http://blog.csdn.net/xichenguan/article/details/50393748 要实现动态传入表名.列名,需要做如下修改 添加属性statementType=& ...
- linux nvme的那些workqueue
目前nvme三个常见的使用的workqueue ,主要有nvme_workq,nvme_rdma_wq ,nvme_fc_wq,下面一一描述一下初始化及使用的场景.分别对应于NVME over PCI ...
- python2.7.5 安装pip 良心推荐,超级简单.
1 先安装setuptools 下载地址:https://pypi.python.org/pypi/setuptools#downloads 将下载后的tar文件解压,用CMD模式进入到解压后的文件所 ...
- 无废话XML--XML细节
今天开始研究xml,其实在实际的开发中,我们参与到真正的XML开发并不是很多,最多写一个配置,但是我还是觉得很有必要把XML的知识整理一遍.作为基本的2种的数据交互载体(还有一个是json),基本的X ...
- linkin大话面向对象--java关键字
java中的关键字有以下几个,他们不能作任何其它的用途. 发现没,java中的关键字全是小写,java是严格区分大小写的. abstract default null synchronized ...
- k8s 如何 Failover?- 每天5分钟玩转 Docker 容器技术(127)
上一节我们有 3 个 nginx 副本分别运行在 k8s-node1 和 k8s-node2 上.现在模拟 k8s-node2 故障,关闭该节点. 等待一段时间,Kubernetes 会检查到 k8s ...
- Python Django连接(听明白了是连接不是创建!)Mysql已存在的数据库
再声明一次!是连接不是创建!网上的一些人难道连接和创建这俩词都弄不懂就在那里瞎写一些文章! (Python Django连接存在的数据库) Python连接存在的数据库-------MySql 1.首 ...
- 邪恶的PLS
今天碰到一个存储过程编译错误,提示PLS-00103错误,关于这个错误网上能搜到一大把,原因很多,我碰到的错误提示如下: Compilation errors for PROCEDURE ETL.PR ...