JS实现的碰撞检测与周期移动完整示例


Posted in Javascript onSeptember 02, 2019

本文实例讲述了JS实现的碰撞检测与周期移动。分享给大家供大家参考,具体如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style type="text/css">
    #main {width:525px;
          height:300px;
          border:3px double black;
}
    #t {font-size:30px;
        color:blue;
        width:120px;
        height:35px;
        position:absolute;
        left:1;
        top:1;
    }
</style>
</head>
<body>
<div id="main" onMouseDown="MovePos();" onMouseUp="BeginMove();">
    <div id="t" >移动文本</div>
</div>
<script type="text/javascript">
    var tID;
    var iDeltaX = 1,iDeltaY = 1,iTmp;
    var obj = document.getElementById("t");
    var x = obj.style.left;
    var y = obj.style.top;
    var TOPX = 420,BOUNDX =1,TOPY =270,BOUNDY=1;
    function MovePos()
    {
        clearTimeout(tID);//每次运动前都要清除上一次的定时器,这个是关键!!
        x=parseInt(x+iDeltaX);
        y=parseInt(y+iDeltaY);
        //注意!x=x+1;和x=x+iDeltaX;都不行!
        //核心:反弹碰撞算法
        if(x>TOPX || x<BOUNDX || y>TOPY || y<BOUNDY)
        {
            iTmp = iDeltaX;
            iDeltaX=-iDeltaY;
            iDeltaY=iTmp;
        }
        //文本没移动10步后(每次移动步长1像素),文本颜色就变为红色,再移动10步后,文本颜色又变成蓝色,并持续这种切换方式
        if(x%10==0)
        {
            if(x%20==0){
                obj.style.color = "blue";
            }else{
                    obj.style.color = "red";
            }
        }
        obj.style.left = x+"px";
        obj.style.top = y+"px";
        //注意!obj.setAttribute("left",x);obj.setAttribute("top",y);是不行的!
        //设置定时器
        tID=setTimeout("MovePos()",10);
    }
    function BeginMove(){
        clearTimeout(tID);
    }
    //当鼠标点击在div(id="main")内按下时,运动开始,并且在鼠标弹起时运动结束,所以,要在div(id="main")内按下鼠标单击,然后在div(id="main")外松开,鼠标弹起
    //其实这个不怎么完美,因为div(id="main")的位置还没调好,不过,反弹效果成功了
</script>
</body>
</html>

运行效果:

JS实现的碰撞检测与周期移动完整示例

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js计算页面刷新的次数
Jul 20 Javascript
Javascript函数式编程语言
Oct 11 Javascript
jQuery实现Email邮箱地址自动补全功能代码
Nov 03 Javascript
jQuery+CSS3实现3D立方体旋转效果
Nov 10 Javascript
AngularJS 单元测试(二)详解
Sep 21 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
Mar 09 Javascript
Bootstrap实现的标签页内容切换显示效果示例
May 25 Javascript
vue如何解决循环引用组件报错的问题
Sep 22 Javascript
浅谈JS的原型和继承
May 08 Javascript
javascript实现鼠标点击生成文字特效
Dec 24 Javascript
jQuery实现简单QQ聊天框
Aug 27 jQuery
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
Sep 02 #Javascript
layui数据表格跨行自动合并的例子
Sep 02 #Javascript
Vue form表单动态添加组件实战案例
Sep 02 #Javascript
小程序和web画三角形实现解析
Sep 02 #Javascript
vue-cli随机生成port源码的方法
Sep 02 #Javascript
微信小程序 云开发模糊查询实现解析
Sep 02 #Javascript
layui 数据表格 点击分页按钮 监听事件的实例
Sep 02 #Javascript
You might like
php删除数组元素示例分享
2014/02/17 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
smarty缓存用法分析
2014/12/16 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
javascript计时器详解
2015/02/28 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
python实现QQ批量登录功能
2019/06/19 Python
Python中拆分字符串的操作方法
2019/07/23 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
python的range和linspace使用详解
2019/11/27 Python
自荐信封面
2013/12/04 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
文秘应届生求职信
2014/07/05 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
Python socket如何解析HTTP请求内容
2022/02/12 Python