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

为什么我的透明度加到一不停止,我写了清楚定时器啊

<script type="text/javascript">

window.onload=function(){

var x1=document.getElementById("x1");

x1.onmouseover=bian;

}

var timer=null;

function bian(){

var x1=document.getElementById("x1");

var opacity=0.3;

clearInterval(timer);

timer=setInterval(function(){

if (opacity ==1) {

clearInterval(timer);

}

else{

           opacity=opacity+0.1;

x1.style.opacity=opacity;

}

},30);

}

</script>


提问者:慕粉3365042 2016-06-22 11:30

个回答

  • 静语默言
    2016-06-22 14:39:00
    已采纳

    js中的数字都是用浮点数表示的

    你可以看一下每次opacity+0.1得到的值

    http://img.mukewang.com/576a30bf000152d207980412.jpg

    你也可以看一下这篇文章https://segmentfault.com/q/1010000000137297了解一下浮点数的运算


    关于你的问题有两种解法

    第一种解法

    -----用toFixed将opacity四舍五入为仅有一位小数的数字------

    <script type="text/javascript">

    window.onload = function() {

    var x1 = document.getElementById("x1");

    x1.onmouseover = function(){

    bian();

    }

    }

    var timer = null;

    var opacity=0.3;

    function bian() {

    clearInterval(timer);

    var x1 = document.getElementById("x1");

    timer = setInterval(function() {

    if (opacity.toFixed(1) == 1) {

    clearInterval(timer);

    } else {

    opacity+=0.1;

    x1.style.opacity=opacity.toFixed(1)

    }

    }, 30);

    }

    </script>

    第二种解法

    ------将opacity转化为整数-------

    <script type="text/javascript">

    window.onload = function() {

    var x1 = document.getElementById("x1");

    x1.onmouseover = function(){

    bian();

    }

    }

    var timer = null;

    var opacity=30;

    function bian() {

    clearInterval(timer);

    var x1 = document.getElementById("x1");

    timer = setInterval(function() {

    if (opacity== 100) {

    clearInterval(timer);

    } else {

    opacity+=10;

    x1.style.opacity=opacity/100

    }

    }, 30);

    }

    </script>


  • 000xiaozhi
    2016-06-22 14:39:32

    你把var opacity=0.3;提到bian()外面试一试