js 拖拽 碰撞 + 重力 运动
<!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 拖拽 碰撞 + 重力 运动的更多相关文章
- js 碰撞 + 重力 运动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- html5 Sortable.js 拖拽排序源码分析
最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的. 本帖属于原创,转载请出名出处. 官网http:// ...
- 再谈React.js实现原生js拖拽效果
前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...
- React.js实现原生js拖拽效果及思考
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
- js拖拽效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 关于 JS 拖拽功能的冲突问题及解决方法
前言 我在之前写过关于 JS 拖拽的文章,实现方式和网上能搜到的方法大致相同,别无二致,但是在一次偶然的测试中发现,这种绑定事件的方式可能会和其它的拖拽事件产生冲突,由此产生了对于事件绑定的思考.本文 ...
- js拖拽分析
js拖拽分析 思路 1.三个鼠标事件,mousedown,mousemove,mouseup 2.可移动性absolute 3.边界限制 得到鼠标点击处和div边界的距离,然后得出top 和 left ...
- JS拖拽div(移动)
<!doctype html><html><head> <meta charset="utf-8"> <title>JS ...
- 浅谈js拖拽
本文来自网易云社区 作者:刘凌阳 前言 本文依据半年前本人的分享<浅谈js拖拽>撰写,算是一篇迟到的文章. 基本思路 虽然现在关于拖拽的组件库到处都是,HTML5也把拖放纳入了标准.但考虑 ...
随机推荐
- 软件工程_7th weeks
内聚和耦合(学习笔记) 一.内聚 内聚是一个模块内部各成分之间相关联程度的度量.把内聚按紧密程度从低到高排列次序为: 1.偶然内聚:指一个模块内各成分为完成一组功能而组合在一起,它们相互之间即使有关系 ...
- PHP常用工具类积累
第一 请求第三方接口的工具类 例如,封装了get和post请求方法的工具类,代码如下: <?php class HttpClient{ /** * HttpClient * @param arr ...
- Django-website 程序案例系列-13 中间件
自定义中间件1: from django.utils.deprecation import MiddlewareMixin # 中间件需要引用的包 class Row1(MiddlewareMixin ...
- 洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)
洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d| ...
- 自学Python1.6-Centos内英文语法切换
自学Python之路 自学Python1.6-Centos内中英文语法切换 测试采用是官方Centos7.0系统 1.添加中文输入法 打开设置---区域和语言--->在输入源最下面有一个 + 号 ...
- Coablt strike官方教程中文译版本
安装和设置 系统要求 Cobalt Strike的最低系统要求 2 GHz +以上的cpu 2 GB RAM 500MB +可用空间 在Amazon的EC2上,至少使用较高核数的CPU(c1.medi ...
- Java -- JDBC 学习--通过Statement进行数据库更新操作
通过 JDBC 向指定的数据表中插入一条记录. 1. Statement: 用于执行 SQL 语句的对象 1). 通过 Connection 的 createStatement() 方法来获取 2). ...
- Git中设置代理和取消代理
设置Socks5代理 git config --global http.proxy 'socks5://127.0.0.1:1080' && git config --global h ...
- A1015. Reversible Primes
A reversible prime in any number system is a prime whose "reverse" in that number system i ...
- javascript面向对象精要第五章继承整理精要
javascript中使用原型链支持继承,当一个对象的[prototype]设置为另一个对象时, 就在这两个对象之间创建了一条原型对象链.如果要创建一个继承自其它对象的对象, 使用Object.cre ...