问答详情
源自:2-2 JS透明度动画

好奇怪啊,是我的浏览器兼容问题吗?IE9以上了,用的opacity属性,JS代码如下,如果iTarget输入为1,就只会到0.7就不动了


var timer = null

var alpha = 1
function starttou(iTarget){
   var oDiv = document.getElementById('oDiv')
   console.log(oDiv.style.opacity)
   clearInterval(timer)
   var speed = null;
   if(iTarget >alpha){
       speed = 0.1
   } else if(iTarget < alpha){
       speed = -0.1
   }
   timer = setInterval(function(){
       if(iTarget ==alpha) {
           clearInterval(timer)
       }
       else{
          alpha = alpha + speed
         alpha = Math.floor(alpha*10)/10   //不知道为什么,输出的alpha不是整数,这里把它取整了
          oDiv.style.opacity =alpha

       }

   },30)

}

提问者:慕粉3428169 2016-08-15 16:21

个回答

  • 湛瞳
    2016-08-26 09:40:38

    解决办法

       var oDiv = document.getElementById('div1');
       clearInterval(timer);
       var speed = null;
       if(opa >alpha){
           speed = 0.1
       } else if(opa < alpha){
           speed = -0.1
       }
       timer = setInterval(function(){
           if(opa ==alpha) {
               clearInterval(timer);
           }
           else{
              alpha = alpha + speed;
              alpha = opa > alpha ? Math.ceil(alpha * 10) / 10 : Math.floor(alpha * 10) / 10;
              oDiv.style.opacity = alpha;
          }
       },30)

    其中Math.ceil()是向上取整。

    仅供参考

  • 湛瞳
    2016-08-25 13:18:54

    http://img.mukewang.com/57be693d0001955407710404.jpg

    你看alpha值,每次乘以10之后是7.999999999999999……,所以取整之后得到的都是7,取整操作是舍弃小数部分,所以一直在0.7处循环。

  • Benjamin_Smith
    2016-08-15 18:08:07

    Math.floor(alpha*10)/10

    一个数乘以10,然后向下去整,然后再除以10,没懂

    0.31*10=3.1

    取整3

    3/10=0.3

    3.1*10=31/10=3.1