zoukankan      html  css  js  c++  java
  • js获取页面的可视宽高度,占位宽高度,获取元素左上角相对页面左上角的位置,元素左上角相对可是区域的位置,元素是否存在于页面可视范围内

      1 var css = (function () { // 以下方法兼容ie7+,chrome(亲测),ie6没有测试(应该也是可以支持的)
      2     var doEle = document.documentElement,
      3         doBody = document.body,
      4         doScrollLeft,
      5         doScrollTop,
      6         utils,
      7         offsetLeft,
      8         offsetTop,
      9         offsetParent;
     10 
     11     utils = {
     12 
     13         // 获取页面的可视宽度和高度
     14         getAvailPage: function () {
     15             return {
     16                  doEle.clientWidth || doBody.clientWidth,
     17                 height: doEle.clientHeight || doBody.clientHeight
     18             };
     19             
     20             // 以下是进行||运算的缘由,后几个方法也是如此
     21             //            if (document.compatMode === 'BackCompat') { // ie6或者没有文档说明下的计算方法
     22             //                return {
     23             //                     doBody.clientWidth,
     24             //                    height: doBody.clientHeight
     25             //                };
     26             //            } else { // document.compatMode == "CSS1Compat"(有文档说明)
     27             //                return {
     28             //                     doEle.clientWidth,
     29             //                    height: doEle.clientHeight
     30             //                };
     31             //            }
     32         },
     33 
     34         // 获取页面的占位宽度和高度
     35         getAllPage: function () {
     36             return {
     37                  Math.max(doEle.clientWidth || doBody.clientWidth, doEle.scrollWidth || doBody.scrollWidth),
     38                 height: Math.max(doEle.clientHeight || doBody.clientHeight, doEle.scrollHeight || doBody.scrollHeight)
     39             };
     40         },
     41 
     42         // 获取元素的绝对位置
     43         getOffset: function (element) {
     44 
     45             offsetLeft = element.offsetLeft;
     46             offsetTop = element.offsetTop;
     47             offsetParent = element.offsetParent;
     48 
     49             while (offsetParent) {
     50                 offsetLeft += offsetParent.offsetLeft;
     51                 offsetTop += offsetParent.offsetTop;
     52                 offsetParent = offsetParent.offsetParent;
     53             }
     54 
     55             return {
     56                 top: offsetTop,
     57                 left: offsetLeft
     58             };
     59         },
     60 
     61         // 获取元素的相对位置
     62         getOffsetRelative: function (element) {
     63 
     64             doScrollLeft = doEle.scrollLeft || window.pageXOffset || doBody.scrollLeft;
     65             doScrollTop = doEle.scrollTop || window.pageYOffset || doBody.scrollTop;    
     66 
     67             return {
     68                 top: this.getOffset(element).top - doScrollTop,
     69                 left: this.getOffset(element).left - doScrollLeft
     70             };
     71         },
     72 
     73         // 是否在可视区域可见
     74         isVisible: function (element) {
     75             var left = this.getOffset(element).left,
     76                 top = this.getOffset(element).top,
     77                 width = element.offsetWidth,
     78                 height = element.offsetHeight,
     79                 docuHeight = this.getAvailPage().height,
     80                 docuWidth = this.getAvailPage().width,
     81                 docuLeft = doEle.scrollLeft || window.pageXOffset || doBody.scrollLeft,
     82                 docuTop = doEle.scrollTop || window.pageYOffset || doBody.scrollTop;
     83 
     84             // 元素下侧超出可视区域上侧
     85             // 元素上侧超出可视区域下侧
     86             // 元素左侧超出可视区域右侧
     87             // 元素右侧超出可视区域左侧
     88             if (top + height < docuTop ||
     89                 top > docuTop + docuHeight ||
     90                 left > docuLeft + docuWidth ||
     91                 left + width < docuLeft) {
     92                 return false;
     93             } else {
     94                 return true;
     95             }
     96         }
     97     };
     98 };
     99 
    100 return utils;
    101 
    102 })();
  • 相关阅读:
    使用钉钉对接禅道的bug系统,实现禅道提的bug实时在钉钉提醒并艾特对应的开发人员处理
    Python3数据驱动ddt
    Python3发送邮件功能
    Python3的日志添加功能
    【最小生成树】BZOJ1016: [JSOI2008]最小生成树计数
    【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院
    【最小生成树+子集枚举】Uva1151 Buy or Build
    【最小生成树】UVA1494Qin Shi Huang's National Road System秦始皇修路
    【最小生成树+贪心】BZOJ1821: [JSOI2010]Group 部落划分 Group
    【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup
  • 原文地址:https://www.cnblogs.com/minzhang2/p/5101825.html
Copyright © 2011-2022 走看看