美文网首页
2017/12/10 - 元素宽高,位置的兼容性完备处理

2017/12/10 - 元素宽高,位置的兼容性完备处理

作者: YXCoder | 来源:发表于2017-12-10 16:36 被阅读0次

之前写代码都会用jquery,元素宽高和位置很容易就能得到。随着浏览器,前端技术的更新换代,jquery开始走下坡路,各大框架纷纷崛起,前端发生翻天覆地的变化,基础JS显得尤为重要。

这里总结一下元素的宽高,视口左边,文档坐标的各浏览器兼容性完备处理。

  • 首先,这里贴一下window的宽高代码,window本身有宽高属性,直接获取就好了
var win = function(){
      var w = window;
      var width = w.innerWidth;                
      var height = w.innerHeight;
      var outWidth = w.outerWidth;
      var outHeight = w.outerHeight;
}

这里outWidth和outHeight为整个浏览器的宽高,包括工具栏,地址栏等

  • 然后是元素的文档坐标以及宽高
var offset = function(ele){   //文档位置属性
      var w = window;
      var box = ele.getBoundingClientRect();
      var winHeight = w.innerHeight;
      var winWidth = w.innerWidth;
      var width = box.width || (box.right - box.left);
      var height = box.height || (box.bottom - box.top);
      var top, left, right, bottom;
      top = box.top + this.scroll(ele).scrollY;
      left = box.left + this.scroll(ele).scrollX;
      right = winWidth - box.right;
      bottom = winHeight - box.bottom;
      return {
          width: width,                //文档元素宽度
          height: height,              //文档元素高度
          top: top,                    //元素与文档顶部距离
          left: left,                  //元素与文档左部距离
          right: right,                //元素与文档右部距离
          bottom: bottom               //元素与文档底部距离
       }
    }

这里文档坐标是指元素在整个文档中的位置,就算发生滚动,文档位置也不会变化

  • 然后是元素的视口坐标
var client = function(ele){    //视口位置属性
       var w = window;
       var box = ele.getBoundingClientRect();
       var winHeight = w.innerHeight;
       var winWidth = w.innerWidth;
       var top = box.top;
       var left = box.left;
       var right = winWidth - box.right;
       var bottom = winHeight - box.bottom;
       return {
           top: top,
           left: left,
           right: right,
           bottom: bottom
       }
   }

视口坐标会随着滚动条的变化而变化

  • 最后是滚动条位置
scroll = function(){
       var scrollX, scrollY;
       var w = window;
       if(w.pageXOffset != null){
           scrollX = w.pageXOffset;
           scrollY = w.pageYOffset;
       } else if(document.compatMode == 'CSS1Compat'){
           scrollX = d.documentElement.scrollLeft;
           scrollY = d.documentElement.scrollTop;
       } else {
           scrollX = d.body.scrollLeft;
           scrollY = d.body.scrollTop;
       };
       return {
           scrollX: scrollX,
           scrollY: scrollY
       }
   }

这里滚动条做了很多兼容性处理


之前写代码的时候总要去思考元素的各种坐标如何获取,兼容性处理如何做,这里做一个总结,可以加深一点印象

相关文章

网友评论

      本文标题:2017/12/10 - 元素宽高,位置的兼容性完备处理

      本文链接:https://www.haomeiwen.com/subject/udrvixtx.html