<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>拖拽 碰撞+重力运动</title>
<style>
#div1
{
width:100px;
height:100px;
background:red;
position:absolute;
}
</style>
<script type="text/javascript">
window.onload = function(){
var oDiv = document.getElementById("div1");
var lastX = 0;
var lastY =0;
oDiv.onmousedown = function(ev){
var en = ev || event;
var disX = en.clientX - oDiv.offsetLeft;
var disY = en.clientY - oDiv.offsetTop;
document.onmousemove = function(ev){
var e = ev || event;
var l = e.clientX - disX;
var t = e.clientY - disY;
oDiv.style.left = l +'px';
oDiv.style.top = t + 'px';
speedX = l - lastX;
speedY = t - lastY;
}
document.onmouseup = function(){
document.onmousemove = null;
document.onmouseup = null;
//开始运动
move();
}
//关闭定时器
clearInterval(timer);
}
}
//碰撞+重力 运动(计算空气阻力)
var timer = null;
//横向初速度
var speedX = 0;
//竖向初速度速度
var speedY = 0;
function move(){
clearInterval(timer);
timer = setInterval(function(){
var oDiv = document.getElementById("div1");
//类似重力加速度 : g = 3;
//竖向加速度:3
speedY+=3;
var l = oDiv.offsetLeft + speedX ;
var t = oDiv.offsetTop + speedY;
if(t >= document.documentElement.clientHeight-oDiv.offsetHeight)
{
//竖向空气阻力
speedY*=-0.8;
//横向空气阻力
speedX*=0.8;
//将top设置为(document.documentElement.clientHeight - oDiv.offsetHeight)px
t = document.documentElement.clientHeight - oDiv.offsetHeight;
}
else if(t<=0)
{
//竖向空气阻力
speedY*=-0.8;
//横向空气阻力
speedX*=0.8;
//将top设置为0px
t=0;
}
if(l>=document.documentElement.clientWidth-oDiv.offsetWidth)
{
//横向空气阻力
speedX*=-0.8;
//将left设置为(document.documentElement.clientWidth - oDiv.offsetWidth)px
l = document.documentElement.clientWidth - oDiv.offsetWidth;
}
else if(l<=0)
{
//横向空气阻力
speedX*=-0.8;
//将left设置为0px
l = 0;
}
//将横向速度设置为0
if(Math.abs(speedX)<1)
{
speedX = 0;
}
//将竖向速度设置为0
if(Math.abs(speedY)<1)
{
speedY = 0;
}
//关闭定时器
//横、竖速度都为空及物体距顶部高度为(可视窗口高度 - 物体高度)
if(speedX==0 && speedY==0 && t==document.documentElement.clientHeight-oDiv.offsetHeight)
{
clearInterval(timer);
}
else
{
oDiv.style.left = l+'px';
oDiv.style.top = t +'px';
}
},30);
}
</script>
</head>
<body>
<div id="div1">
</div>
<span style="width:1px;height:300px;background:black;left:300px"></span>
</body>
</html>
js 拖拽 碰撞 + 重力 运动
原创
©著作权归作者所有:来自51CTO博客作者好学Ace的原创作品,请联系作者获取转载授权,否则将追究法律责任

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
JS拖拽功能的简单实现以及课程表拖拽排课
利用浏览器提供的拖拽API实现拖拽功能
拖拽 事件处理 拖拽操作 拖拽事件 -
js 碰撞 + 重力 运动
碰撞+重力运动
html 竖向 javascript -
原生JS实现各种运动之拖拽碰撞加重心运动
分享一个用原生JS实现的拖拽碰撞加上重心运动的小Demo,效果如下:以下是代码实现,欢迎大家复制粘贴及吐槽。<!DOCTYPE h
前端开发 JavaScript 赋值 html 拖拽 -
js 碰撞运动
碰撞运动
html xml 3c -
原生JS实现各种运动之碰撞运动
给大家分享一个用原生JS实现的碰撞运动,效果如下:实现代码如下,欢迎大家复制粘贴及吐槽。<!DOCTYPE html><h
前端开发 JavaScript html 复制粘贴 -
8 Babylonjs基础入门 相机,模型碰撞和重力效果
你玩过第一人称的射击游戏吗?大作CF,CS类型的。本教程,我们将模拟相同的相机运动:摄
babylon.js webgl 碰撞 重力 物理效果