• Javascript之常用尺寸、位置获取


    标签: js


    缘起

    平时在开发中或多或少需要去获取元素尺寸,特此记录常用的尺寸获取方案。

    常用相关尺寸

    /**
     * 获取窗口可视尺寸
     */
    function getWindowClientSize(){
        var docElem = document.documentElement;
        var docBd = document.body;
        return {
          w: docElem.clientWidth || docBd.clientWidth,
          h: docElem.clientHeight || docBd.clientHeight
        }
    }
    
    /**
     * 获取窗口真实尺寸,包括滚动条隐藏的内容
     */
    function getWindowSize() {
      var docElem = document.documentElement;
      var docBd = document.body;
      return {
        w: docElem.scrollWidth || docBd.scrollWidth,
        h: docElem.scrollHeight || docBd.scrollHeight
      }
    }
    
    /**
     * 获取元素的可视尺寸
     * @param {Dom} elem  要获取的元素
     * 注:行内元素总为0,隐藏元素也为0
     */
    function getElementClientSize(elem) {
        return {
            pw: elem.clientWidth,    // width + padding(左右)
            ph: elem.clientHeight,   // height + padding(上下)
            pdw: elem.offsetWidth,   // width + padding(左右) + border(左右)
            pdh: elem.offsetHeight   // height + padding(上下) + border(上下)
        }
    }
    
    /**
     * 获取元素的真实尺寸
     * @param {Dom} elem  要获取的元素
     * 注:此宽度包括滚动隐藏内容,可视内容,内边距,会减少滚动条所占的大小
     */
    function getElementSize(elem) {
        return {
            w: elem.scrollWidth,
            h: elem.scrollHeight
        }
    }
    
    /**
     * 获取滚动条已滚动的尺寸
     */
    function getScrollSize() {
        var docElem = document.documentElement;
        var docBd = document.body;
        return {
            t: docElem.scrollTop || docBd.scrollTop,
            l: docElem.scrollLeft || docBd.scrollLeft
        }
    }
    

    常用相关位置

    • 获取元素基于可视区左上角的位置 测试地址
    /**
     * 获取元素基于可视区左上角的位置
     * @param {Dom} elem 
     * 注:获取元素4条边相对于窗口左上角的偏移值,平时做按需加载和滚屏动画经常用到它
     */
    function getElementClientPos(elem) {
        var pos = elem.getBoundingClientRect();
        return {
            left: pos.left,
            top: pos.top,
            right: pos.right,
            bottom: pos.bottom
        }
    }
    
    /**
     * 获取元素相对窗口左上角的偏移
     * @param {Dom} elem
     * 注:默认会忽略元素offsetParent的边框
     */
    function getElementOffsetPos(elem){
        var top = 0,
            left = 0;
        while(elem) {
            top += elem.offsetTop;
            left += elem.offsetLeft;
            elem = elem.offsetParent;
        }
        return {
            top: top,
            left: left
        }
    }
    
  • 相关阅读:
    一道初中练习题,现在的我几乎差点很有可能搞不好似乎仿佛就没有做出来.
    [转]IBM ThinkPad 全新、原装机验机流程(完全版)
    在一个BBS上看到的.觉得很不错,放过来.
    验证数字的正则表达式集
    基于百度地图SDK + SQLite数据库的安卓管理系统
    C# 将系统时间转换成农历时间
    博客园
    C#正则表达式的简单用法
    单张图片轮换
    2个有焦点时文字消失或变淡效果
  • 原文地址:https://www.cnblogs.com/xwwin/p/13493984.html
Copyright © 2020-2023  润新知