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

关于Math.ceil和Math.floor

<script>
window.onload = function(){
	var oDIV = document.getElementById('move');
	oDIV.onmouseover = function(){
			move(0);
			}
	oDIV.onmouseout = function(){
			move(-200);
			}
    }
var si=null
function move(iTarget){   
	clearInterval(si);
	var oDIV = document.getElementById('move');
	si=setInterval(function(){
		var speed=0.6;//当speed小于或等于0.5 div只移动一次
		//speed=speed>0?Math.ceil(speed):Math.floor(speed); 		
		if(oDIV.offsetLeft == iTarget){
			clearInterval(si);
				}else{
		oDIV.style.left = oDIV.offsetLeft+speed+"px";
				}
		},30);
	
	}
</script>

为什么当speed小于或等于0.5 div只移动一次,求老师或者大神解答。是因为left属性四舍五入了吗?

正在回答

2 回答

offsetLeft每一次获取的值都会出现四舍五入.

比如你设置为0.52,

lDiv.style.left =lDiv.offsetLeft+0.52+'px';变为:

-199.48=-200+0.52

-199.48四舍五入变为-199.[注意负数的四舍五入]

-198.48=-199+0.52

...

所以最终结果为-0.48px.

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

星星3394050

如果你设置小于0.5(等于0.5也可以移动多次),lDiv.offsetLeft获取的值都是-200.
2016-07-19 回复 有任何疑惑可以回复我~

Math.ceil是向上取整

Math.floor是向下取整

你注释的那一句执行的话,,

若是大于0,执行Math.ceil也就是speed 的值 = 1 ; 否则为0

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

Hanz520 提问者

我不明白的就是当speed小于或等于0.5时,setInterval为什么只执行一次
2015-06-12 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于Math.ceil和Math.floor

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