zoukankan      html  css  js  c++  java
  • offsetWidth相关js属性

    js你真的了解offsetWidth吗

     

    offsetWidth是什么?

    答:它可以获取物体宽度的数值

    那么就只是这样吗!

    html部分

    <div id="div1"></div>
     
    <style>
    #div1 { 200px; height:200px; border:1px solid red; padding:2px; margin:2px; background:green;}
    </style>

    请看上面的html,你知道div1的offsetWidth是多少吗?

    是不是200啊

    哈哈,错了

    div1的offsetWidth是206

    为什么?

    答:offsetWidth实际获取的是盒模型(width+border + padding)

    200+2+4=206

    扩展:那么offsetLeft和offsetTop呢

    答: offsetLeft = left + marginLeft

         offsetTop = top +marginTop

    示例:让div变窄

    现象:onmouseover时,div变窄

    原理:

    oDiv.style.width = oDiv.offsetWidth - 1 + "px";  

    js部分

    复制代码
    <script>
    window.onload = function(){
        var oDiv = document.getElementById("div1");
        
        oDiv.onmouseover = function(){
            document.title = oDiv.offsetWidth;
            setInterval(function(){
                oDiv.style.width = oDiv.offsetWidth - 1 + "px";            
            },30);
        }
        
    }
    </script>
    复制代码

    运行上面示例后,你会发现一个奇怪的现象:

    div在变宽

    我们不是要div变窄的吗!它怎么越来越宽了呢?

    那么这个问题,怎么解决呢?

    解决方式:

    用oDiv.style.width = parseInt(oDiv.style.width) - 1 + "px";

    但是发现,onmouseover时,div它不动呢?

    原因:oDiv.style.width,它只能获取行间的样式

    所以需要调整成

    <div id="div1" style="200px;"></div>

    其实,我们还可以写成一个通用的方法,可以获取任意一个样式

    方法:function getStyle(obj,name)

    注意:此时样式可以不是行间样式,也能获取

    知识点:

    IE写法:currentStyle

    非IE写法: getComputedStyle

    完整代码,如下

    1
    2
    3
    4
    5
    <div id="div1"></div>
     
    <style>
    #div1 { 200px; height:200px; border:1px solid red; padding:2px; margin:2px; background:green;}
    </style>

      

    复制代码
    <script>
    window.onload = function(){
        var oDiv = document.getElementById("div1");
        
        oDiv.onmouseover = function(){
            document.title = oDiv.offsetWidth;
            setInterval(function(){
                //oDiv.style.width = oDiv.offsetWidth - 1 + "px";
                //oDiv.style.width = parseInt(oDiv.style.width) - 1 + "px";    
                oDiv.style.width = parseInt(getStyle(oDiv,"width"))- 1 + "px";    
            },30);
        }
        
    }
    
    //获取行间任意样式
    function getStyle(obj,name){    
        if(obj.currentStyle){    //IE
            return obj.currentStyle[name];
        } else {
            return getComputedStyle(obj,false)[name];    //非IE
        }
        
        
    }
    
    
    </script>
    复制代码
  • 相关阅读:
    敏捷结果30天之第十七天:找出高效时间,并利用它来处理重要事情
    每天一个linux命令(13):less 命令
    敏捷结果30天之第十九天:你在为谁做事
    每天一个linux命令(6):rmdir 命令
    每天一个linux命令(11):nl命令
    代码重构学习笔记三:重构72招式
    每天一个linux命令(4):mkdir命令
    敏捷结果30天之第二十二天:设计你的一天
    敏捷结果30天之第二十一天:正面失败,吸取教训,改善结果
    每天一个linux命令(8):cp 命令
  • 原文地址:https://www.cnblogs.com/wangweizhang/p/7544563.html
Copyright © 2011-2022 走看看