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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)