【运动】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>
上述是用减法的形式让速度降下来,但是使用减法会让速度变为负数,因此元素先往前运动,运动一段距离又往回运动。使用乘法就不会有这样的问题了. 使用乘法,乘以一个小数或除以一个大于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>
总结:
1、让元素运动时,要先将元素进行定位。否则元素是不能运动的
2、使用定时器时要注意写法
3、offsetLeft的值是计算机计算的值,没有单位,我们要加上单位。
4、摩擦运动,先给元素设定一个原速度,然后再逐渐降低。
5、点击按钮时,第一步是取消定时器