首页 > 编程语言 >JavaScript DOM对象的尺寸和位置详解

JavaScript DOM对象的尺寸和位置详解

时间:2024-01-27 20:32:04浏览次数:30  
标签:style obj DOM 对象 JavaScript 像素 详解 var

在DOM对象操作中,其尺寸和位置也是DOM的核心内容,因为js的“交互式应用”几乎少不了对DOM对象的尺寸和位置进行操作,特别是js动画效果。

一、关于DOM对象的尺寸和位置介绍

DOM对象的尺寸和位置的属性

DOM对象的属性 描述
obj.scrollWidth 和 obj.scrollHeight DOM对象的内部实际部分和内边距
obj.scrollTop 和 obj.scrollLeft 获取滚动条被隐藏的区域大小,也可设置定位到该区域
obj.offsetWidth 和 obj.offsetHeight DOM对象的实际自身宽度和高度
obj.offsetTop 和 obj.offsetLeft 获取当前元素相对于父元素的位置
obj.clientWidth 和 obj.clientHeight DOM对象内容可视部分和内边距的宽高
obj.clientTop 和 obj.clientLeft 获取元素设置的上边距和左边框的大小
obj.styleWidth 和 obj.styleHeight 行内样式设置的CSS属性值
obj.style.top 和 obj.style.left 设置当前元素相对于符元素的位置

二、DOM文档对象的尺寸

DOM文档对象的尺寸属性共分为4类:

  • obj.scrollWidth 和 obj.scrollHeight(DOM对象内部视为一个整体,它所占据的大小)
  • obj.offsetWidth 和 obj.offsetHeight(DOM对象自身的大小,不计算外边距)
  • obj.clientWidth 和 obj.clientHeight(DOM对象可视区域,不计算外边距、边框和滚动条)
  • obj.style.width 和 obj.style.height(DOM对象行内式CSS属性初始化的值)
1、obj.scrollWidth 和 obj.scrollHeight

==表示一个DOM文档对象的内部实际大小,包括其内边距和内容的实际大小。==比如浏览器中的某个DOM对象嵌套了另一个类似浏览器的窗口(此刻这个DOM对象的overflow属性值为auto),此刻会存在兼容性的问题,firefox和opera浏览器会增加本DOM对象的外边框大小,而ie、chrome、safari浏览器会忽略边框大小。

<!DOCTYPE html>
<html> 
<head>
    <meta charset="UTF-8">
    <title>知数SEO_vx:zhishunet</title>
    <style>
        #outer{
            width:300px;height: 300px;border: 5px solid blue;
            background:pink;padding: 40px;margin: 30px;overflow: auto;
        }
        #inner{
            width: 500px;height: 500px;border: 1px solid red;
            background: yellow;
        }
    </style>
</head>
<body>
<div id="outer">
    <div id="inner"></div>
</div>
</body>
<script>
    window.onload = function (){
        var outer = document.getElementById('outer');
        // DOM对象内部实际宽度:582; 实际高度:582; [40 + 1+ 500 + 1 + 40 = 582]
        console.log('DOM对象内部实际宽度:'+ outer.scrollWidth + '; 实际高度:' + outer.scrollHeight);
        // 宽度:365; 高度:365 [ 300 + 40 + 40 - 滚动条宽高 = 365]
        console.log('宽度:' + outer.clientWidth + '; 高度:' + outer.clientHeight);
    }
</script>
</html>
2、obj.offsetWidth 和 obj.offsetHeight

表示DOM对象自身宽高,包括边框、内边距和滚动条(外边距不计算在内)

3、obj.clientWidth 和 obj.clientHeight

表示DOM对象的可用宽高,包括内容可视部分和内边距,而DOM对象自身的边框和滚动条是不计算在内的
与obj.offsetWidth 和 obj.offsetHeight相比它们之间的差别也就是DOM对象自身的边框宽度和滚动条宽度

4、obj.style.width 和 obj.style.height

