欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

offsetWidth和width的区别 offsetwidth offsetheight 有大用 有大大用

1.offsetWidth属性可以返回对象的padding+border+width属性值之和,style.width返回值就是定义的width属性值。  
2.offsetWidth属性仅是可读属性,而style.width是可读写的。  
3.offsetWidth属性返回值是整数,而style.width的返回值是字符串,并且带有单位。  
4.style.width仅能返回以style方式定义的内部样式表的width属性值。  

应用:

在video视频播放器制作过程中,可以配合e.offsetX来获取当前的播放时间,从而可以拖动进度条来改变视频播放位置。

  1. function scrub(e) {
  2. const scrubTime = (e.offsetX / progress.offsetWidth) * vidoe.duration;
  3. video.currentTime = scrubTime;
  4. }

 


来自  https://blog.csdn.net/qq_39207948/article/details/85855088



javascript 中 offsetWidth 是什么意思?

javascript 中 offsetWidth 是对象的可见宽度,包滚动条等边线,会随窗口的显示大小改变

clientWidth、offsetWidth、clientHeight区别
IE6.0、FF1.06+:
offsetWidth = width + padding + border
offsetHeight = height + padding + border
IE5.0/5.5:
offsetWidth = width
offsetHeight = height

offsetwidth:是元素相对父元素的偏移宽度。等于border+padding+width

来自  https://zhidao.baidu.com/question/1445662808087972500.html


offsetwidth详解_offsetWidth和它的兄弟姐妹们

我们在取元素的宽度时脑海里就能想起如offsetWidth、 clientWidth、 scrollWidth 、style.width,那它们有什么区别呢?先看一下官方定义:

一、HTMLElement.offsetWidth是一个只读属性,返回一个元素的布局宽度。一个典型的(译者注:各浏览器的offsetWidth可能有所不同)offsetWidth是测量包含元素的边框(border)、水平线上的内边距(padding)、竖直方向滚动条(scrollbar)(如果存在的话)、以及CSS设置的宽度(width)的值。

  1. var offsetWidth = element.offsetWidth;
  2. // 这个属性将会 round(四舍五入)为一个整数。如果你想要一个fractional(小数)值,请使用element.getBoundingClientRect().


aa57d835b972c4f46b124125ee14a1d3.png

备注:offsetWidth是一个DHTML对象模型中的属性,由微软IE浏览器首次引入。有时候它也可以称为一个元素的物理或图形尺寸,或者<border-box>(译者注:即CSS3中的border-box模型)的宽度。

二、HTMLElement.clientWidth 属性表示元素的内部宽度,以像素计。内联元素以及没有 CSS 样式的元素的 clientWidth 属性值为 0。Element.clientWidth 该属性包括内边距,但不包括垂直滚动条(如果有)、边框和外边距。

  1. var intElemClientWidth = element.clientWidth;
  2. // 该属性值会被四舍五入为一个整数。如果你需要一个小数值,可使用 element.getBoundingClientRect()。


59342e27ac5bfc759167348816e433c9.png

三、HTMLElement.scrollWidth 这个只读属性是元素内容宽度的一种度量,包括由于overflow溢出而在屏幕上不可见的内容。scrollWidth值等于元素在不使用水平滚动条的情况下适合视口中的所有内容所需的最小宽度。 宽度的测量方式与clientWidth相同:它包含元素的内边距,但不包括边框,外边距或垂直滚动条(如果存在)。 它还可以包括伪元素的宽度,例如::before::after。 如果元素的内容可以适合而不需要水平滚动条,则其scrollWidth等于clientWidth

  1. var xScrollWidth = element.scrollWidth;
  2. // xScrollWidth 的值是元素的内容宽度
  3. // 这个属性会进行四舍五入并返回整数,如果你需要小数形式的值,使用element.getBoundingClientRect().

例如:https://jsbin.com/jenuhobela/edit?html,js


