JS重力模拟器
1.首先,新建一个大盒子我们给他起名id为box,设置css属性
#box {
border: 3px solid black;
overflow: hidden;
position: relative;
width: 1152px;
height: 648px;
margin: 0 auto;
margin-top: 50px;
overflow: hidden;
}
2.其次我们建立一个id名为div1的盒子作为我们的主角,也就是下落物体,css样式为
#div1{
position: absolute;
left: 10px;
top: 100px;
height: 100px;
width: 100px;
background-color: chartreuse;
}
3.接下来就要嵌入js代码了,首先我们获取所有id
const box=document.getElementById('box');
const renwu=document.getElementById('div1');
//值得一提的是const 是 ECMAScript 6 的命名变量的方式,赋值结束后不可修改//
4.我们可以像物理上的计算匀加速运动一样建立一个初始速度和最大速度(防止越加越快)
let speed = 0;
const maxspeed = 8;(经计算后最合适的值)
//let 也是 ECMAScript 6 的命名变量的方式,赋值结束后可修改//
5.现在我们来写一个函数
function down() {
speed = speed < maxspeed ? speed + 0.3 : maxspeed;
div1.style.top = div1.offsetTop + speed + "px";
// div1.offsetTop中的offsetTop一定是针对已定位元素获取//
}
6.ok,现在我们写一个计时器测试让他运行
downTimer = null;
downTimer = setInterval(down, 30);
7.现在他就会一直下落,先做匀加速直线运动,后做匀速直线运动,但是他可停不下来了啊,
现在就写一个当我鼠标点击父盒子box时就取消定时器在下面运行
box.onclick = function () {
clearInterval(downTimer);
}
8.然后写向上的模拟(我们点一下就往上给他加一下速,受重力影响会减速然后反向加速,我们这里需要加一个定时器让他点了之后速度就等于最大速度然后一直减速到0,如果小于等于0就清除当前定时器,开启downTimer,否则就一直30毫秒执行一次的减速,减速到0)
紧接着写到box.onclick里,
box.onclick = function () {
clearInterval(downTimer);
clearInterval(upTimer);
speed = maxspeed;
upTimer = setInterval(function () {
speed = speed - 0.7;
if (speed <= 0) {
clearInterval(upTimer);
downTimer = setInterval(xialuo, 30);
}
div1.style.top = div1.offsetTop - speed + "px";
}, 30);
}
现在就可以实现重力模型了,(记住在一开始命名两个定时器 downTimer = null; upTimer= null;)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理