web前端开发中常用的尺寸和位置
我们在日常web前端开发过程中,会经常用到各种尺寸和位置。通常是js做动画的时候。轮播图,滚屏动画,粒子,碰撞检测,拖拽,滚动加载等等。这里我将常用的尺寸和位置的获取进行总结,不包括canvas,SVG。
在web页面开发中,尺寸和位置分为屏幕的尺寸和位置,元素的尺寸和位置,还有一个是文档的尺寸和位置,不过文档的尺寸和位置是通过document.body获取的,也算是一个元素。还有鼠标的位置。所以尺寸和位置主要分为三类:
- 屏幕尺寸和位置
- 元素尺寸和位置
- 特殊的元素,文档的尺寸和位置
- 鼠标的位置(事件触发的时候才能够获取到)
以下是相关的尺寸和位置的获取方法。单位都是像素值。
1.屏幕的尺寸和位置,通过screen对象获取;
screen === window.screen;//true;
screen.width;//屏幕的像素宽度
screen.height;//屏幕的像素高度
screen.availHeight;//屏幕的可用高度,Windows系统下,通常是去除任务栏的高度值
screen.availWidth;//屏幕的可用宽度,Windows系统下,通常是去除任务栏宽度值
screen.availLeft;//屏幕的最左边相对于主屏幕最左边的偏移值
screen.availTop;//屏幕的最顶边相对于主屏幕最顶边的偏移值
这里需要说一下可用高度,宽度,以及偏移值。
可用高度和宽度的值,在chrome浏览器下(版本:54.0.2840.99 )并不是实时获取的,不知道以后的版本会不会出现变动。也就是说,当打开了chrome浏览器后,屏幕可用宽度或者可用高度就已经确定了。此时调整任务栏的位置,高度,宽度等,都影响不到这两个值(screen.availWidth,screen.availHeight),除非改变屏幕的分辨率,或者重启浏览器。而Firefox中,屏幕相关的所有信息都是实时获取的。
关于偏移值(availLeft和availTop),这两个值,在单屏幕的时候,都是0,只有在有扩展屏的情况下,扩展屏中的浏览器中的screen对象才有非0的值,这个值就是扩展屏相对于主屏幕的偏移值。
2.元素的尺寸和位置
元素的位置
页面中所有的元素都有基本的属性,其中有些基本属性与元素的位置和尺寸相关。元素位置相关的属性,都是相对位置,即元素相对于其偏移容器(offsetParent)的偏移量
var ele = document.getElementById("element");//获取某一个元素
ele.offsetParent;//获取偏移容器
ele.offsetLeft;//元素相对与偏移容器的左边的偏移量
ele.offsetTop;//元素相对于偏移容器的顶边的偏移量
ele.clientLeft;//通常情况下是元素盒子的左边框的宽度
ele.clientTop;//通常情况下是元素盒子的顶边框的宽度
ele.scrollLeft;//横向滚动条相对于滚动区域宽度(scrollWidth)的位置【滚动条的位置】
ele.scrollTop;//纵向滚动条相对于滚动区域高度(scrollHeight)的位置【滚动条的位置】
ele.scrollLeft = 30;//设置内容区域滚动到30的位置
ele.scrollTop = 50;//设置内容区域滚动到50的位置
对于offsetLeft和offsetTop这两个值,是相对于偏移容器的。有两种情况:
1.元素是通过position定位的;
2.元素是通过float或者margin定位的;
第一种情况下,offsetLeft和offsetTop的值,是left值和top值。
第二种情况下,offsetLeft和offsetTop的值,是margin-left和margin-top的值。
clientLeft:表示一个元素的左边框的宽度,以像素表示。如果元素的文本内容方向是从右向左,并且元素内容有溢出,比如,<div dir="rtl">hello</div>,这样会在左边产生一个滚动条。clientLeft就会包含滚动条的宽度,即是滚动条和边框的宽度之和。
clientTop:表示一个元素的顶部边框的宽度。
scrollLeft:表示滚动条到元素左边的距离,可以用来设置内容区域滚动到某一位置,也可以获取当前滚动条的位置
scrollTop:表示滚动条到顶边的距离,可以用来设置内容区域滚动到某一位置,也可以获取当前滚动条的位置。
元素的尺寸
ele.offsetWidth;//元素盒子的尺寸,包括content,padding,border,不包括margin和滚动条的尺寸
ele.offsetHeight; ele.clientWidth;//元素内容区域的尺寸,包括padding,content的尺寸,不包括border,margin和滚动条的尺寸
ele.clientHeight; ele.scrollWidth;//元素自身区域的元素和内容区域的真实的尺寸的总和(自身padding+内容区域padding,margin,border,scrollbar)
ele.scrollHeight;
3.页面的尺寸和位置----特殊的元素:document.body
通常情况下,我们只需要获取到页面的尺寸即可,页面的位置在实际开发中基本上用不上。我们获取页面的尺寸也是和元素获取尺寸时候一样,通过上面几个属性值获取。
我们是通过页面中的body元素获取到页面的尺寸的。
//获取到页面的body元素
var body = document.body;//方法1
var body = document.getElementsByTagName("body")[0];//方法2
//还有其它方法获取到body元素,document.getElementById等,
获取页面的尺寸
//页面的尺寸
document.body.clientWidth;
document.body.clientHeight; document.body.offsetWidth;
document.body.offsetHeight; document.body.scrollWidth;
document.body.scrollHeight; //页面的位置
document.body.clientLeft;
document.body.clientTop; document.body.offsetLeft;
document.bodyl.offsetTop; document.body.scrollLeft;
document.body.scrollTop;
4.在鼠标事件中获取到鼠标的位置
鼠标的位置只有在鼠标事件中才可以获取到。【onclick,onmousemove,onmousedown,onmouseenter,onmouseleave,onmouseover,onmouseout】,事件发生时候,event对象有一些属性值是和鼠标位置相关的。
clientX,clientY;是鼠标相对于浏览器客户区的位置,不包括浏览器的地址栏,书签栏,底部状态栏等浏览器特性,只是文档显示区域。永远为正值
pageX,pageY;是鼠标相对于文档的位置,即相对于document的位置。pageX,pageY和clientX,clientY和body的宽度无关。如果页面没有滚动的话,二者的值相等。永远为正值。
screenX,screenY;是鼠标相对于主屏幕的位置。存在负值,这就要看扩展屏幕的设置了。
document.body.addEventListener("click",function(event){
console.log("相对于浏览器客户区的位置X:",event.clientX);
console.log("相对于浏览器客户区的位置Y:",event.clientY);
console.log("相对于页面的位置X:",event.clientX);
console.log("相对于页面的位置Y:",event.clientY);
console.log("相对于主屏幕的位置X:",event.clientX);
console.log("相对于主屏幕的位置Y:",event.clientY);
});
5.关于css中设置的width和height;
css中关于元素的尺寸的设置,width和height,只是设置元素的内容区域的尺寸。如果元素还有margin,padding,border的话,元素真实占用的页面尺寸会比width和height所设置的要大。
更多关于元素尺寸的信息,我会在关于盒子模型的文章中做详细的介绍。
6.jQuery中的尺寸和位置
jQuery中的尺寸:width()和height()
获取jQuery对象的宽度和高度,可以通过width()和height(),这二者获取到的是元素通过css设置的width和height,不包括元素的内边距,边框和外边距。
width()和height()不仅可以获取元素的尺寸,也可以设置元素的尺寸
$("#ele").width();//获取元素的宽度
$("#ele").height();//获取元素的高度
$("#ele").width(300);//设置元素的宽度
$("#ele").height(200);//设置元素的高度
innerWidth()和innerHeight()
这两个方法可以获取到元素的尺寸,包括内边距
outerWidth()和outerHeight()
这两个方法可以获取到元素的尺寸,包括内边距和边框
$("#ele").innerWidth();
$("#ele").innerHeight();
$("#ele").outerWidth();
$("#ele").outerHeight();
jquery中元素的位置:
offset()
position()
jQuery对象有了两个关于元素的位置的方法,offset()和position(),这两个方法都返回两个属性值,top和left。这两个方法都是只对可见元素有效。
offset()方法是返回元素相对于文档的偏移位置。
position()方法是返回元素相对于父元素的偏移位置。
$("#ele").offset().left;
$("#ele").offset().top;
$("#ele").position().left;
$("#ele").position().top;
jQuery中关于滚动条的位置
scrollTop()和scrollLeft(),这两个方法既可以获取当前滚动条的位置也可以设置滚动条的位置。
//有溢出区域的元素滚动条的位置
$("#ele").scrollTop();//返回当前滚动条的位置
$("#ele").scrollLeft();//返回当前滚动条的位置 $("#ele").scrollTop(200);//设置滚动条的位置
$("#ele").scrollLeft(200);//设置滚动条的位置 //页面滚动条的位置
$("body").scrollTop();//返回当前页面滚动条的位置
$("body").scrollLeft();//返回当前页面滚动条的位置 $("body").scrollTop(300);//将当前页面滚动到300的位置
$("body").scrollLeft(300);//将横向滚动条滚动到300的位置
以上的总结只是针对我们在日常web开发中与dom相关的一些尺寸和位置的介绍。但是在前端开发中,我们也有可能针对canvas和SVG做一些开发,canvas和SVG中的尺寸和位置与dom中的尺寸位置有所不同。
大家周末愉快。
web前端开发中常用的尺寸和位置的更多相关文章
- WEB前端开发中的图片压缩
web前端开发中,图片的重要性不言而喻,而由于一些图片的大小加上现在国内的网速不给力等种种原因,我们非常有必要对网站使用的图片进行压缩,压缩图片必然会带来图片质量的损失,我们要尽可能的在质量降低很小的 ...
- Web前端开发中的MCRV模式(转)
作者: izujian 来源: baiduux 摘要:针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为 基础,结 ...
- Web前端开发中的小错误
Web前端开发中的小错误 错误1:表单的label标签跟表单字段没有关联 利用“for”属性允许用户单击label也可以选中表单中的内容.这可以扩大复选框和单选框的点击区域,非常实用. 错误2:log ...
- web前端开发中的浏览器兼容性总结
1.居中问题 div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto; 2.高度问题 两上下排列或嵌套的div,上面的div设置高度(height),如果di ...
- [转] Web前端开发工程师常用技术网站整理
1.常用工具相关 有道云笔记 http://note.youdao.com/signIn/index.html 36镇-最好用的共享收藏夹 http://www.36zhen.com/ 浏览器同步测试 ...
- Web前端开发工程师常用技术网站整理
1.常用工具相关 有道云笔记 http://note.youdao.com/signIn/index.html 36镇-最好用的共享收藏夹 http://www.36zhen.com/ 浏览器同步测试 ...
- 二十三、【开源】EFW框架Web前端开发之常用组件(FusionCharts图表、ReportAll报表等)
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
- px em rem在WEB前端开发中的区别
我们都知道基于像素的字体大小所用的单位是px,但是随着响应式设计的不断火热,基于相对字体大小的单位em变开始流行起来.当然,rem也在Web前端开发人员讨论如何更好设置字体大小的讨论话题之列.是不是需 ...
- WEB前端开发中的SEO注意点
近几年来,SEO在国内得到了蓬勃的发展,其中很多的SEO技术越来越体现在web前端的一些细节上.要做好SEO,WEB前端这一块也要做必不可少的优化. 这就要求我们WEB前端工程师在开发页面的时候,要写 ...
随机推荐
- NginxWeb服务器安装
1. 安装编译工具和库文件 [root@bigdata-51cdh opt]# yum -y install make zlib zlib-devel gcc-c++ libtool opens ...
- 执行插入语句,object val = cmd.ExecuteScalar() val = null
在写接口的过程中遇到错误:空对象不能转换为值类型 因为我们使用的是petapoco,经过调试后发现是 object val = cmd.ExecuteScalar() 这一句造成的报错, val = ...
- LeetCode Online Judge 1. Two Sum
刷个题,击败0.17%... Given an array of integers, return indices of the two numbers such that they add up t ...
- C#——this关键字(1)
//我的C#是跟着猛哥(刘铁猛)(算是我的正式老师)<C#语言入门详解>学习的,微信上猛哥也给我讲解了一些不懂得地方,对于我来说简直是一笔巨额财富,难得良师! 在学习C#的时候,老师讲的示 ...
- bzoj1854--并查集
这题有一种神奇的并查集做法. 将每种属性作为一个点,每种装备作为一条边,则可以得到如下结论: 1.如果一个有n个点的连通块有n-1条边,则我们可以满足这个连通块的n-1个点. 2.如果一个有n个点的连 ...
- MVC发布到虚拟主机上出现的错误
问题1:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 现象:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 原因:站点中部署的Web使用的 ...
- Angular通过XHR加载模板而限制使用file://(解决方案)
编写angular项目时,遇到此困难: angular.js:12011 XMLHttpRequest cannot load file:///E:/angular/imooc/chapter2/bo ...
- IO模型
前言 说到IO模型,都会牵扯到同步.异步.阻塞.非阻塞这几个词.从词的表面上看,很多人都觉得很容易理解.但是细细一想,却总会发现有点摸不着头脑.自己也曾被这几个词弄的迷迷糊糊的,每次看相关资料弄明白了 ...
- freemarker页面中文乱码
一.前言 简单的记录freemarker遇到的错误问题:ftl页面中文乱码 由于freemarker整合在ssm框架中,所以笔者直接贴配置代码 <beans xmlns="http:/ ...
- HTML5应用程序缓存Application Cache
什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...