加速效果:增加重力值,随着定时器的执行,重力增大
回弹效果:当抵达目标位置时,将速度改为负值
回弹减速:将速度改变为负值的同时,乘以一个小数减少其速度
效果图:
html样式实现:
<style type="text/css">
.cont{
width: 1000px;
height: 600px;
background: #eee;
margin: 20px auto;
position: relative;
}
.box{width: 100px;height: 100px;background: red;position: absolute;left: 0;border-radius: 50%;}
</style>
css标签创建:
<div class="cont">
<div class="box"></div>
</div>
js代码:
<script type="text/javascript">
//获取节点
var obox = document.querySelector(".box");
var ocont = document.querySelector(".cont");
var speed = 10; //设置步长
var target = ocont.offsetHeight - obox.offsetHeight; //设置目标
var g = 2; //设置重力
var timer; //设置计时器
document.onclick = function(){
// 点击之前先清除,上一次
clearInterval(timer)
timer = setInterval(()=>{
// 重力加速
speed += g;
// 判断是否到重点
if(speed >= target-obox.offsetTop){
// 强行确认到终点
obox.style.top = target + "px";
// 回弹,回弹损耗
speed = -parseInt(speed*0.8);
// console.log(speed)
// 当回弹不足1的时候,意味着不再弹起了,就可以清除计时器了
if(Math.abs(speed) < 1){
clearInterval(timer)
}
}else{
// 生效位置
obox.style.top = obox.offsetTop + speed + "px";
}
},30) //频率
}
</script>