javascript 常用尺寸属性

javascript client属性

  • 元素可见的高度: document.body.clientHeight
  • 元素可见的宽度: document.body.clientWidth
  • 了解: clientTopclientLeft

javascript Offset属性

  • 元素可见的高度(包括边框内边距): offsetHeight
  • 元素可见的宽度(包括边框内边距): offsetWidth

offsetWidth 和 style.width (高度同理)的区别:

offsetWidth 会获取: 元素本身的高度 + padding + border

style.width会获取: 元素本身的高度 并且 style.width 只能获取行内样式

offsetWidth 返回 数字 style.width 返回 带单位的字符串

  • 元素离父标签的顶部距离(带有定位的): offsetTop
  • 元素离父标签的左边距离(带有定位的 ): offsetLeft
  • 元素父标签(有定位的): offsetParent

offsetParent和parentNode的区别:

offsetParent会找到有定位的父标签(就近原则), parentNode只能做到本元素的父标签

// offset系列属性 和 style.属性 的区别:  以 offsetLeft 和style.left为例
// 1) style.left只能获取行内的,而offsetLeft可以获取所有的
// 2) offsetLeft可返回没有定位盒子距离左侧的距离为style.left只能返回有定位盒子的left
// 3) offsetLfet返回的数字而 style.left 返回的是字符串,除了数字还有单位的px
// 4) offsetLeft只能获取不能修改 style.left可以获取,也也可以修改

javascript scroll属性和方法

  • 网页正文的高度: document.body.srcollHeight

  • 网页正文的宽度: document.body.srcollWidth

  • 网页滚动的高(最最常用): srcollTop

  • 网页滚动的宽(左): srcollLeft

  • 方法: 滚动到指定的位置: scrollTo(x,y)

注: 只有在窗口 或 文档的时候才能获取 scroll属性的值

三大属性的区别

  • width 和 height
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>缓动动画</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #box{
            width: 200px;
            height: 200px;
            background: #000;
            padding: 10px;
            border: 20px solid #ff0000;
        }
    </style>
</head>
<body>
    <div id="box" style="width: 200px"></div>
    <script>
        window.onload = function () {
            var box = document.getElementById('box');
            /**
             * width   : 元素本身的宽度
             * padding : padiung宽度
             * border  : border的宽度
             */
            // clientWidth = width + padding
            console.log(box.clientWidth, box.clientHeight);
            // offsetWidth = width + padding + border
            console.log(box.offsetWidth, box.offsetHeight);
            // offsetWidth = 能够滚动的宽度/高度,不能滚动时是 width + padding
            console.log(box.scrollWidth, box.scrollHeight);
        }
    </script>
</body>
</html>
  • top 和 left
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>缓动动画</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #box{
            width: 200px;
            height: 200px;
            background: #000;
            padding: 10px;
            border: 20px solid #ff0000;
        }
    </style>
</head>
<body>
<div id="box" style="width: 200px"></div>
<script>
    window.onload = function () {
        var box = document.getElementById('box');

        // 当前元素距离父元素(有定位的)左/上边的距离
        console.log(box.clientTop, box.clientLeft);
        // 当前元素左/上边边框的宽度
        console.log(box.offsetTop, box.offsetLeft);
        // 网页上/左边滚动的长度
        console.log(box.scrollTop, box.scrollLeft);
    }
</script>
</body>
</html>

处理scroll系列属性的浏览器兼容问题

  • IE9+ 和 其他最新的浏览器
window.pageXOffset; // scrollLeft
window.pageYOffset; // scrollTop
  • Firefox 和 其他浏览器
document.documentElement.scrollTop;  // scrollTop
document.documentElement.scrollLeft; // scrollLeft
  • Chrome 和 没有 DTD 的
document.body.scrollTop;  // scrollTop
document.body.scrollLeft; // scrollLeft
  • 兼容所有浏览器的写法
var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; // scrollTop

var scrollLeft = window.pageYOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; // scrollLeft

/**
  * 获取滚动的头部距离和左边距离
  * scroll().top
  * scroll().left
  * @returns {{top: number, left: number}}
  */
function scroll() {
    if (window.pageYOffset !== null) {
        return {
            top  : pageYOffset,
            left : pageXOffset
        }
    } else if (document.compatModel === 'CSS1Compat') {
        // CSS1Compat w3c标准
        return {
            top  : document.documentElement.scrollTop,
            left : document.documentElement.scrollLeft
        }
    } else {
        return {
            top  : document.body.scrollTop,
            left : document.body.scrollLeft
        }
    }
}


处理获取屏幕可视区域宽高度兼容性问题

  • IE9及以上版本, 最新浏览器
window.innerWidth;  // 可视区域的宽度
window.innerHeight; // 可视区域的高度
  • 标准模式浏览器
document.documentElement.clientWidth;  // 可视区域的宽度
document.documentElement.clientheight; // 可视区域的高度
  • 其他
document.body.clientWidth;  // 可视区域的宽度
document.body.clientheight; // 可视区域的高度
  • 兼容所有浏览器的写法
/**
  * 获取屏幕的宽度和高度
  * client().width
  * client().height
  * @returns {{width: number, height: number}}
  */
function client() {
    if (window.innerWidth) { // IE9及以上版本浏览器
        return {
            width  : window.innerWidth,
            height : window.innerHeight
        };
    }else if (document.compatModel === 'CSS1Compat') {
        // CSS1Compat w3c标准
        return {
            width: document.documentElement.clientWidth,
            height: document.documentElement.clientHeight
        };
    }
    return {
        width : document.documentElement.clientWidth,
        height : document.documentElement.clientHeight
    };
}
image.png

参考: http://c.biancheng.net/view/6028.html
参考: https://www.cnblogs.com/echolun/p/10683679.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,690评论 1 92
  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 7,760评论 0 8
  • Window和document对象的区别 window对象window对象表示浏览器中打开的窗口window对象是...
    FConfidence阅读 6,740评论 0 5
  •   DOM 1 级主要定义的是 HTML 和 XML 文档的底层结构。   DOM2 和 DOM3 级则在这个结构...
    霜天晓阅读 5,366评论 1 3
  • 原文链接 http://blog.poetries.top/2016/12/13/js-props声明:本文根据慕...
    前端进阶之旅阅读 8,567评论 1 44

友情链接更多精彩内容