javascript中 鼠标移入实现div变小,可div变小过程中鼠标已经不在div上

常见的效果是鼠标移入某个对象上放大,移出时回到原来大小。这个demo希望实现的结果是移入时缩小,移出时放大。但这样就总是会出现闪现的效果。鼠标移出时变大,但变大却使得原来位置的鼠标变成了移入。所以当鼠标快速重复移入移出操作时,看到的效果会很奇怪。拜托高手帮我看一下怎样解决这个问题,非常感谢!

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
    #div1{width: 300px;height: 300px;background-color: red;}
</style>
</head>
<body>
    <div id="div1"></div>
</body>
<script>
var div1=document.getElementById('div1');
var timer=null;
div1.onmouseover=function(){
    move(this,{width:100,height:100},10);
}
div1.onmouseout=function(){
    move(this,{width:300,height:300},10);
}
/*--------------------单一物体多属性匀速运动框架-------------------------*/
function move(obj,json,speed){
    clearInterval(timer);
    changeValue=0;
    timer=setInterval(function(){
        var btn=true;
        for(var attr in json){
            speed=speed<0?-speed:speed;
            changeValue=parseInt(getStyle(obj,attr));
            speed=changeValue>json[attr]?-speed:speed;//判断速度正负。
            if((speed<0&&changeValue+speed>json[attr])||(speed>0&&changeValue+speed<json[attr])){
                obj.style[attr]=changeValue+speed+'px';
            }
            else{
                obj.style[attr]=json[attr]+'px';
            }            
        }
        if(btn){
            clearInterval(obj.timer);
        }
    },30);
}
/*--------------------获取样式的函数-------------------------*/
function getStyle(obj,attr)
{
    return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj,null )[attr];
}
</script> 
</html>
阅读 3.1k
1 个回答

用hover和transtion做不好吗? 当然用js也行,那么我们来想想如果固定视口区域。

  1. 外面包一层大的,事件放在他的上面,里面的这个只负责做动画。这样来看,他的区域变化和外面的关系不大。
  2. 既然你说了疯狂的触发事件不好,那么可以考虑给他去除抖动,去抖处理一下就好了嘛。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题