您现在的位置:首页 >> 前端 >> 内容

offsetWidth的缺点

时间:2017/1/4 9:29:17 点击:

  核心提示:HTML:!DOCTYPE htmlhtml head meta charset=UTF-8 / title/title/headbody input type=text name=txt1 = id...

HTML:

<!DOCTYPE html>
<html>
 <head> 
  <meta charset="UTF-8" /> 
  <title></title> 
 </head> 
 <body> 
  <input type="text" name="txt1" "="" id="txt1" value="" /> 
  <p id="p1">
    变高 
  </p> 
  <p id="p2">
    变宽 
  </p> 
  <p id="p3">
    透明度 
  </p> 
  <p id="p4">
    字体大小 
  </p> 
  <p id="p5">
    边框 
  </p>  
 </body>
</html>

CSS

* {
	margin: 0;
}

p {
	width: 100px;
	height: 100px;
	background-color: yellowgreen;
	border: 2px solid red;
/*padding:5px;*/
	float: left;
	margin: 10px;
/*position: absolute;*/
/*left:20px;
top:30px;*/
}

#p3 {
/*IE9-11、火狐和谷歌用opacity*/
	opacity: 0.5;
/*IE用6-8的是filter*/
	filter: alpha(opacity:50);
}

JavaScript:

window.onload = function() {
    var oDiv1 = document.getElementById('p1');
    var oDiv2 = document.getElementById('p2');
    var oDiv3 = document.getElementById('p3');
    var oDiv4 = document.getElementById('p4');
    var oDiv5 = document.getElementById('p5');
    var oTxt1 = document.getElementById('txt1');
    //offsetWidth和offsetHeight,获取的都是对象的盒模型(宽、border、padding)
    //offsetWidth=width+border+padding 
    //offsetHeight=height+border+padding
    //所以我们如果用obj.style.width,但是它只能获取行间的样式,不能获取非行间样式(即样式表里的样式)
    //getStyle完全不考虑border、padding的大小
    function getStyle(obj, name) {
        if (obj.currentStyle) {
            return obj.currentStyle[name]; // IE用
        } else {
            return getComputedStyle(obj, false)[name]; // 火狐和谷歌用
        }
    }
    oDiv1.onmouseover = function() {
        startMove(oDiv1, 'height', 200);
    }
    oDiv1.onmouseout = function() {
        startMove(oDiv1, 'height', 100);
    }
    oDiv2.onmouseover = function() {
        startMove(oDiv2, 'width', 200);
    }
    oDiv2.onmouseout = function() {
        startMove(oDiv2, 'width', 100);
    }
    oDiv3.onmouseover = function() {
        startMove(oDiv3, 'opacity', 100);
    }
    oDiv3.onmouseout = function() {
        startMove(oDiv3, 'opacity', 50);
    }
    oDiv4.onmouseover = function() {
        startMove(oDiv4, 'fontSize', 40);
    }
    oDiv4.onmouseout = function() {
        startMove(oDiv4, 'fontSize', 18);
    }
    oDiv5.onmouseover = function() {
        startMove(oDiv5, 'borderWidth', 20);
    }
    oDiv5.onmouseout = function() {
        startMove(oDiv5, 'borderWidth', 1);
    }
    function startMove(obj, attr, iTarget) {
        clearInterval(obj.timer);
        obj.timer = setInterval(function() {
            var cur = 0;
            var speed = 0;
            if (attr == 'opacity') {
                cur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
                oTxt1.value = cur;
            } else {
                cur = parseInt(getStyle(obj, attr));
            }
            speed = (iTarget - cur) / 6;
            speed > 0 ? speed = Math.ceil(speed) : speed = Math.floor(speed);
            if (cur == iTarget) {
                clearInterval(obj.timer);
            } else {
                if (attr == 'opacity') {
                    obj.style[attr] = (cur + speed) / 100;
                    obj.style.filter = 'alpha:(opacity:' + (cur + speed) / 100 + ')';
                } else {
                    obj.style[attr] = (cur + speed) + 'px';
                }
            }
        },
        30);
    }
}

Tags:OF FF FS SE 
作者:网络 来源:fuxiaomi20