JS实现小球的弹性碰撞效果


Posted in Javascript onNovember 11, 2017

一、HTML代码(body部分)

<body>
   <!--只需要做一个大div包裹几个小div即可,你想要几个小球碰撞就在内部做几个div即可,这里我们做了6个小球-->
   <div id="main">
     <div></div>
     <div></div>
     <div></div>
     <div></div>
     <div></div>
     <div></div>
   </div> 
 </body>

上面body部分这样就算是完成了,下面我们给body中的div做一些小样式。

二、CSS小球样式部分

<style type="text/css">
   /*将body默认的margin和padding部分去掉*/
   *{
     margin: 0px;
     padding: 0px;
    }
    /*采用定位的方式,让小球运动起来*/
    #main{
      margin: 0px auto;
     position: relative;
   }
   /*小球的样式*/
   #main div{
     overflow: hidden;
     position: absolute;
     width: 80px;
     height: 80px;
    opacity: 0.5;
     border-radius: 50%;
     background-color: red;
   }
 </style>

 

小球是要运动起来的,我们通过给小球和它的父元素添加定位,最后用js改变其top、bottom、left、right值来让小球运动。现在我们小球的样式已经做好了,下面的js代码才是重中之重。

3.1 Android 事件基础知识

其实,我们通过上面的代码就可以完全实现一个小球碰撞检测的功能了。但是仅仅是上面的代码,还是会存在一定的bug,就是当整个网站存在右侧滚动条时,当小球碰到屏幕右侧的时候,会出现一瞬的横向滚动条,这就是做网站比较忌讳的了,横向滚动条的出现太丑了。所以我们可以通过以下代码来解决。

//滚动条宽度计算函数
    function getScrollbarWidth() {
      var oP = document.createElement("p"),
        styles = {
          width: "100px",
          height: "100px",
          overflowY: "scroll"
        }, i, scrollbarWidth;
      for (i in styles) oP.style[i] = styles[i];
      document.body.appendChild(oP);
      scrollbarWidth = oP.offsetWidth - oP.clientWidth;
      oP.remove();
      return scrollbarWidth;
    }

以上是一个计算滚动条宽度的函数,此函数可以计算右侧滚动条的宽度,我们只需要在“根据浏览器窗口的大小自动调节小球的运动空间”上面,调用此函数

var scrollbarWidth = getScrollbarWidth(); 再修改小球的最大运动宽度   maxW=window.innerWidth-circles[0].clientWidth-scrollbarWidth ;这样这个bug就修改好了。

总结

以上所述是小编给大家介绍的JS实现小球的弹性碰撞效果 ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
获得Javascript对象属性个数的示例代码
Nov 21 Javascript
JavaScript的21条基本知识点
Mar 04 Javascript
JavaScript原型及原型链终极详解
Jan 04 Javascript
Bootstrap表单控件使用方法详解
Jan 11 Javascript
React进阶学习之组件的解耦之道
Aug 07 Javascript
angular6.0开发教程之如何安装angular6.0框架
Jun 29 Javascript
Vue resource三种请求格式和万能测试地址
Sep 26 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
Oct 25 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
Nov 28 Javascript
JS中实现浅拷贝和深拷贝的代码详解
Jun 05 Javascript
使用vue-router在Vue页面之间传递数据的方法
Jul 15 Javascript
快速解决element的autofocus失效问题
Sep 08 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 #jQuery
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 #Javascript
JS Input里添加小图标的两种方法
Nov 11 #Javascript
fetch 使用及如何接收JS传值
Nov 11 #Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
Nov 11 #Javascript
AngularJS遍历获取数组元素的方法示例
Nov 11 #Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
Nov 11 #Javascript
You might like
PR值查询 | PageRank 查询
2006/12/20 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
javascript 数组学习资料收集
2010/04/11 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
Python下简易的单例模式详解
2019/04/08 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
初一科学教学反思
2014/01/27 职场文书
石油大学毕业生自荐信
2014/01/28 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
2014年保卫工作总结
2014/12/05 职场文书