飞天意大利面神兽
2016-07-01 15:03
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
#divs {
height: 260px;
width: 160px;
background-color: antiquewhite;
border-radius: 10px;
position: relative;
left: -160px;
}
#spans {
height: 100px;
width: 20px;
background-color: cornflowerblue;
border-radius: 5px;
position: absolute;
left: 160px;
margin-left: 1px;
box-shadow: 5px 2px 10px cornflowerblue;
border: 1px solid white;
}
#div_opacity {
height: 100px;
width: 100px;
background-color: brown;
border-radius: 100px;
box-shadow: 5px 2px 10px #A52A2A;
border: 1px solid white;
opacity: 0.1;
}
</style>
<script type="text/javascript">
window.onload = function() {
var div = document.getElementById("divs"),
span = document.getElementById("spans"),
div_o = document.getElementById("div_opacity");
var speed = 5;
div.onmouseover = function() {
star_1(speed, div, 0);
}
div.onmouseleave = function() {
star_1(speed, div, -160);
}
}
var timer = null;
function star_1(speed, div, itarget) {
clearInterval(timer);
timer = setInterval(function() {
if (div.offsetLeft == itarget) {
clearInterval(timer);
} else {
if (itarget == 0) {
speed = speed;
} else if (itarget<0) {
speed = -speed;
}
if (div.offsetLeft > -160 / 2) {
speed = speed * 3;
} else {
speed = speed;
}
div.style.left = div.offsetLeft + speed + "px";
//解决抖动
if (div.offsetLeft > 0) {
clearInterval(timer);
div.style.left = "0px";
}
if (div.offsetLeft < -160) {
clearInterval(timer);
div.style.left = "-160px";
}
}
}, 50)
}
</script>
</head>
<body>
<div id="divs"><span id="spans">分享</span></div>
<div id="div_opacity"></div>
</body>
</html>在代码的第68行,”speed=-speed“,当onmouseleave事件触发,div就会不停弹跳。
如果是改成”speed=-5“就不会出错,请问这是发生了啥?蟹蟹
问题出现当 触发onmouseleave 时,传入speed=5,而star_1 中的局部变量speed=5,由于itarget=-160<0,所以,speed=-speed,即此时局部变量speed=-5,而下一个50ms,由于itarget=-160<0不变,继续执行speed=-speed,即此时局部变量speed=5了,到此发现问题了,在定时器的作用下,speed会在5与-5之间来回变动,有没有达到任何 你设置的 停止条件,就出现了 无限制的抖动。而如果speed=-5,固定值 就不会出现 负负得正的情况了
speed=-speed这么写容易乱,你的目的大概是简单的变换一下符号,第一次进这个语句speed由5变为-5,下面*3之后变为-15,当第二次执行这个语句的时候speed就会由-15变为15,这样问题就出来了。建议你传参数的时候参数名和局部变量名不要相同。
JS动画效果
113910 学习 · 1502 问题
相似问题