/*
*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 type="text/css">
*{ padding:0; margin:0;}
#div1 { width:100px; height:100px; position:absolute; background:red;}
</style> <script type="text/javascript">
window.onload = function (){
startMove("div1");
function startMove(id){
var iSpeedX = 10;
var iSpeedY = 10;
setInterval(function(){
var oDiv = document.getElementById(id); var l = oDiv.offsetLeft + iSpeedX;    //物体在X方向上的位移
var t = oDiv.offsetTop + iSpeedY;    //物体在Y方向上的位移 document.title = l + " , " + t + " , " + iSpeedX + " , " + iSpeedY;    //在标题栏显示位移坐标和当前在X、Y方向上的速度 if(t > document.documentElement.clientHeight - oDiv.offsetHeight){    //判断物体在Y方向上是否超出屏幕可视区的底部
t = document.documentElement.clientHeight - oDiv.offsetHeight;
iSpeedY *= -1;                                //改变当前在Y方向上的速度、回弹
}else if(t < 0){                                  //判断物体在Y方向上是否超出屏幕可视区的顶部
t = 0;
iSpeedY *= -1;                                 //再改变当前在Y方向上的速度、回弹
}
if(l > document.documentElement.clientWidth - oDiv.offsetWidth){      //判断物体当前在X方向上是否超出屏幕可视区的右边
l = document.documentElement.clientWidth - oDiv.offsetWidth;
iSpeedX *= -1;                                  //改变当前在X方向上的速度、回弹
}else if(l < 0){                                  //判断物体当前在X方向上是否超出屏幕可视区的左边
l = 0;
iSpeedX *= -1;                                 //改变当前物体在X方向上的速度、回弹
} oDiv.style.left = l + "px";
oDiv.style.top = t + "px"; },30);
}
}
</script>
</head> <body> <div id="div1"></div> </body>
</html>

  • 给物体初始一个在X、Y方向上的运动速度。
  • 通过定时器改变物体左右坐标改变left、top的值来实现位移效果
  • 判断物体是否超出可视区的边界值(改变物体在X、Y方向的速度)

JS简单回弹原理的更多相关文章

  1. JS垂直落体回弹原理

    /* *JS垂直落体回弹原理 */ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  2. js简单实现链式调用

    链式调用实现原理:对象中的方法执行后返回对象自身即可以实现链式操作.说白了就是每一次调用方法返回的是同一个对象才可以链式调用. js简单实现链式调用demo Object.prototype.show ...

  3. Sea.Js的运行原理(转)

    1.CMD(Common Module Definition)规范 Sea.js采用了和Node相似的CMD规范,使用require.exports和module来组织模块.但Sea.js比起Node ...

  4. 原生js简单调用百度翻译API实现的翻译工具

    先来个在线demo: js翻译工具 或者百度搜索js简单调用百度翻译API工具(不过有个小小的界面显示bug,我想细心的人应该会发现) 或者直接前往该网址:js翻译工具 或者前往我的github:gi ...

  5. JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能

    摘要: 理解浏览器渲染. 原文:JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是专门探索 J ...

  6. vue.js响应式原理解析与实现

    vue.js响应式原理解析与实现 从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染.之后,再接触了vue.js,当时也一度很 ...

  7. 深入解析vue.js响应式原理与实现

    vue.js响应式原理解析与实现.angularjs是通过脏检查来实现数据监测以及页面更新渲染.之后,再接触了vue.js,当时也一度很好奇vue.js是如何监测数据更新并且重新渲染页面.vue.js ...

  8. vuex中mapGetters的使用及简单实现原理

    一.项目中的mapGetters在Vue项目的开发过程中必然会使用到vuex,对vue项目公用数据进行管理,从而解决组件之间数据相互通信的问题,如果不使用vuex,那么一些非父子组件之间的数据通信将会 ...

  9. js 简单的滑动2

    js 简单的滑动教程(二)   作者:Lellansin 转载请标明出处,谢谢 现在我们让滑动多一个功能,三张图.点击左边向左滑动,点右向右滑,碰到临界值的时候可以循环滑动 原理也很将简单,用posi ...

随机推荐

  1. Raid5(五块磁盘,三块做raid,两块做备份)

    1.在虚拟中再添加五块磁盘.  2.使用mdadm命令创建raid5,名称为“/dev/md5”. -C代表创建操作,-v显示创建过程,-a yes检查RAID名称,-n是用到的硬盘个数,-l是定义R ...

  2. websocket对象及方法

    # websocket对象及方法 1.websocket对象 以下 API 用于创建 WebSocket 对象. var Socket = new WebSocket(url, [protocol] ...

  3. Spring IoC(一)bean实例化和依赖注入

    1.IoC容器概述 IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入. 所谓 IOC ,就 ...

  4. 树莓派安装raspbian并配置开发环境

    1.烧录系统 首先准备好我们要烧录的raspbian系统,可以在树莓派官网中下载https://www.raspberrypi.org/downloads/ 这里我们选择 2018-11-13-ras ...

  5. nginx+keepalived实现主从高可用

    设备: 主:192.168.200.122 从:192.168.200.124 安装:两台都分别安装nginx以及keepalived 两台机步骤一致一主一从 安装nginx的依赖包 [root@lo ...

  6. 不要在mutation回调函数之外,修改vuex仓库里属性的状态

    [vuex] do not mutate vuex store state outside mutation handlers. import * as types from './mutation- ...

  7. TCP 连接建立分析

    tcp 三次握手与四次挥手 tcp 报文结构 tcp 是全双工的,即 client 向 server 发送信息的同时,server 也可以向 client 发送信息. 在同主机的两个 session ...

  8. MyBatis-Plus学习笔记(2):代码生成器

    AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity.Mapper.Mapper XML.Service.Control ...

  9. PTA的Python练习题(十三)

    第4章-8 求分数序列前N项和 a=eval(input()) b=2 c=1 d=0 count=0 for i in range(a): count+=b/c d=b b=b+c c=d prin ...

  10. DVWA的文件上传漏洞(high)

    1.使用文件包含漏洞和文件上传漏洞,来连接shell 文件包含漏洞详细的漏洞介绍:https://blog.csdn.net/Vansnc/article/details/82528395 文件包含函 ...