zoukankan      html  css  js  c++  java
  • 对于JAVASCRIPT中页宽度高度,元素定位与宽度高度,鼠标定位总结

    ------------------------------------            关于页面部分              ----------------------------------------------------

    ------------------------------------整个页面的宽度和高度(包含被滚动条卷入部分)----------------------------------------------------

    // 命名规则,所有JQ对象变量用$开头

    //javascript
    //宽度高度,包含被被滚动部分。

    var pageWidth = document.documentElement.scrollWidth;
    var pageHeight = document.documentElement.scrollHeight;
    

     这样获取会有一个问题,当Body无内容或者内容很少,不够一屏的高度时,pageHeight的值会很小,在CSS默认下,Chrome得到了8的值,火狐和IE获取到的是文档区域大小!

    所以处理兼容性

    var pageWidth = Math.max(document.documentElement.scrollWidth,document.documentElement.clientWidth);
    	
    var pageHeight = Math.max(document.documentElement.scrollHeight,document.documentElement.clientHeight);
    

    //那么,我们再通过JQuery来获取

    var $pageWidth = $(document).width();
    var $pageHeight = $(document).height();

    //通过测试可知,在IE8下,JQuery获取的宽度包含了右侧滚动条的宽度,比通过JS获得的宽度要大21像素。在1920*1080分辨率下,JS获取到的是1899,JQ的是1920,IE6下分别是1893,1910

    //而FF,Chrome两者结果相同

    /*----------------------------------------页面可视区域宽度高度(不包含被滚动调滚动区域部分)------------------------------------------------*/
    //JS部分

    var windowClientWidth = document.documentElement.clientWidth;
    var widdowClientHeight = document.documentElement.clientHeight;

    //结果不包含滚动条的宽度和高度

    //JQ部分

    var $windowClientWidth = $(window).width();
    var $widdowClientHeight = $(window).height();

    //获取结果 JS和JQ一样,没什么兼容性问题,比较简单。

    /*----------------------------------------页面被滚动条卷入部分------------------------------------------------*/

    //JS
        var pageScrollTop = document.documentElement.scrollTop;
        var pageScrollLeft = document.documentElement.scrollLeft;

    //在这个属性的实现上,chrome把这个属性放到了Body下,所以要解决兼容性。

    //解决办法有很多,可以通过快速或,三元运算,Math.max求最大值等等

    var pageScrollTop = document.documentElement.scrollTop + document.body.scrollTop;
    var pageScrollLeft = document.documentElement.scrollLeft + document.body.scrollLeft;
    //JQ
        
        var  $pageScrollTop = $(document).scrollTop();
        var  $pageScrollLeft = $(document).scrollLeft();

    /*------------------------------------ 元素部分 ----------------------------------------------------*/
    /*------------------------------------ 宽度与高度 ----------------------------------------------------*/

    /*
        HTML结构和CSS设置
    
     <div id="warp">
        <div id="inner"></div>
     </div>
     #warp{
            500px;
            height:300px;
            border:5px solid #69F;
            background:yellow;
            padding:50px;
            position:relative;
            
                
        }
        
        #inner{
            200px;
            height:200px;
            margin:50px;
            background:red;
            position:absolute;
                
        }
    */

    //宽度 为了方便,用JQ库来获取元素

    var $warp = $('#warp'); //JQ对象
    var $inner = $('#inner');
        
    var warp = $warp[0];  // 转换成JS对象,两种转化方法
    var inner = $inner.get(0);

    /*------ 获取内部可视部分宽度-------*/

        var warpWarpWidth = warp.clientWidth;
        var warpWarpHeight = warp.clientHeight;

    //result 600,400
    //计算方法 宽度+2*pandding 500+50*2 ;高度同宽度
    //如果包含滚动条,滚动条的宽度也不计算在内。

    var warpInnerWidth = inner.clientWidth;
    var warpInnerHeight = inner.clientHeight;

    //result 200,200


    //JQ

        var $warpInnerWidth = $warp.innerWidth();
        var $warpInnerHeight = $warp.innerHeight();

    //result 600 400 同JS结果

    /*------ 获取整体宽度(包含滚动条宽度边框宽度和Padding)-------*/

    //JS

    var warpOuterWidth= warp.offsetWidth;
    var warpOuterHeight = warp.offsetHeight;

    //result : 610 410
    //计算方法 CSS定义的宽度 + 2*border + 2*padding 500+2*50+2*5 = 610;

    //JQ

    var $warpOuterWidth= $inner.outerWidth();
    var $warpOuterHeight = $warp.outerHeight();    

    //result : 610 410;

    /*
    JQ中宽度能够获取到更多的值,免去了计算,如下

    width() width //result : 500 //可视区域,不包含滚动条被卷入部分

    innerWidth() width+padding //600 //可视区域,不包含滚动条被卷入部

    outerWidth() width+padding+border// 610

    outerWidth(true) width+padding+border+margin // $inner.outWidth(true) = 300; 加上了外边补白部分

    */

    /*-----获取内部整个文档的宽度高度-------*/

    //JS(包含被滚动条卷入部分,但是不包含变宽和滚动条宽度高度)

    var $scroll = $('#scroll');
    var scrollBox = $scroll[0];
        
    var scrollWidth =scrollBox.scrollWidth;
    var scrollHeight = scrollBox.scrollHeight;

    /*------------------------------------            定位left top          ----------------------------------------------------*/

    //JS
        
        var innerOffsetLeft = inner.offsetLeft;
        var innerOffsetTop = inner.offsetTop;

    // 100 100 外部warp的padding + 内部的margin
    //使用JS的方法要特别注意,获取定位的元素应该是具有Position属性为relative或者absolute的元素
    //并且要知道 offsetParent是哪个元素,获取的到值是相对于这个元素的位移量。

    //alert(inner.offsetParent.id); result warp

    //JQ

    //在JQ中提供了两个方法来获取位置信息

    // offset() : 返回 返回一个对象 包含Left ,top 两个属性。 offset();方法不管元素相对与哪个元素进行定位,获取到的结果都是相对于浏览器窗口
    // position(); 返回值和offset()一样。 但是返回的是相对于定位元素的偏移量。

    //将warp的css top设置为1000px;

    var offset = $warp.offset();
    // offset.top = 1008;
        
    var offset = $inner.offset();
    // offset.top = 1113;
        
    var position = $warp.position();
    // position.top = 1008;
        
    var position = $inner.position();
    // position.top = 50;

    //相对于窗口的LEFT TOP

    // o.getBoundingClientRect() 获取相对视窗的位置 返回对象包含LEFT TOP属性
    //该方法已经不再是IE Only了,FF3.0+和Opera9.5+已经支持了该方法,可以说在获得页面元素位置上效率能有很大的提高,在以前版本的Opera和Firefox中必须通过循环来获得元素在页面中的绝对位置。

     warp.getBoundingClientRect();


    //有了这个方法,获取页面元素的位置就简单多了,

    //var X= this.getBoundingClientRect().left+document.documentElement.scrollLeft;
    //var Y =this.getBoundingClientRect().top+document.documentElement.scrollTop;

    初学,可能还有些浏览器的差异没写出来,如果有什么错误,欢迎指点,不胜感激。

  • 相关阅读:
    echarts 图表tooltip数据默认是按照series中的数据位置排序。 鼠标移入排序
    三位加,号
    保留整数的方法
    水印vue
    vue 省市区
    平行四边形css
    css 文字样式
    js练习题
    axios 之cancelToken原理以及使用 取消上一次请求
    身份证获取生日性别
  • 原文地址:https://www.cnblogs.com/iu90/p/3066571.html
Copyright © 2011-2022 走看看