一、 在指定容器内的碰壁反弹

<!DOCTYPE HTML>
<html>
<head>
<title></title>
<meta charset="UTF-8"/>
<style type="text/css">
.ball{
height: 60px;
width: 60px;
background: blue;
border-radius: 50%; position: absolute;
top: 0;
left: 0;
}
</style>
</head>
<body>
<div class="ball"> </div>
<p style="width: 100%;height: auto;">
offsetWidth //返回元素的宽度(包括元素宽度、内边距和边框,不包括外边距) <br />
offsetHeight //返回元素的高度(包括元素高度、内边距和边框,不包括外边距)<br />
clientWidth //返回元素的宽度(包括元素宽度、内边距,不包括边框和外边距)<br />
clientHeight //返回元素的高度(包括元素高度、内边距,不包括边框和外边距)<br />
style.width //返回元素的宽度(包括元素宽度,不包括内边距、边框和外边距)<br />
style.height //返回元素的高度(包括元素高度,不包括内边距、边框和外边距)<br />
scrollWidth //返回元素的宽度(包括元素宽度、内边距和溢出尺寸,不包括边框和外边距),无溢出的情况,与clientWidth相同<br />
scrollHeigh //返回元素的高度(包括元素高度、内边距和溢出尺寸,不包括边框和外边距),无溢出的情况,与clientHeight相同<br />
offsetTop //返回元素的上外缘距离最近采用定位父元素内壁的距离,如果父元素中没有采用定位的,则是获取上外边缘距离文档内壁的距离。
所谓的定位就是position属性值为relative、absolute或者fixed。返回值是一个整数,单位是像素。此属性是只读的。<br />
offsetLeft //此属性和offsetTop的原理是一样的,只不过方位不同,这里就不多介绍了。<br />
scrollLeft //此属性可以获取或者设置对象的最左边到对象在当前窗口显示的范围内的左边的距离,也就是元素被滚动条向左拉动的距离。返回值是一个整数,单位是像素。此属性是可读写的。<br />
scrollTop //此属性可以获取或者设置对象的最顶部到对象在当前窗口显示的范围内的顶边的距离,也就是元素滚动条被向下拉动的距离。 返回值是一个整数,单位是像素。此属性是可读写的。
</p> </body>
<script type="text/javascript">
var ball = document.querySelector('.ball'); setInterval(scroll,50); //全局变量,避免进入函数每次都需要重新声明一次
var stepX = 5;
var stepY = 5;
function scroll(){
var scrollW = ball.offsetLeft + stepX;
var scrollH = ball.offsetTop + stepY; if(scrollW >= 800){
stepX *= -1;
}else if(scrollW <= 0){
stepX *= -1;
} if(scrollH >= 400){
stepY = -stepY;
}else if(scrollH <= 0){
stepY = -stepY;
} ball.style.left = scrollW + "px";
ball.style.top = scrollH + "px";
}
</script>
</html>
二、 整个浏览器可视区域的碰壁反弹

<!DOCTYPE HTML>
<html>
<head>
<title></title>
<meta charset="UTF-8"/>
<style type="text/css">
body{
margin: 0;
padding: 0;
}
#bounce{
height: 50px;
width: 50px;
border-radius: 50%;
/*background: yellow;*/ position: absolute;
left: 0;
top: 0;
}
</style>
</head>
<body>
<div id="bounce"> </div>
</body>
<script type="text/javascript">
//获取元素
var container = gt("con");//小球所在容器
var bounce = gt("bounce");//反弹的小球 //设置小球随机背景颜色
bounce.style.background = ranColor(); //获取小球在可视区域的滚动范围
//获取可视区域的宽高(不含任务栏)
var aWidth = document.documentElement.clientWidth || document.body.clientWidth || window.innerWidth;
var aHeight = document.documentElement.clientHeight || document.body.clientHeight || window.innerHeight;
console.log("可视区域不含任务栏的范围:w:"+aWidth + "===h:"+aHeight); //减去小球的宽高即为活动范围,此处不加单位,方便moveDistance()方法内if条件判断
var scrollMaxX = (aWidth - bounce.offsetWidth);
var scrollMaxY = (aHeight - bounce.offsetHeight); console.log("小球可滚动的范围:x:"+scrollMaxX+"===y:"+scrollMaxY); //设置小球滚动,每隔几秒滚动一段距离
// var timer = setInterval(function(){alert("haha")},1000);
var timer = setInterval(moveDistance,30); //设置小球移动
var stepX = 5;
var stepY = 5;
function moveDistance(){
// console.log("进入moveDistance") var currentLeft = bounce.offsetLeft + stepX;
var currentTop = bounce.offsetTop + stepY; //判断小球是否滚动到最大的宽度、高度,如果滚动到最大宽度、高度,设置反弹滚动 *(-1)
if(currentLeft >= scrollMaxX){
currentLeft = scrollMaxX;
stepX *= -1;
bounce.style.background = ranColor();
}else if(currentLeft <= 0){
currentLeft = 0;
stepX *= -1;
bounce.style.background = ranColor();
} if(currentTop >= scrollMaxY){
currentTop = scrollMaxY;
stepY *= -1;
bounce.style.background = ranColor();
}else if(currentTop <= 0){
currentTop = 0;
stepY *= -1;
bounce.style.background = ranColor();
} bounce.style.left = currentLeft + 'px';
bounce.style.top = currentTop + 'px'; console.log(bounce.style.left);
// console.log("离开moveDistance");
} //设置窗口改变监听器;onresize 事件会在窗口或框架被调整大小时发生。
//当浏览器窗口发生改变时,重新获取浏览器当前可视化窗口的尺寸,重新计算小球能移动的最大宽度和高度
window.onresize = function(){
aWidth = document.documentElement.clientWidth || document.body.clientWidth || window.innerWidth;
aHeight = document.documentElement.clientHeight || document.body.clientHeight || window.innerHeight; scrollMaxX = (aWidth - bounce.offsetWidth);
scrollMaxY = (aHeight - bounce.offsetHeight);
} //设置小球随机颜色方法
function ranColor(){
var red = parseInt(Math.random()*255);
var green = parseInt(Math.random()*255);
var blue = parseInt(Math.random()*255);
return "RGB(" + red + "," + green + "," + blue + ")";
} //设置通过id获取元素的函数
function gt(e){
return document.getElementById(e);
}
</script>
</html>