表示DOM对象的行业样式的属性值,如果元素css样式不是使用行业样式赋值的则这两个值分别为空字符串

三、DOM文档对象的位置

DOM文档对象的位置属性共分为4类:

  • obj.scrollTop 和 obj.scrollLeft(获取滚动条被隐藏的区域大小)
  • obj.offsetTop 和 obj.offsetLeft(获取当前DOM对象相对于父元素的偏移量)
  • obj.clientTop 和 obj.clientLeft(获取元素设置的上边距和左边距的大小)
  • obj.style.top 和 obj.style.left(设置当前DOM对象相对于父元素的偏移量)
1、obj.scrollTop 和 obj.scrollLeft

这两个属性用来获取或设置被隐藏的区域大小(DOM对象中滚动条的当前位置)
它的运用非常常见:指定特效或轮播图

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>知数SEO_vx:zhishunet</title>
    <style>
        ul{
            width: 1200px;height: 379px;list-style: none;
            overflow: hidden;white-space: nowrap;padding: 0;
        }
        li{
            display: inline-block;padding: 0 10px;
        }
        img{
            width: 379px;
            height: 379px;
        }
    </style>
</head>
<body>
<ul>
    <li><img src="images/1.jpg" alt=""></li>
    <li><img src="images/2.jpg" alt=""></li>
    <li><img src="images/3.jpg" alt=""></li>
    <li><img src="images/4.jpg" alt=""></li>
    <li><img src="images/5.jpg" alt=""></li>
    <li><img src="images/6.jpg" alt=""></li>
    <li><img src="images/7.jpg" alt=""></li>
</ul>
</body>
<script>
    var obj = document.getElementsByTagName('ul')[0];
    var widthContain = obj.scrollWidth;
    console.log(widthContain);  // 2825
    var widthItself = obj.offsetWidth;
    console.log(widthItself);  // 1200
    console.log(obj.scrollLeft);  // 0 
    var flag = 1;
    setInterval(function (){
        obj.scrollLeft += flag;
        if(obj.scrollLeft === widthContain - widthItself) flag = -1;
        if (obj.scrollLeft === 0) flag = 1;
    },10);
</script>
</html>
2、obj.offsetTop 和 obj.offsetLeft
3、obj.clientTop 和 obj.clientLeft

这两个属性用来获取DOM对象的上边距和左边距的大小
当四边大小都不想同时,可以通过计算得到下边距和右边距的大小

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>知数SEO_vx:zhishunet</title>
    <style>
        #test{
            width: 100px;
            height: 100px;
            border-top: 1px solid #ccc;
            border-right: 7px solid #ccc;
            border-bottom: 5px solid #ccc;
            border-left: 3px solid #ccc;
        }
    </style>
</head>
<body>
<div id="test">
    <div id="aa"></div>
</div>
</body>
<script>
    var obj = document.getElementById('test');
    var widthItself = obj.offsetWidth; // 110
    var heightItself = obj.offsetHeight;  // 106
    var widthInner = obj.clientWidth;  // 100
    var heightInner = obj.clientHeight;  // 100
    var borderLeft = obj.clientLeft; // 3
    var borderTop = obj.clientTop; // 1
    alert('右边框的大小:' + (widthItself - widthInner - borderLeft)); // 7
    alert('下边框的大小:' + (heightItself - heightInner - borderTop));  // 5
</script>
</html>
4、obj.style.top 和 obj.style.left

四、移动端DOM对象的尺寸和位置

1、像素的概念

像素分为两类:一类是物理像素,另一类为设备独立像素
物理像素是显示屏(手机屏幕)上的最小的物理显示单元,在操作系统的调度下每个设备像素都有自己的颜色值和亮度值
独立设备像素可以认为是计算机坐标系统中的一个点,这个点代表一个可以由程序使用的虚拟像素(如css像素),然后由相关系统转换成物理像素
设备像素比是物理像素和设备独立像素的对应关系,它的值可以用公式获得: 设备像素比 = 物理像素 / 设备独立像素
为了解决像素比出现的问题需要在页面添加一条meta标签

