zoukankan      html  css  js  c++  java
  • 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{
                 200px;
                height: 200px;
                background: #000;
                padding: 10px;
                border: 20px solid #ff0000;
            }
        </style>
    </head>
    <body>
        <div id="box" style=" 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{
                 200px;
                height: 200px;
                background: #000;
                padding: 10px;
                border: 20px solid #ff0000;
            }
        </style>
    </head>
    <body>
    <div id="box" style=" 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 {{ number, height: number}}
      */
    function client() {
        if (window.innerWidth) { // IE9及以上版本浏览器
            return {
                width  : window.innerWidth,
                height : window.innerHeight
            };
        }else if (document.compatModel === 'CSS1Compat') {
            // CSS1Compat w3c标准
            return {
                 document.documentElement.clientWidth,
                height: document.documentElement.clientHeight
            };
        }
        return {
            width : document.documentElement.clientWidth,
            height : document.documentElement.clientHeight
        };
    }
    
  • 相关阅读:
    Docker是什么
    常用架构模式优缺点
    DDD领域模型自动生成?
    组合数【模板】
    组合数【模板】
    HDU 4800 Josephina and RPG【概率dp】
    HDU 4800 Josephina and RPG【概率dp】
    HDU 4424 Conquer a New Region【并查集】【思维题】
    HDU 4424 Conquer a New Region【并查集】【思维题】
    HDU 4427 Math Magic【dp+优化+滚动数组】【好题】
  • 原文地址:https://www.cnblogs.com/liaohui5/p/10581665.html
Copyright © 2011-2022 走看看