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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
body{margin:0;padding:0;}
div{width:100px;height:100px;background:red;position:absolute;left:0;top:30px;}
</style>
<script>
var ispeedX = 0;
var ispeedY = 0;
window.onload = function(){
var oBtn = document.getElementsByTagName('input')[0];
var oDiv = document.getElementsByTagName('div')[0]; oBtn.onclick = function(){
elasticStartMove(oDiv);
};
var lastX = 0; /*拖的快就快碰撞,拖的慢就慢碰撞*/
var lastY = 0;
oDiv.onmousedown = function(ev){
var ev = ev || event;
var disX = ev.clientX-this.offsetLeft;
var disY = ev.clientY-this.offsetTop; document.onmouseover = function(ev){
var oEvent = ev || event;
var l = oEvent.clientX-disX;
var t = oEvent.clientY-disY;
ispeedX = l-lastX;
ispeedY = t-lastY;
lastX = l;
lastY = t;
oDiv.style.left = l+'px';
oDiv.style.top = t+'px'; }; document.onmouseup = function(){
document.onmouseover = document.onmouseup = null;
elasticStartMove(oDiv);
};
};
}; function elasticStartMove(obj){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
ispeedY += 3; /*受重力因素,越来越快,加上重力摩擦会变得越来越小*/
var t = obj.offsetTop+ispeedY;
var l= obj.offsetLeft+ispeedX;
// alert("obj.offsetTop:"+obj.offsetTop+"ispeedY:"+ispeedY+"t:"+t);
if(t >= document.documentElement.clientHeight - obj.offsetHeight){
ispeedY *= -0.8;/*重力因素,让速度越来越小,高度不会变*/
ispeedX *= 0.8;
t = document.documentElement.clientHeight - obj.offsetHeight;
}else if(t<=0){
ispeedY *= -0.8;
t = 0;
}
if(l >= document.documentElement.clientWidth - obj.offsetWidth){
ispeedX *= -0.8;
l = document.documentElement.clientWidth - obj.offsetWidth; //避免超出范围碰撞,出现滚动条
}else if(l<=0){
ispeedX *= -0.8;
l = 0
}
/*如果isped为小数,会往回跑,300.3-300 299.5->299*/
if(Math.abs(ispeedX) <1){
ispeedX = 0;
}
if(Math.abs(ispeedY) <1){
ispeedY = 0;
}
if(ispeedX ==0 && ispeedY == 0 && t == document.documentElement.clientHeight - obj.offsetHeight ){
clearInterval(obj.timer); }else{
obj.style.top = t+'px';
obj.style.left = l+'px'; } },30); }
</script>
</head> <body>
<input type='button' value='开始运动'/>
<div></div>
</body>
</html>
js 碰撞+拖拽的更多相关文章
- Js元素拖拽功能实现
Js元素拖拽功能实现 需要解决的问题 最近项目遇到了一个问题,就是用户某个操作需要弹出一个自定义的内容输入框,但是有个缺点,当浏览太大的时候没办法点击确认和取消按钮,应为这个弹出框是采用绝对定位的,取 ...
- js之拖拽事件
js之拖拽事件 api:https://www.runoob.com/jsref/event-ondrag.html 拖拽事件是js原生的事件,使用时在div上添加 draggable="t ...
- JS—实现拖拽
JS中的拖拽示例: 1)实现拖拽思路:当鼠标按下和拖拽过程中,鼠标与拖拽物体之间的相对距离保持不变 2)实现拖拽遇到的问题: 问题1:当鼠标按下移动过快时,离开了拖拽的物体时 ...
- js鼠标拖拽
html <div id="box"> </div> css ;;} #box{width:200px;height:200px;background:cy ...
- 原生Js实现拖拽(适用于pc和移动端)
效果: HTML和CSS部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- js 利用jquery.gridly.js实现拖拽并且排序
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js 实现拖拽排序
<!DOCTYPE> <html lang="zh-cn"> <head> <meta http-equiv="Content- ...
- jquery.dragsort.js 实现拖拽过程遇到的问题
.在IE下第一次拖动的时候,被拖动的li元素会不显示,查了很多资料发现是因为在IE中定位出了问题,li标签还在,只是位置计算出错.解决的办法是在li的css样式中position设置为relative ...
- JS实现拖拽功能
本文代码地址(第一节):https://github.com/dirstart/js-exam/blob/master/%E6%8B%96%E6%8B%BDdiv1.html 第二节:https:// ...
随机推荐
- 吴裕雄--天生自然python学习笔记:Python3 错误和异常
语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 >>>while True print('Hello world') File "< ...
- 吴裕雄--天生自然 R语言开发学习:中级绘图(续二)
#------------------------------------------------------------------------------------# # R in Action ...
- 流量全球第4的Reddit到底是一个怎样的网站?
对于喜欢NBA的我来说,Reddit是经常接触的一个网站.或者说,很多关于NBA的最新消息都是从Reddit上传出来的.值得一提的是,NBA版块在Reddit所有版块中用户活跃程度排名第三,也是体育版 ...
- Selenium&Pytesseract模拟登录+验证码识别
验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...
- rpm报错warning: /var/tmp/rpm-tmp.1OZa8q: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY的解决
参考链接:http://blog.51cto.com/zymin0823/1546537 报错: 解决:使用如下两个选项
- Proto3:Arena分配指南
Arena分配是仅C++有的功能,在使用Protocol Buffer时,它可以帮助你优化你的内存使用,提高性能.在.proto文件中启用Arena分配会在生成的C++代码中添加处理Arena分配的额 ...
- 公司更需要会哪种语言的工程师?IEEE Spectrum榜单发布
IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 St ...
- 开始使用Github
Gather ye rosebuds while ye may 我自己也是刚开始使用github没几天,写得不好我就写自己常用的吧 2015年9月20日下午3:19更新知乎上这个答案写得好多了
- 网络编程之C10K
网络编程之C10K 虽然在过去的十几年里C10K问题已经可以很好的解决,但学习网络编程时研究C10K问题仍然价值巨大,因为技术的发展都是有规律和线索可循的,了解C10K问题及其解决思路,通过举一反三, ...
- 安卓权威编程指南-笔记(第21章 XML drawable)
在Andorid的世界里,凡事要在屏幕上绘制的东西都可以叫drawable,比如抽象图形,Drawable的子类,位图图形等,我们之前用来封装图片的BitmapDrawable就是一种drawable ...