js中小球碰壁反弹的更多相关文章

  1. (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前一篇博文介绍了物理对象中小球与砖块的碰撞处理,在这一篇中我们再 ...

  2. 原生js实现多个随机大小颜色位置速度小球的碰壁反弹

    文章地址 https://www.cnblogs.com/sandraryan/ 需求:生成n个小球,让他们在一个大盒子中碰壁反弹,要求小球随机颜色,大小,初始位置,运动速度. 思路分析: 创建小球随 ...

  3. js实现div的碰壁反弹效果

    文章地址 https://www.cnblogs.com/sandraryan/ 需求: 写一个div,让div在父级进行匀速运动,碰到父级上下左右的边框,就向反方向运动. 碰壁反弹在游戏制作中很常用 ...

  4. 初探JavaScript(三)——JS带我"碰壁"带我飞

    已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...

  5. 拾取模型的原理及其在THREE.JS中的代码实现

    1. Three.js中的拾取  1.1. 从模型转到屏幕上的过程说开 由于图形显示的基本单位是三角形,那就先从一个三角形从世界坐标转到屏幕坐标说起,例如三角形abc 乘以模型视图矩阵就进入了视点坐标 ...

  6. 初步揭秘node.js中的事件

    当你学习node.js的时候,Events是一个非常重要的需要理解的事情.非常多的Node对象触发事件,你能在文档API中找到很多例子.但是关于如何写自己的事件和监听,你可能还不太清楚.如果你不了解, ...

  7. js实现小球的弹性碰撞。

      前  言 MYBG 小编最近在做自己的个人网站,其中就用到了一个小球碰撞检测的功能,想自己写,无奈本人能力不足啊(毕竟还是一个菜鸟)!!就想着找个插件用一下也好,可是找了好久也没有找到一个比较好用 ...

  8. (NO.00004)iOS实现打砖块游戏(八):游戏中小球与砖块的碰撞

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在回到GameScene.m中,我们所有的碰撞处理就放在该类中 ...

  9. 【面试篇】寒冬求职季之你必须要懂的原生JS(中)

    互联网寒冬之际,各大公司都缩减了HC,甚至是采取了“裁员”措施,在这样的大环境之下,想要获得一份更好的工作,必然需要付出更多的努力. 一年前,也许你搞清楚闭包,this,原型链,就能获得认可.但是现在 ...

随机推荐

  1. JavaFX桌面应用-视频转码工具(支持爱奇艺qsv转mp4)

    最近由于需要将在爱奇艺下载的视频(qsv)转化了mp4,用JavaFX开发一个视频转码工具,算是JavaFX开发的第一个应用吧. 支持qsv转码mp4,理论上支持各种格式,仅测试了flv,qsv格式. ...

  2. Linux与Windows的区别(后面了解后继续更新)

    1.转自知乎上的@Haoyuan Xing得答案: Linux是一个以开发者为中心的操作系统,Windows是以消费者为中心的操作系统.这是最根本的区别,也是Linux相对于Windows的优势/劣势 ...

  3. 遗传算法框架-基于java jenetics库实现

    本篇并非介绍如何从0开始开发遗传算法框架,反而推荐各位使用已有的GA库jenetics来做遗传算法. GA算法的逻辑还是贴下: 好了,下面介绍的是基于jenetics开发的更贴近业务侧的框架,以及使用 ...

  4. Ubuntu 18.04 安装配置 go 语言

    Ubuntu 18.04 安装配置 go 语言 1.下载 下载 jdk 到 Downloands 文件夹下 cd 进入 /usr/local, 创建 go 文件夹, 然后 cd 进这个文件夹 cd / ...

  5. Android 使用AS编译出错:找不到xx/desugar/debug/66.jar (系统找不到指定的文件。)

    以为是合作人配置文件的问题,后发现是缓存的问题,只需要Clean project,即可. 若提示无法删除目录:Unable to delete directory,或许是因为你打开了另一个项目,只需关 ...

  6. Java面试通关要点汇总整理

    简历篇 请自我介绍 请介绍项目 基础篇 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区 ...

  7. 结合Excel批量操作网页,模拟登陆

    有这样一个场景,客户的一批账户密码保存在Excel中,需要逐一登录,进行某些操作 从头开始来的话很麻烦,读取Excel,安装Web控件,主要是控件操作没有很方便,有没有类似原始js调用.jqurey调 ...

  8. 团队作业4:第三篇Scrum冲刺博客(歪瑞古德小队)

    目录 一.Daily Scrum Meeting 1.1 会议照片 1.2 项目进展 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3.2 Code Review 记录 3.3 issue ...

  9. CSS 选择器及优先级

    CSS 选择器及优先级 1.根据权值计算 div .class1 #people的权值等于1+10+100=111 .class2 li #age的权值等于10+1+100=111 2.权值相同,那么 ...

  10. Unity动画优化

    Unity动画优化 https://blog.csdn.net/TracyZly/article/details/79991593 Unity中Animator做UI动画的一些细节 https://b ...