首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >原生JS多属性匀速正负判断?

原生JS多属性匀速正负判断?

提问于 2017-11-23 11:13:48
回答 1关注 0查看 538

我需要实现的功能是

1.当鼠标移入div1时,宽和高匀速变化到目标点200.

2.当鼠标移出div1时,高和高匀速变化到目标点100.

3.调用函数时speed传参只传正数,在move运动函数内部进行speed的正负判断。

故障:下面的代码目前的效果是鼠标移入时正常,移出时没有匀速变化的效果。

为了检测故障,我加了一条测试用的代码alert(startValue+':'+json[attr]+':'+speed);,测出的结果是,当div1从200运动到100时,弹出的2次结果中的speed第一次是负的,第二次居然是正的。虽然知道这是导致bug的原因,但我不知道为什么会在鼠标移出时,速度会弹出负的。

代码语言:txt
复制
//下面是完整代码。请哪位高手帮忙看一下,感激不尽。
代码语言:txt
复制
代码语言:txt
复制
<!DOCTYPE html>
代码语言:txt
复制
<html>
代码语言:txt
复制
<head>
代码语言:txt
复制
<meta charset="utf-8" />
代码语言:txt
复制
<title></title>
代码语言:txt
复制
<style>
代码语言:txt
复制
    #div1{width: 100px;height: 100px;background-color: red;}
代码语言:txt
复制
</style>
代码语言:txt
复制
</head>
代码语言:txt
复制
<body>
代码语言:txt
复制
    <div id="div1"></div>
代码语言:txt
复制
</body>
代码语言:txt
复制
<script>
代码语言:txt
复制
var div1=document.getElementById('div1');
代码语言:txt
复制
var timer=null;
代码语言:txt
复制
代码语言:txt
复制
div1.onmouseover=function(){
代码语言:txt
复制
    move({width:200,height:200},10);
代码语言:txt
复制
}
代码语言:txt
复制
div1.onmouseout=function(){
代码语言:txt
复制
    move({width:100,height:100},10);
代码语言:txt
复制
}
代码语言:txt
复制
/*--------------------运动框架-------------------------*/
代码语言:txt
复制
代码语言:txt
复制
function move(json,speed){
代码语言:txt
复制
    clearInterval(timer);
代码语言:txt
复制
    startValue=0;
代码语言:txt
复制
    for(var attr in json){
代码语言:txt
复制
        startValue=parseInt(getStyle(div1,attr));
代码语言:txt
复制
        speed=startValue>json[attr]?-speed:speed;//判断速度正负。
代码语言:txt
复制
        alert(startValue+':'+json[attr]+':'+speed);//测试用。
代码语言:txt
复制
    }
代码语言:txt
复制
    timer=setInterval(function(){
代码语言:txt
复制
        for(var attr in json){
代码语言:txt
复制
            changeValue=0;
代码语言:txt
复制
            changeValue=parseInt(getStyle(div1,attr));
代码语言:txt
复制
            if((speed<0&&changeValue+speed<=json[attr])||(speed>0&&changeValue+speed>=json[attr])){
代码语言:txt
复制
                div1.style[attr]=json[attr]+'px';
代码语言:txt
复制
                clearInterval(timer);
代码语言:txt
复制
            }
代码语言:txt
复制
            else{
代码语言:txt
复制
                div1.style[attr]=changeValue+speed+'px';
代码语言:txt
复制
            }            
代码语言:txt
复制
        }
代码语言:txt
复制
    },30);
代码语言:txt
复制
}
代码语言:txt
复制
/*--------------------获取样式的函数-------------------------*/
代码语言:txt
复制
function getStyle(obj,attr)
代码语言:txt
复制
{
代码语言:txt
复制
    return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj,null )[attr];
代码语言:txt
复制
}
代码语言:txt
复制
</script> 
代码语言:txt
复制
</html>

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档