约定: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 ...
随机推荐
- DEDECMS万能标签{dede:sql}使用教程详解
http://www.dede58.com/a/dedebq/2015/0226/1737.html 1.首页在后台单页文档管理里添加一个单页文档,内容编辑框输入你要的内容生成. 2.在需要调用单页文 ...
- 利用H5构建地图和获取定位地点
地图与地理定位 定位在大部分项目中都需要实现,如何实现主要有如下的几种方法 H5定位 在HTML5中navigator有很强大的功能,其中就有定位的方法 navigator.geolocation.g ...
- 【开发技术】对文件内容进行加密-java
http://hi.baidu.com/java0804ms/item/111ea834fbd4d2f596f88d5a 实现效果:对文件内容进行加密,使之直接打开成为乱码,不以明文显示 实现步骤:1 ...
- hadoop问题: bin/hadoop fs -ls ls: `.': No such file or directory
问题描述:bin/hadoop fs -ls ls: `.': No such file or directory 问题分析:版本问题,用法不同 https://stackoverflow.com/q ...
- Java数据持久层框架 MyBatis之API学习七(动态 SQL详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- ASPNET 5 和 dnx commands
DNX项目是用来创建和运行.net应用程序适用于windows,mac 和linux 的,dnx提供了一个宿主进程(a host process),CLR托管逻辑( CLR hosting logic ...
- flask + Python3 实现的的API自动化测试平台---- IAPTest接口测试平台(总结感悟篇)
前言: 在前进中去发现自己的不足,在学习中去丰富自己的能力,在放弃时想想自己最初的目的,在困难面前想想怎么踏过去.在不断成长中去磨炼自己. 正文: 时间轴 flask + Python3 实现的的AP ...
- Effective Java 第三版——28. 列表优于数组
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Java进阶篇(六)——Swing程序设计(上)
Swing是GUI(图形用户界面)开发工具包,内容有很多,这里会分块编写,但在进阶篇中只编写Swing中的基本要素,包括容器.组件和布局等,更深入的内容会在高级篇中出现.想深入学习的朋友们可查阅有关资 ...
- jspf与jsp的区别
如果想把一个jspf的文件引入(incurred)到一个jsp页面中,只能使用"@include"指令引入 如果使用<jsp:include>引入,jspf文件中的内容 ...