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 相关文章推荐
jquery 简单图片导航插件jquery.imgNav.js
Mar 17 Javascript
jQuery的链式调用浅析
Dec 03 Javascript
jQuery :nth-child前有无空格的区别分析
Jul 11 Javascript
Jqgrid之强大的表格插件应用
Dec 02 Javascript
Node.js实现JS文件合并小工具
Feb 02 Javascript
vue2的todolist入门小项目的详细解析
May 11 Javascript
vue引入jq插件的实例讲解
Sep 12 Javascript
详解如何在angular2中获取节点
Nov 23 Javascript
webpack 单独打包指定JS文件的方法
Feb 22 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
Mar 16 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
Aug 31 Javascript
Array.filter中如何正确使用Async
Nov 04 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
十天学会php之第十天
2006/10/09 PHP
让你的网站首页自动选择语言转跳
2006/12/06 PHP
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
php实现两个数组相加的方法
2015/02/17 PHP
PHP函数超时处理方法
2016/02/14 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
jquery果冻抖动效果实现方法
2015/01/15 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
python 调用HBase的简单实例
2016/12/18 Python
python实现windows下文件备份脚本
2018/05/27 Python
对python字典过滤条件的实例详解
2019/01/22 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
什么是数据抽象
2016/11/26 面试题
大型会议接待方案
2014/03/01 职场文书
活动总结范文
2014/08/30 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
vue elementUI表格控制对应列
2022/04/13 Vue.js