为了账号安全,请及时绑定邮箱和手机立即绑定

帮忙看一看!

<!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 回答

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

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

0 回复 有任何疑惑可以回复我~

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

这个是不是除以8啊

0 回复 有任何疑惑可以回复我~

还斗胆请教一下改进方法

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JS动画效果
  • 参与学习       113925    人
  • 解答问题       1443    个

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

进入课程

帮忙看一看!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信