帮忙看一看!

来源:4-2 获取样式

qq_我叫红领巾_2

2017-01-01 23:24

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<style type="text/css">
*{
    margin:0;
    padding:0;
}
ul,li{
    list-style: none;
}
ul li{
    width: 200px;
    height: 100px;
    background: yellow;
    margin-bottom: 20px;
    border: 10px solid #000;
    font-size:12px;
}
</style>
<script type="text/javascript">
window.onload=function(){
    var aLi=document.getElementsByTagName('li');
    for(var i=0;i<aLi.length;i++){
        aLi[i].timer=null; 
        aLi[i].onmouseover=function(){
            startMove(this,400);
        }
        aLi[i].onmouseout=function(){
            startMove(this,200);
        }
    }
}
function startMove(obj,iTarget){ 
    var aLi=document.getElementsByTagName('li');
    clearInterval(obj.timer);
    obj.timer=setInterval(function(){
        var speed=(iTarget-obj.offsetWidth)/10;
        speed=speed>0?Math.ceil(speed):Math.floor(speed);
        if(iTarget==obj.offsetWidth){
            clearInterval(obj.timer);
        }else{

            obj.style.width=parseInt(getStyle(obj,'width'))+speed+'px';
        }
    },30);
}
function getStyle(obj,attr){
    if(obj.currentStyle){
        return obj.currentStyle[attr];
    }else{
        return getComputedStyle(obj,false)[attr];
    }
}
</script>
<body>
    <ul>
        <li >a</li>
        <li>a</li>
        <li>a</li>
    </ul>
</body>
</html>

为什么本来200的元素 一旦执行  后面就变成180了  刚好少了border*2

而且最多变不到400  只能到380

写回答 关注

4回答

  • 慕虎9681967
    2017-02-19 22:32:44

     var speed=(iTarget-obj.offsetWidth)/10;和 if(iTarget==obj.offsetWidth)中的 obj.offsetWidth 也要改成parseInt(getStyle(obj,'width'))  

    加了边框 obj.offsetWidth的值肯定会增加border*2

  • 慕雪8696162
    2017-01-16 17:48:23

     var speed=(iTarget-obj.offsetWidth)/10;

    这个是不是除以8啊

  • qq_我叫红领巾_2
    2017-01-01 23:31:02

    还斗胆请教一下改进方法

  • qq_我叫红领巾_2
    2017-01-01 23:26:29

    帮忙分析一下!!!大神  这是一个多物体缓冲运动的例子

JS动画效果

通过本课程JS动画的学习,从简单动画开始,逐步深入各种动画框架封装

113923 学习 · 1443 问题

查看课程

相似问题