原生JS实现摩擦运动效果

【运动】JS中的摩擦运动

原生JS实现各种动画效果。

摩擦运动就是速度越来越慢,最后停止的运动形式。元素有个初始速度,在运动的过程中,速度越来越慢,最后停止。相当于有摩擦力一样,所以被称为摩擦运动。 先要声明一个初始速度,然后通过减法或者乘以小数或者除以一个大于1的数,逐渐让速度降下来。 实现过程:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>摩擦运动</title>
<style>
	#div{width: 100px;height: 100px;background: red; position: absolute; left: 0px; top: 30px;}
</style>
<script type="text/javascript">
window.onload=function(){

	var oBtn=document.getElementById('btn');
	var oDiv=document.getElementById('div');
	var iTime=null;
	var iSpeed=50;

	oBtn.onclick=function(){

		clearInterval(iTime);

		iTime=setInterval(function(){
			
			//用减法,先往前运动再往回运动。因为之后值是负值
			iSpeed -= 2;
			
			if (oDiv.offsetLeft == 500) {
				clearInterval(iTime);
			} else {
				oDiv.style.left = oDiv.offsetLeft + iSpeed + 'px';
			}

		},30);
	}
}
</script>
</head>
<body>
	<input type="button" id="btn" value="运动"/>
	<div id="div"></div>
</body>
</html>

images

在线操作

上述是用减法的形式让速度降下来,但是使用减法会让速度变为负数,因此元素先往前运动,运动一段距离又往回运动。使用乘法就不会有这样的问题了. 使用乘法,乘以一个小数或除以一个大于1的数。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>摩擦运动</title>
<style>
	#div{width: 100px;height: 100px;background: red; position: absolute; left: 0px; top: 30px;}
</style>
<script type="text/javascript">
window.onload=function(){

	var oBtn=document.getElementById('btn');
	var oDiv=document.getElementById('div');
	var iTime=null;
	var iSpeed=50;

	oBtn.onclick=function(){

		clearInterval(iTime);

		iTime=setInterval(function(){

			//用乘法没有负值,不用担心往回运动
			iSpeed *= 0.9;
			
			if (oDiv.offsetLeft == 500) {
				clearInterval(iTime);
			} else {
				oDiv.style.left = oDiv.offsetLeft + iSpeed + 'px';
			}

		},30);
	}
}
</script>
</head>
<body>
	<input type="button" id="btn" value="运动"/>
	<div id="div"></div>
</body>
</html>

images

在线操作

总结:

1、让元素运动时,要先将元素进行定位。否则元素是不能运动的

2、使用定时器时要注意写法

3、offsetLeft的值是计算机计算的值,没有单位,我们要加上单位。

4、摩擦运动,先给元素设定一个原速度,然后再逐渐降低。

5、点击按钮时,第一步是取消定时器


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值