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 相关文章推荐
Prototype PeriodicalExecuter对象 学习
Jul 19 Javascript
jquery 操作表格实现代码(多种操作打包)
Mar 20 Javascript
JavaScript 实现鼠标拖动元素实例代码
Feb 24 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
Nov 22 Javascript
jquery实现触发时更新下拉列表内容的方法
Dec 02 Javascript
Angular JS数据的双向绑定详解及实例
Dec 31 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
Mar 13 Javascript
vue select选择框数据变化监听方法
Aug 24 Javascript
微信小程序搭建自己的Https服务器
May 02 Javascript
详解基于原生JS验证表单组件xy-form
Aug 20 Javascript
js实现图片实时时钟
Jan 15 Javascript
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
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
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
PHP输出日历表代码实例
2015/03/27 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
js表单登陆验证示例
2016/10/19 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
JS实现图片切换特效
2019/12/23 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
python实现rest请求api示例
2014/04/22 Python
python复制文件的方法实例详解
2015/05/22 Python
Python模拟三级菜单效果
2017/09/11 Python
用python实现对比两张图片的不同
2018/02/05 Python
python-numpy-指数分布实例详解
2019/12/07 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
Python如何读取、写入CSV数据
2020/07/28 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
大专应届生个人的自我评价
2013/11/21 职场文书
会计应聘求职信范文
2013/12/17 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
画展观后感
2015/06/17 职场文书
求职自我评价参考范文
2019/05/16 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python