client:
clientWidth/clientHeight:
- 元素内部的宽度/高度,仅包含包含content和padding,不包含滚动条
- clientWidth = content width + padding - scrollbar Width
- clientHeight = content Height + padding - scrollbar Height
clientLeft/clientTop:
元素的左border宽度,当文字方向为右至左且出现滚动条时(direction: rtl),需要加上滚动条宽度
clientLeft = border Width + scrollbar Width(对于行内元素这个值为0)
clientTop = borderTop
计算浏览器或元素滚动条宽度:
elem.offsetWidth - elem.borderLeftWidth - elem.borderRightWidth - elem.clientWidth
export default class myUtils { // 计算元素滚动条宽度 static getScrollWidth(elemOrSelect) { if (!elemOrSelect) return; if (elemOrSelect.constructor === String) elemOrSelect = document.querySelector(elemOrSelect); //参数为html或body时获取浏览器默认滚动条宽度 if (/BODY|HTML/.test(elemOrSelect.nodeName)) { elemOrSelect.style.padding = 0; elemOrSelect.style.margin = 0; return window.innerWidth - elemOrSelect.clientWidth; } //兼容 var style = elemOrSelect.currentStyle ? elemOrSelect.currentStyle : getComputedStyle(elemOrSelect).style; //获取某个元素滚动条宽度 var width = elemOrSelect.offsetWidth - Math.ceil(parseFloat(style.borderLeftWidth)) - Math.ceil(parseFloat(style.borderRightWidth)) - elemOrSelect.clientWidth; return width; } }
offsetWidth/offsetHeight/offsetLeft/offsetTop:
offsetWidth/offsetHeight: content + padding + border(包含滚动条)
offsetLeft:
offsetTop:
一张经典的图片:
来源:https://www.cnblogs.com/ltfxy/p/12275352.html