<meta name = "viewport" content="width=devices-width,initial-scale=1">
2、移动端手势库(hammer.js)

官网地址:https://hammerjs.github.io/

标签:style,obj,DOM,对象,JavaScript,像素,详解,var
From: https://blog.51cto.com/zhishunet/9445067

相关文章

  • JavaScript DOM之Cookie详解
    cookie有的地方习惯使用复数形式的cookies,指的是网站为了识别用户的身份或者进行一些必要数据的缓存而使用的技术,它的数据是存在用户的终端上,也就是在浏览器上的。一、什么是cookie随着互联网的不断发展各种基于互联网的服务系统逐渐多了起来,我们常常需要记录访问者的一些信息,比......
  • JavaScript DOM对象的尺寸和位置详解
    在DOM对象操作中,其尺寸和位置也是DOM的核心内容,因为js的“交互式应用”几乎少不了对DOM对象的尺寸和位置进行操作,特别是js动画效果。一、关于DOM对象的尺寸和位置介绍DOM对象的尺寸和位置的属性DOM对象的属性描述obj.scrollWidth和obj.scrollHeightDOM对象的内部......
  • JavaScript DOM之Cookie详解
    cookie有的地方习惯使用复数形式的cookies,指的是网站为了识别用户的身份或者进行一些必要数据的缓存而使用的技术,它的数据是存在用户的终端上,也就是在浏览器上的。一、什么是cookie随着互联网的不断发展各种基于互联网的服务系统逐渐多了起来,我们常常需要记录访问者的一些信息,......
  • 线性基详解+例题
    线性基线性基是一个能够在每次时间复杂度\(O(\log_2d)\),d是数字的位数内处理异或最大最小的数据结构。问题:请你维护一个数据结构,支持插入一个数,求这些数任意异或得到的结果是否可能为某一个数、最大值、最小值、第k小值。做法:开一个数组a[MAXN],MAXN是数字最高位数。a[i]表示......
  • synchronized详解
    synchronized?是Java中的关键字,是一种同步锁。主要应用于多线程环境下保证线程的安全性。四种用法修饰一个代码块         被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;synchronized(this)classSyncTh......
  • 【C#】快捷键详解
    注释:Ctrl+K,Ctrl+C取消注释:Ctrl+K,Ctrl+U添加#region:Ctrl+K,Ctrl+S格式化对齐:Ctrl+K,Ctrl+D生成getset:Ctrl+R,Ctrl+E转换小写:CTRL+U转换大写:CTRL+SHIFT+U启动调试:F5停止调试:Shift+F5单步执行:F11或F10跳出函数:Shift+F11查看变量值:鼠标悬停变量上代码格式化:Ct......
  • 注解@CrossOrigin详解
    转载自:https://blog.csdn.net/MobiusStrip/article/details/84849418文章目录注解@CrossOrigin一、跨域(CORS)支持:二、使用方法:1、controller配置CORS1.1、controller方法的CORS配置1.2、为整个controller启用@CrossOrigin1.3、同时使用controller和方法级别的C......
  • C# 面向对象编程进阶:构造函数详解与访问修饰符应用
    C#构造函数构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值:示例获取您自己的C#服务器创建一个构造函数://创建一个Car类classCar{publicstringmodel;//创建一个字段//为Car类创建一个......
  • C# 面向对象编程进阶:构造函数详解与访问修饰符应用
    C#构造函数构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值:示例获取您自己的C#服务器创建一个构造函数://创建一个Car类classCar{publicstringmodel;//创建一个字段//为Car类创建一......
  • 关于javascript的一些笔记(一)
    在script标签内使用import的时候,必须在script标签加上type=“module”当使用script标签加上type="module"的时候,是当所有模块都加载进来才进行工作的,也就是如果html在script标签下面也是可以正常运行的,他是后解析的当使用script标签加上type="module"的时候,script标签里面......