不知道为什么鼠标移动上之后opacity一直在1和1.1之间跳动

来源:2-2 JS透明度动画

myrtis

2015-09-19 22:55

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>shareicon</title>
</head>
<style type="text/css">
*{
margin:0px;padding:0px;font:14px "微软雅黑" normal;
}
#content{
position:absolute;
left:0px;
top:200px;
width:200px;  
height:200px;
background-color: #cc3399;
opacity: 0.4;
}
#content span{ 
position:absolute; 
left:200px;
top:37.5%;  
width:20px;
height:25%;
padding-top:10px;
background-color: #99cc00;
text-align: center;
}
}
</style>
<script type="text/javascript">
window.onload=function(){

var mBox=document.getElementById("content");
mBox.onmouseover=function(){
changeOpacity(1);
}
mBox.onmouseout=function(){
changeOpacity(0.4);
}

var timer=null;
var mOpacity=0.4;
function changeOpacity(itarget){

clearInterval(timer);
timer=setInterval(function(){
var speed=0;
if(mOpacity<itarget){
speed=0.1;
}else{
speed=-0.1;
}
if(mOpacity==itarget){
clearInterval(timer);
}else{
mOpacity+=speed;
mBox.style.opacity=mOpacity;

}
},300)
}

}
</script>
<body>
<div id="content">
<span>分享</span>
</div>
</body>
</html>


写回答 关注

2回答

  • myrtis
    2015-09-20 14:52:44

    通过控制台输出当前透明度和speed如下:

    0.4/0.1

    0.5/0.1

    0.6/0.1

    0.7/0.1

    0.7999999999999999/0.1

    0.8999999999999999/0.1

    0.9999999999999999/0.1

    1.0999999999999999/-0.1

    0.9999999999999999/0.1

    1.0999999999999999/-0.1

    0.9999999999999999/0.1

    1.0999999999999999/-0.1

    0.9999999999999999/0.1

    1.0999999999999999/-0.1

    0.9999999999999999/0.1

    1.0999999999999999/-0.1

    0.9999999999999999/0.1

    1.0999999999999999/-0.1

    0.9999999999999999/0.1

    1.0999999999999999/-0.1

    0.9999999999999999/-0.1

    0.8999999999999999/-0.1

    0.7999999999999999/-0.1

    0.7/-0.1

    0.6/-0.1

    0.5/-0.1



    貌似原因就出在这个莫名其妙出来的小数点上,无解..

    myrtis 回复纪奕滨

    嗯嗯,我看到后面也恍然大悟了,看来不能钻牛角尖啊,哈哈,不过那个程序还没 调试好,我准备调试好再跟你说的,查了下说是二进制和十进制转换的过程中会出现这种奇怪的现象,就像你说的是本生存在的BUG。

    2015-09-20 20:11:35

    共 2 条回复 >

  • 纪奕滨
    2015-09-19 23:44:15

    把这些参数,值全都乘以100,最后在mBox.style.opacity=mOpacity/100,这样设置的话就不会出现你说的那种情况,可以把时间调小一点,流畅一点。

    感觉这个应该是本生存在的bug,在没有改变其他东西的情况下,把你的源代码的定时器的时间调小之后,有时会出现这种现象有时不会,我也不懂怎么回事

    myrtis

    谢谢你哈!~我看老师写的filter:alpha(opacity=)是为了兼容IE低版本的浏览器,所以自己在代码里就把这一条删掉了,直接用opacity,结果出现这种bug,真的有点想不通。(定时器的时间间隔是故意调大一些这样可以在控制台看opacity的变化情况。)多物体透明度那节课我写的代码也出现了一个奇怪的现象,鼠标移开后一直闪,跟这个好像是同一个原因。

    2015-09-20 10:00:59

    共 1 条回复 >

JS动画效果

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

113925 学习 · 1443 问题

查看课程

相似问题