zoukankan      html  css  js  c++  java
  • dom 兼容性问题 2 offset

    image

    offsetParent :  离当前节点最近的具有定位属性的祖先节点。
    
      如果所有祖先节点都没有定位属性:
        对于一个有定位属性的元素:
          ie6、7 : offsetParent 是 html 节点
          其它浏览器: offsetParent 是 body 节点
          
        对于一个没有定位的元素:
          ie6/7 : 最近的一个触发了 haslayout 属性的祖先节点,如果所有祖先节点都没有触发 haslayout ,默认为 body 节点。
          其它浏览器: body。
          
        如果当前节点有 display:none; 属性 在 ie11 以上及标准浏览器,offsetParent为null,ie10以下浏览器不受影响。
    
    
      回流 、重绘
    offsetLeft : 当前节点左边到 offsetParent 左边的距离。
    
    offsetTop : 当前节点上边到 offsetParent 上边的距离。
    
    
      注意: 
        1,如果body和html有边框和外边距, offsetLeft 和 offsetTop 在所有浏览器下的取值都会不一样。
        
        2,在ie6、7浏览器下 ,offsetLeft和offsetTop会计算 offsetParent 的边框值,其它浏览器不会计算边框值。
        
        3,如果当前节点设置了 display: none; 属性,offsetLeft 和 offsetLeft 的值都为0.(ie6/7下为 -1);
    
    
      温馨提醒:没有 offsetRight 和  offsetBottom 属性!
    -------------------------------------------------------------------------------
    ff浏览器bug
    #box {  1200px; height: 200px; background: #ccc; margin: 50px auto 0; position: relative; border: 4px solid #333; overflow: hidden; }
    #div1 {  200px; height: 200px; background: red; position: absolute; left: 2px; top: 0; }
    </style>
    </head>
    
    <body>
    
    <div id="box">
      <div id="div1"></div>
    </div>
    
    
    </body>
    </html>
    
    <script>
    
    var oDiv = document.getElementById('div1');
    
    
    //alert( oDiv.offsetLeft );
    
    setInterval(function(){
    
      oDiv.style.left = oDiv.offsetLeft + 2 + 'px';
      
    },30);
    
    /*
    
    offsetLeft : 
      在其它浏览器下,就是节点自身的left值。
      
      在firefox下 : 
        offsetLeft = 节点自身的 left 值 - 边框值
    
    
    div运动轨迹:
    
    边框为0
        left    border      offsetLeft    speed     target  
         0          0               0                 2            2
         2          0               2                 2            4
         4          0               4                 2            6
         6          0               6                 2            8
    
    边框与speed相等
        left    border      offsetLeft    speed     target  
         0          2               -2                 2            0
         0          2               -2                 2            0
         0          2               -2                 2            0
         0          2               -2                 2            0
         0          2               -2                 2            0
    
    边框大于speed
        left    border      offsetLeft    speed     target  
         0          4               -4                 2           -2
         -2        4               -6                 2           -4
         -4        4               -8                 2           -6
    -------------------------------------------------------------------------------
    width / height / margin / padding / border 
    
    offsetWidth : width + padding + border
    clientWidth : width + padding
    
    offsetHeight : height + padding + border
    clientHeight : height + padding
    
    以上四个属性指的是元素在页面中所占空间大小,如果元素没有占页面空间,四个属性的值都为 0 。
    -------------------------------------------------------------------------------
    操作属性的前两种方式:  .   和  ['']
    
    第三种方式:
    
      获取属性:getAttribute('');
      设置属性:setAttribute('','');
      删除属性:removeAttribute('')
    
      兼容问题:
        1,获取以关键字或保留字作为名称的属性时,有兼容问题。
        2,获取第二层以上属性时,只有ie浏览器支持。
    
      好处:
        1,可以获取行间的自定义属性。
        2,可以获取到 url、src、href 等的属性值,而不是路径地址。
          (在ie6/7/8下需要设置第二个参数2,告诉浏览器获取的是属性值而不是路径)
      
    oDiv.dataset.bbs = 'bbs.miaov.com';
    
    
    
    html5 里对自定义属性进行了初步规范,但是要求所有自定义属性都必须以 data- 作为属性名称的开头。
  • 相关阅读:
    Swagger接入
    Elasticsearch5.0.1索引压测结果
    Elasticsearch5.0 BreakChange摘要
    Elasticsearch1.7到2.3升级实践总结
    Java动态代理全面分析
    Spring之AntPathMatcher
    Lock的实现之ReentrantLock详解
    Elasticsearch之client源码简要分析
    elasticserach 索引删除 源码分析
    httpClient4.5.2工具类总结
  • 原文地址:https://www.cnblogs.com/aix1314/p/4549000.html
Copyright © 2011-2022 走看看