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

能帮我看下我的代码吗, 会出现小数不精确的现象,好着急求问

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

<title>js透明度动画</title>

<style type="text/css">

 body{

  margin:0px;

 }

 #div1{

  width:200px;

  height: 200px;

opacity: 0.3;

/* filter:alpha(opacity:30); */

background: red;

 }

</style>

<script type="text/javascript">

window.onload=function(){

var odiv=document.getElementById("div1");

odiv.onmouseover=function(){

startmove(1);

}

odiv.onmouseout=function(){

startmove(0.3);

}

}

var timer=null;

var alpha=0.3

function startmove(iTarget){

var odiv=document.getElementById("div1");

clearInterval(timer);

timer=setInterval(function(){

var speed=0;

if (alpha>iTarget) {

speed=-0.1;

}

else{

speed=0.1;

}

if(alpha==iTarget){

clearInterval(timer);

}

else{

alpha+=speed;

/*odiv.style.filter='alpha(opacity:'+alpha+')'*/

odiv.style.opacity=alpha;

}

},30)

}

</script>

</head>

<body>

<div id="div1"></div>

</body>

</html>



正在回答

2 回答

alpha+=speed;在这句话后面加这句话alpha = alpha.toFixed(1)*1;就可以了。

我解释一下这句话的意思toFixed(1)是取小数点后一位数字,而该方法返回的是一个字符串,那么在JS中字符串转换成数值有两种方式,一个是这种:字符串*1可以得到数字,前提字符串中是纯数字,第二种是用parseInt()的方法去转换,这里我比较懒,就用的第一种

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

小喜蛋 提问者

非常感谢!
2014-11-25 回复 有任何疑惑可以回复我~
#2

小喜蛋 提问者

您说的没错,我查了一下确实是小数计算会出现不精确的情况,网上确实也都是像您这样解答的,我最后是将1或者0.3变成100和30这样的整数,然后最后一行还是等于alpha/100,这样就避免了直接小数间运算的问题,谢谢你啦!
2014-11-25 回复 有任何疑惑可以回复我~
#3

偌颜宁 回复 小喜蛋 提问者

我比较懒,这样写省点事哈哈
2014-11-25 回复 有任何疑惑可以回复我~
#4

vis_焦虑症

感谢,但是这里parseInt()应该是parseFloat().
2016-04-21 回复 有任何疑惑可以回复我~
查看1条回复

这节还没有讲到小数精确的问题,此课程是一点一点的渗透。。可以看一下Math 对象方法


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

举报

0/150
提交
取消

能帮我看下我的代码吗, 会出现小数不精确的现象,好着急求问

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