zoukankan      html  css  js  c++  java
  • offset--BUG

    offsetWidth所获取的宽度并不是div的实际宽度,它包括div的width、border等。

    在JS函数中,可以通过obj.style.width来获取div的实际宽度,但是这种方式style只能获取行间样式,所以需要一个函数调用css中样式,代码如下:

            function getStyle(obj, name) {
    if (obj.currentStyle) {
    return obj.currentStyle[name];
    }
    else {
    return getComputedStyle(obj, false)[name];
    }
    }

    setInterval(function () {
    var oDiv = document.getElementById('div1');

    oDiv.style.width = parseInt(getStyle(oDiv, 'width')) - 1 + 'px';
    },
    30);


    现在我们来用一个案例来掩饰去掉offset如何实现

    代码:
    
    
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <style>
    div {
    200px;
    height: 200px;
    margin: 20px;
    float: left;
    background: yellow;
    border: 10px solid black;
    font-size: 14px;
    }
    </style>
    <script>
    window.onload = function () {
    var oDiv1 = document.getElementById('div1');

    oDiv1.onmouseover = function () {
    startMove(this, 'height', 400);
    };
    oDiv1.onmouseout = function () {
    startMove(this, 'height', 200);
    };

    var oDiv2 = document.getElementById('div2');

    oDiv2.onmouseover = function () {
    startMove(this, 'width', 400);
    };
    oDiv2.onmouseout = function () {
    startMove(this, 'width', 200);
    };

    var oDiv3 = document.getElementById('div3');

    oDiv3.onmouseover = function () {
    startMove(this, 'fontSize', 50);
    };
    oDiv3.onmouseout = function () {
    startMove(this, 'fontSize', 14);
    };

    var oDiv4 = document.getElementById('div4');

    oDiv4.onmouseover = function () {
    startMove(this, 'borderWidth', 100);
    };
    oDiv4.onmouseout = function () {
    startMove(this, 'borderWidth', 10);
    };
    };

    function getStyle(obj, name) {
    if (obj.currentStyle) {
    return obj.currentStyle[name];
    }
    else {
    return getComputedStyle(obj, false)[name];
    }
    }

    function startMove(obj, attr, iTarget) {
    clearInterval(obj.timer);
    obj.timer = setInterval(function () {
    var cur = parseInt(getStyle(obj, attr));

    var speed = (iTarget - cur) / 6;
    speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);

    if (cur == iTarget) {
    clearInterval(obj.timer);
    }
    else {
    obj.style[attr] = cur + speed + 'px';
    }
    }, 30);
    }
    </script>
    </head>

    <body>
    <div id="div1">变高</div>
    <div id="div2">变宽</div>
    <div id="div3">字体变大</div>
    <div id="div4">边框变粗</div>
    </body>
    </
    html>
     

    运行结果:
     



  • 相关阅读:
    C++中的空类默认产生哪些类成员函数
    Berkeley Socket API – Creating a TCP/IP client in C
    覆盖父类以及using指令
    strcpy/memcpy/memmove的实现
    [C++对象模型][1]目录与参考
    用setsockopt()来控制recv()与send()的超时
    异常安全的赋值运算符重载函数
    伤不起的指针
    DP01背包
    证明一个数能被3整除,当且仅当它的各位数的和能被3整除
  • 原文地址:https://www.cnblogs.com/theWayToAce/p/5265971.html
Copyright © 2011-2022 走看看