a52250f48454e886f8caae7c9bbc0fc6.png
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Example</title>
  5. <style>
  6. div {
  7. overflow: hidden;
  8. white-space: nowrap;
  9. text-overflow: ellipsis;
  10. border: 1px solid red;
  11. }
  12. #aDiv {
  13. width: 100px;
  14. border: 1px solid blue;
  15. }
  16. button {
  17. margin-bottom: 2em;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <div id="aDiv">
  23. FooBar-FooBar-FooBar-FooBar
  24. </div>
  25. <button id="aButton">
  26. Check for overflow
  27. </button>
  28. <div id="anotherDiv">
  29. FooBar-FooBar-FooBar-FooBar
  30. </div>
  31. <button id="anotherButton">
  32. Check for overflow
  33. </button>
  34. <script>
  35. var buttonOne = document.getElementById('aButton'),
  36. buttonTwo = document.getElementById('anotherButton'),
  37. divOne = document.getElementById('aDiv'),
  38. divTwo = document.getElementById('anotherDiv');
  39. //check to determine if an overflow is happening
  40. function isOverflowing(element) {
  41. console.log(element.scrollWidth, 'scrollWidth')
  42. console.log(element.offsetWidth, 'offsetWidth')
  43. return (element.scrollWidth > element.offsetWidth);
  44. }
  45. function alertOverflow(element) {
  46. if (isOverflowing(element)) {
  47. console.log('Contents are overflowing the container.');
  48. } else {
  49. console.log('No overflows!');
  50. }
  51. }
  52. buttonOne.addEventListener('click', function() {
  53. alertOverflow(divOne);
  54. });
  55. buttonTwo.addEventListener('click', function() {
  56. alertOverflow(divTwo);
  57. });
  58. </script>
  59. </body>
  60. </html>


bdd671d8599dcb4e34e8e678ce19dbad.png

MDN 上对以上3属性有绝妙的总结:

如果你需要知道元素总共占用了多少空间,包括可视内容、滚动条(如果有的话)、内边距和边框的宽度,你会使用 offsetWidth和offsetHeight属性;(简单说offsetWidth是border+(若有)scrollbar+padding+width值之和)

如果你需要知道展示区域内容占用了多少空间,包括内边距但是不包括边框、外边距或者滚动条,你会使用clientWidth和clientHeight属性;(简单说clientWidth是padding+width值之和)

如果你想要知道内容区域的实际大小,而不局限于可见区域的话,你会使用 scrollWidth和scrollHeight属性。即使使用了滚动条仅有部分内容可见,这两个属性仍会返回元素的完整内容宽高;例如,一个300x300像素 的滚动盒子里放置了一个600x400像素的元素,scrollWidth将会返回600,scrooHeight返回400.

最后补充:style.width仅能返回当样式写在行内的时候以style方式定义的内部样式表的width属性值。style.width获取的元素宽度只是content的宽度,不包括border、和padding所占的宽度,且宽度值是带单位px的。style.width也可以在js中用来设置元素的宽度,而offsetWidth不可以。当样式写在样式表中时,如 #box{ width: 100px; }, 此时只能用offsetWidth来获取元素的宽度,而style.width所返回的值为空。例如:https://jsbin.com/jihaqagule/1/edit?html,js,output


126912318ab45932a1f3fe4fe5161232.png

本文引用参考:

HTMLElement.offsetWidthdeveloper.mozilla.org
e1a8e3771e6a1b15599df916b1e6f02d.png
Determining the dimensions of elementsdeveloper.mozilla.org
e1a8e3771e6a1b15599df916b1e6f02d.png
scrollWidth、clientWidth、offsetWidth、width的区别www.jianshu.com
93af448ceb8a3f6ebcc4adc2141fdb5d.png
基于js中style.width与offsetWidth的区别(详解)_javascript技巧_脚本之家www.jb51.net

来自 https://blog.csdn.net/weixin_39905500/article/details/110897355




普通分类: