本文主要是介绍重力运动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
重力运动
重力加速运动
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>重力运动</title><style type="text/css">.box {width: 900px;height: 600px;border: solid 1px black;margin: 50px auto;position: relative;}.a {width: 100px;height: 100px;border-radius: 50%;background: red;position: absolute;left: 0;top: 0;}</style>
</head><body><div class="box"><div class="a"></div></div>
</body>
<script type="text/javascript">// 元素的获取var oa = document.querySelector(".a");var t;var speed = 2;var target = 500;document.onclick = function () {// 开始之前先清除定时器clearInterval(t);t = setInterval(() => {//重力运动,就是加速,每次计时器执行都将步长增加,实现加速speed++;// 判断每一步还够不够一步 ;判断是否到终点,没有到终点继续往下走// 目标 - 当前 < 步长if (target - oa.offsetTop < speed) {clearInterval(t);// 最后一步不够一步了,强行拉回来让它到目标oa.style.top = target + "px";// 没有到终点继续往下走} else {oa.style.top = oa.offsetTop + speed + "px";}console.log(1)}, 30)}</script></html>
重力回弹运动
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><style type="text/css">.box {width: 900px;height: 600px;border: solid 1px black;margin: 50px auto;position: relative;}.a {width: 100px;height: 100px;border-radius: 50%;background: red;position: absolute;left: 0;top: 0;}</style>
</head><body><div class="box"><div class="a"></div></div>
</body>
<script type="text/javascript">// 元素的获取var oa = document.querySelector(".a");var t;var speed = 2;var target = 500;document.onclick = function () {// 开始之前先清除定时器clearInterval(t);t = setInterval(() => {//重力运动,就是加速,每次计时器执行都将步长增加,实现加速speed++;// 判断每一步还够不够一步 ;判断是否到终点,没有到终点继续往下走// 目标 - 当前 < 步长if (target - oa.offsetTop < speed) {// 为了回弹这时候就不可以再清除计时器了// clearInterval(t);// 强行拉回来最后一步不够一步了,强行拉回来让它到目标oa.style.top = target + "px";// 回弹就是在原本要清除计时器的位置(到底了),将步长取反// speed = -speed;// 从2开始的,第一步就走了2px,当它弹起到定点的时候速度必须是0,这个时候弹起来的时候// 就比落下来的时候多走了两步,落下的时候也没有落到最底下,是落到了倒数第二个那个位置,// 因为最后一步是强行拉回去的,也就是说落下的时候又少了最后半步,而弹起来的时候是从最底下开始弹的,// 重力回弹,每次弹起的步长进行衰减(五分之一)speed = -speed * 0.8;// 步长小于0.5了四舍五入取不到1了就弹不起来了。发生偏差取绝对值速度if (Math.abs(speed) < 1) {// 清除计时器clearInterval(t)}// 没有到终点继续往下走} else {oa.style.top = oa.offsetTop + speed + "px";}console.log(1)}, 30)}</script></html>
重力回弹—抛物线
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><style type="text/css">.box {width: 900px;height: 600px;border: solid 1px black;margin: 50px auto;position: relative;}.a {width: 100px;height: 100px;border-radius: 50%;background: red;position: absolute;left: 0;top: 0;}</style>
</head><body><div class="box"><div class="a"></div></div>
</body>
<script type="text/javascript">// 重力-重力弹回-重力回弹抛物线var oa = document.querySelector(".a");var t;var speed = 2;var target = 500;// 除了垂直位置,再操作左右位置,需要单独设置一套信息var speedL = 10;var targetR = 800;document.onclick = function () {clearInterval(t)t = setInterval(() => {speed++;if (target - oa.offsetTop < speed) {oa.style.top = target + "px";speed = -speed * 0.8;if (Math.abs(speed) < 1) {clearInterval(t);}} else {oa.style.top = oa.offsetTop + speed + "px";}// 左右操作// 判断是否到右边,决定右边的回弹if (targetR - oa.offsetLeft < speedL) {// 强行设置到目标oa.style.left = targetR + "px";speedL = -speedL;// 设置left之前,要先判断计时器是否要被清除,不被清除再设置left。为了点击的时候小球再走} else if (Math.abs(speed) > 1) {// 因为左右是两套分支,设置left会执行两次,为了保证执行两次是一次的效果,所以步长再设置时,要减半oa.style.left = oa.offsetLeft + speedL / 2 + "px";}if (oa.offsetLeft < 0) {// 强行设置到 0oa.style.left = 0 + "px";speedL = -speedL;} else if (Math.abs(speed) > 1) {oa.style.left = oa.offsetLeft + speedL / 2 + "px";}}, 30)}
</script></html>
重力回弹一直弹—来回弹
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><style type="text/css">.box {width: 900px;height: 600px;border: solid 1px black;margin: 50px auto;position: relative;}.a {width: 100px;height: 100px;border-radius: 50%;background: red;position: absolute;left: 0;top: 0;}</style>
</head><body><div class="box"><div class="a"></div></div>
</body>
<script type="text/javascript">var oa = document.querySelector(".a");var t;var speed = 2;var target = 500;// 除了垂直位置,再操作左右位置,需要单独设置一套信息var speedL = 10;var targetR = 800;document.onclick = function () {clearInterval(t)t = setInterval(() => {// speed++;// 上下操作if (target - oa.offsetTop < speed) {oa.style.top = target + "px";speed = -speed * 0.8;if (Math.abs(speed) < 1) {clearInterval(t);}} else {oa.style.top = oa.offsetTop + speed / 2 + "px";}if (oa.offsetTop < 0) {// 强行设置到 0oa.style.top = 0 + "px";speed = -speed;} else if (Math.abs(speed) < 1) {oa.style.top = oa.offsetTop + speed / 2 + "px";}// 左右操作// 判断是否到右边,决定右边的回弹if (targetR - oa.offsetLeft < speedL) {// 强行设置到目标oa.style.left = targetR + "px";speedL = -speedL;// 设置left之前,要先判断计时器是否要被清除,不被清除再设置left。为了点击的时候小球再走} else if (Math.abs(speed) > 1) {// 因为左右是两套分支,设置left会执行两次,为了保证执行两次是一次的效果,所以步长再设置时,要减半oa.style.left = oa.offsetLeft + speedL / 2 + "px";}if (oa.offsetLeft < 0) {// 强行设置到 0oa.style.left = 0 + "px";speedL = -speedL;} else if (Math.abs(speed) > 1) {oa.style.left = oa.offsetLeft + speedL / 2 + "px";}}, 30)}
</script></html>
这篇关于重力运动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!