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 相关文章推荐
javascript正则表达式中参数g(全局)的作用
Nov 11 Javascript
两个Javascript小tip资料
Nov 23 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
Jun 26 Javascript
Node.js的包详细介绍
Jan 14 Javascript
浅谈js数据类型判断与数组判断
Aug 29 Javascript
jQuery Plupload上传插件的使用
Apr 19 jQuery
js es6系列教程 - 新的类语法实战选项卡(详解)
Sep 02 Javascript
常用的 JS 排序算法 整理版
Apr 05 Javascript
小程序getLocation需要在app.json中声明permission字段
Apr 04 Javascript
vue列表单项展开收缩功能之this.$refs的详解
May 05 Javascript
js模拟F11页面全屏显示
Sep 17 Javascript
详解node.js 事件循环
Jul 22 Javascript
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
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
PHP中的use关键字概述
2014/07/23 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
js调用iframe实现打印页面内容的方法
2014/03/04 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
微信小程序App生命周期详解
2018/01/31 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python查看数据类型的方法
2019/10/12 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
Python各种扩展名区别点整理
2020/02/27 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
大专生工程监理求职信
2013/10/04 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
Python实现视频自动打码的示例代码
2022/04/08 Python
Go语言安装并操作redis的go-redis库
2022/04/14 Golang