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

为什么透明明值不为整数1而是0.83?我找不到原因

<script type="text/javascript">

window.onload = function(){

var content = document.getElementsByClassName('content')[0];

var A = document.getElementsByTagName('a');

for(var i = 0; i<A.length; i++){

A[i].onmouseenter = function(){

var _this = this.getElementsByTagName('i')[0];

move(_this,{top:-25,opacity:0},function(){

_this.style.top=35 + 'px';

move(_this,{top:20,opacity:100},function(){

//_this.style.opacity = 1;

});

});

}

}

}

function move(obj,json,fu){

clearInterval(obj.time);

obj.time = setInterval(function(){

for(var attr in json){

var flag = true;

var icur = 0;

if(attr == 'opacity'){

icur = Math.round(parseFloat(getStyle(obj,attr))*100);

}else{

icur = parseInt(getStyle(obj,attr));

}

var speed = 0;

speed = (json[attr] - icur)/8;

speed=speed>0?Math.ceil(speed):Math.floor(speed);

if(icur != json[attr]){

flag = false;

}

if(attr == 'opacity'){

obj.style[attr] =(icur+speed)/100;

obj.style.filter='alpha(opacity:'+(icur+speed)+')';

}else{

obj.style[attr] = icur+speed + 'px';

}

if(flag){

clearInterval(obj.time);

if(fu){

fu();

}

}

}

},10);

}

function getStyle(obj,attr){

   if(obj.currentStyle){

    return obj.currentStyle[attr];

   }else{

    return getComputedStyle(obj,false)[attr];

   }

}

</script>


正在回答

3 回答

终于找到原因了,可是想不太懂为什么?

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

我也是这个问题,什么原因啊

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

if(flag){

clearInterval(obj.time);

if(fu){

fu();

}

要放到for(var attr in json){}之外。自己能找到原因真是太好了

2 回复 有任何疑惑可以回复我~
#1

背着灯笼

嗯,对。两个属性值的变化不是同时进行的,实际上是两个属性每隔10ms交替变化的,如果一个属性先达到设定的值,flag 就会变为 ture, timer被清空。然后这其实还有个 bug,其实该把 flag 放在 for循环外,不然设置两个相差较大的属性时,还是会停顿。
2016-05-24 回复 有任何疑惑可以回复我~
#2

情积雪 提问者 回复 背着灯笼

我只是知道大概原因,没有你知道的多
2016-05-24 回复 有任何疑惑可以回复我~
#3

情积雪 提问者 回复 背着灯笼

迷迷糊糊的,哈哈
2016-05-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么透明明值不为整数1而是0.83?我找不到原因

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