目录

  • 思路
    • 自由落体运动
    • 抛物线运动
    • 缓冲运动
  • 代码
    • html:
    • css:
    • js:
  • 效果

思路

自由落体运动

1.小球落下:设置绝对定位,定时器中改变其top值
2.运动停止:设置目标值,达到目标值时清除定时器
3.回弹:单次方向到头时小球反向运动并缩小上限

抛物线运动

1.垂直方向上设置自由落体运动
2.水平方向上设置匀速往返运动
3.水平方向上到达边界时,就令水平方向上的速度为其相反数

缓冲运动

1.小球落下:设置绝对定位,定时器中改变其top值
2.小球速度随着定时器递减,让其减速下落
3.运动停止:设置目标值,达到目标值时清除定时器

代码

html:
<div class="box"><div class="ball1"></div><div class="ball2"></div><div class="ball3"></div><div class="line"></div>
</div>
<input type="button" value="自由落体">
<input type="button" value="抛物线">
<input type="button" value="缓冲运动">
css:
.box {width: 656px;height: 681px;border: 2px solid #000;background: seashell;position: relative;
}
.ball1,.ball2,.ball3 {width: 60px;height: 60px;background: tomato;border-radius: 50%;position: absolute;top: 0;left: 0;
}
.ball2 {background: violet;left: 100px;
}
.ball3 {background: yellow;left: 200px;
}
.line {width: 658px;height: 25px;background: #000;position: absolute;bottom: 0;
}
js:
var box = document.querySelector(".box");
var ball1 = document.querySelector(".ball1");
var ball2 = document.querySelector(".ball2");
var ball3 = document.querySelector(".ball3");
var line = document.querySelector(".line");
var inputs = document.querySelectorAll("input");//定义垂直和水平上的速度
var topSpeed = 5,leftSpeed = 25;
//定义垂直和水平方向上的边界值
var topTarget = box.offsetHeight - ball1.offsetHeight - line.offsetHeight,leftTarget = box.offsetWidth - ball1.offsetWidth;
// console.log(topTarget, leftTarget); //600 600
var timer = "";
inputs[0].addEventListener("click", function() {clearInterval(timer);timer = setInterval(() => {topSpeed += 5;console.log(topSpeed);if (ball1.offsetTop + topSpeed >= topTarget) {topSpeed = -topSpeed * 0.8; //触底后反弹并减小其值ball1.style.top = topTarget + "px";if (Math.abs(topSpeed) < 3) clearInterval(timer); //设置停止条件} else {ball1.style.top = ball1.offsetTop + topSpeed + "px"; //令小球下落}}, 100);
});
inputs[1].addEventListener("click", function() {clearInterval(timer);timer = setInterval(() => {topSpeed += 5;// console.log(topSpeed);// console.log(ball2.offsetLeft);if (ball2.offsetTop + topSpeed >= topTarget) {topSpeed = -topSpeed * 0.8;ball2.style.top = topTarget + "px";if (Math.abs(topSpeed) < 3) clearInterval(timer); //设置停止条件} else {ball2.style.top = ball2.offsetTop + topSpeed + "px"; //设置垂直方向上的移动:自由落体ball2.style.left = ball2.offsetLeft + leftSpeed + "px"; //设置水平方向上的移动:匀速往返// console.log(ball2.offsetLeft);}//设置水平方向上的边界if ((ball2.offsetLeft + leftSpeed) >= leftTarget) leftSpeed = -leftSpeed;if ((ball2.offsetLeft + leftSpeed) <= 0) leftSpeed = -leftSpeed;}, 100);
});
inputs[2].addEventListener("click", function() {clearInterval(timer);timer = setInterval(() => {topSpeed = (topTarget - ball3.offsetTop) / 10; //设置垂直方向上的速度递减topSpeed = topSpeed > 0 ? Math.ceil(topSpeed) : Math.floor(topSpeed);// console.log("topSpeed=", topSpeed);if (ball3.offsetTop + topSpeed >= topTarget) {clearInterval(timer); //设置运动的停止条件} else {// console.log("ball3.offsetTop=", ball3.offsetTop);ball3.style.top = ball3.offsetTop + topSpeed + "px"; //设置小球的移动}}, 100);
});

效果

2021-06-23 自由落体运动,抛物线运动和缓冲运动的实现相关推荐

  1. 自由落体和抛物线运动

    自由落体是个加速的过程,让速度递加,再给速度个系数,减小速度即可 抛物线是在自由落体的前提下left也会变,速度,速度系数 js函数 //自由落体和抛物线运动 function fallMove(ob ...

  2. DOM实现元素拖拽,滚轮事件和特效动画缓冲运动处理

    目录 元素拖拽实现(点击拖动可视屏幕任意位置) DOM滚轮事件处理 滚轮事件绑定 滚轮事件方向 滚轮事件兼容 滚轮缩放图片案例实现 特效动画 缓冲运动 单向缓冲运动 反复缓冲运动 简单的封装 透明度处 ...

  3. C++入门——仿真小球自由落体运动和抛物线运动

    参考 <C和C++游戏趣味编程> 童真 仿真自由落体的小球 实现小球受重力影响加速下落后,碰到地面反弹的效果 代码如下: #include <graphics.h> #incl ...

  4. 模拟自由落体运动的小球

    基于VS2019   EasyX插件   C/C++ 生成一个模拟自由落体运动的小球 #include <iostream> #include <graphics.h> #in ...

  5. pygame里面物体闪烁运动_教师资格【试讲示范】高中物理试讲答辩——《自由落体运动》试讲稿答辩...

    试讲备课纸 教学过程 各位考官: 大家好,我是高中物理组的***号考生,我试讲的题目是<自由落体运动>,下面开始我的试讲. 一.导入新课 同学们,老师手里现在拿着一个小笔记本和一张纸,现在 ...

  6. 手把手教你用Python来模拟绘制自由落体运动过程中的抛物线(附源码)

    前言 前几天有个叫[-berry]的粉丝在问了一道关于自由落体运动过程中产生的抛物线作图的问题,如下图所示. 当某个物体以初速度v水平抛出,其轨迹为一条抛物线,模拟绘制这条抛物线.用高中物理知识,我们 ...

  7. lammps案例:分子自由落体运动模拟

    大家好,我是小马老师. 本文分享一个比较有意思的lammps案例:分子的自由落体运动. lammps提供了fix gravity命令可设置分子或者原子的加速度. 语法规则为: fix ID group ...

  8. 在OpenGL中创建一个球体动画,使球体在窗口内做自由落体运动,并在撞击地面后能够返回原来高度

    这是计算机图形学基础的一道单元练习题,看题的时候觉得没什么,写出来才发现其中大有门道,其中有几个值得关注的地方: 首先如果你是以窗口底部为地面的话,你会发现小球在第二次下落时无法回弹,这就很恶心了,做 ...

  9. matlab小球水平抛出,如何用Matlab制作小球自由落体运动的动画

    第一堂课布置了一个Mission Impossible作业,要求学生们用Matlab制作一个动画,模拟小球的自由落体运动. 以下将整个任务的问题解决的过程分享如下: 步骤一,这是一个动画的制作过程,以 ...

最新文章

  1. Jersey 入门与Javabean
  2. t7910安装linux体会_linux心得体会范文
  3. 点击屏幕触发_MAC值得吹爆的便捷「触发角」功能
  4. Spring 5 新特性:函数式Web框架
  5. STC89C52RC单片机例程实现_流水灯1_模块化(C语言实现)
  6. css position left 50%
  7. cus.crm.notes.Component.extend(cus.crm.notes.ext.Component, {
  8. HTML5清爽简洁外贸网站模板
  9. 一些加快 程序运行速度的方法
  10. OpenShift 4 之集群是如何通过Cluster Version Operator升级的?
  11. db2v9/9.5高级应用开发_使用 Vue.js 2.0 开发单页应用
  12. 图像处理自学(五):CAMERA驱动软件硬件架构V4L2
  13. php完美实现下载远程图片保存到本地
  14. Vi编辑器基本常用命令
  15. Java项目开发-基于Java的宠物领养管理系统(附源码)
  16. C语言在线词典项目—Linux
  17. linux WPA_supplicant
  18. 大型复杂群体项目分解结构(PBS)概念与方法研究
  19. 【2019新年计划】
  20. Python字符串| min()

热门文章

  1. paddlenlp调用ERNIE、使用ERNIEKIT
  2. OpenCV中拆分通道、合并通道、alpha通道的讲解及实战演示(附python源码 超详细)
  3. 彻底干净地卸载 Visual Studio 系列
  4. 同步IO(阻塞IO、非阻塞IO), 异步IO的理解
  5. 网络协议(二) Socket
  6. 6.12 C语言练习([C语言训练]求函数值:按如下递归公式求函数值。 )
  7. 任正非、俞敏洪告诫有赞的老板白鸦:你错的离谱
  8. 前端面试之ES5与ES6的区别
  9. ARM 汇编的操作 设置CPU寄存器BASEPRI
  10. css通知页面,CSS3 transition 实现通知消息轮播条